Address.ToString() na hostname

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.

0

Prawdopodobnie:

IPHostEntry ipentry = System.Net.Dns.GetHostByAddress(x.Reply.Address);
Console.WriteLine(ipentry.HostName.ToString());
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"

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)

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); 

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