Address.ToString() na hostname

Odpowiedz Nowy wątek
2011-09-04 09:14
Nivana
0

Witam,
Dopiero się uczę C# i na pierwszy program wybrałem temat śledzenia trasy pakietów.
Używam wbudowanych metod Ping oraz PingReply.

Działanie programu.
Asynchronicznie wysyłany jest pakiet ICMP z wartością Ttl 1.Gdy Ttl osiągnie status IPStatus.TtlExpired tzn osiągnie pierwszy serwer/router to wyświetlą ip serwera/routera. Pętla sprawdzą czy został osiągnięty IPStatus.Success, jeżeli nie to Ttl + 1... i tak do osiągnięcia IPStatus.Success.

Jak mogę z odpowiedzi x.Reply.Address uzyskać hostname ?

kodu nie wklejam bo myślę, że nie w tym problem.

Pozostało 580 znaków

2011-09-04 10:02
0

Prawdopodobnie:

IPHostEntry ipentry = System.Net.Dns.GetHostByAddress(x.Reply.Address);
Console.WriteLine(ipentry.HostName.ToString());

Pozostało 580 znaków

2011-09-04 10:11
Nivana
0

Próbowałem w/w metodę ale dostaje komunikat "SocketException was un handled by user code - Żądana nazwa jest prawidłowa i została znaleziona w bazie danych, ale dane z którymi jest skojarzona, są niepoprawne"

Pozostało 580 znaków

2011-09-04 18:19
0

Ten błąd występuje w przypadku gdy nie istnieje rekord PTR (a co za tym idzie - hostname) skojarzony z danym adresem IP. Zrób sobie try..except i łap ten wyjątek informując użytkownika, że rekord odwrotny nie istnieje.

A Visual Studio podkreśla GetHostByAddress jako "obsolete" i zaleca używać GetHostEntry, przepraszam za niedokładne naprowadzenie wcześniej.

(nota bene, GetHostEntry rzuca o wiele lepszy komunikat błędu: "No such host is known", który jasno mówi o co chodzi)

edytowany 1x, ostatnio: Ktos, 2011-09-04 18:19

Pozostało 580 znaków

2011-09-05 08:35
0

Działa, b. dobrze mnie nakierowałeś. Problem tkwił w tym, że nie każdy adres ip można odwzorować w nazwie hostname.

Używając metody asynchronicznej wymuszam aby program działał nie czekając na zakończenie. I w momencie gdy próbował odwzorować adres ip na hostname zawieszał się. Po wprowadzeniu try.. catch działa już dobrze.

 try
     {
           IPHostEntry ipentry = System.Net.Dns.GetHostByAddress(odpowiedz.Address);
           hostname = ipentry.HostName;
      }
      catch (Exception ex)
       {
            hostname = "";
       }
 
        box.Items.Add("skok " + i.ToString() + ": " + odpowiedz.Address.ToString() + " " +hostname); 
edytowany 1x, ostatnio: Nivana, 2011-09-05 08:36

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0