IIS Network Diagnostic Tools: Ping a Traceroute pro váš server

IIS Network Diagnostic Tools: Ping a Traceroute pro váš server

Neocenitelnými nástroji pro diagnostiku síťových problémů všeho druhu jsou příkazy ping a traceroute (tracert). Pro zjištění, ve které části síťové infrastruktury je ale obvykle žádoucí spustit je z několika různých míst. Existuje proto množství veřejných serverů, které vám tyto nástroje umožní spustit. Jejich přehled najdete například na www.traceroute.org. Chce to ovšem trpělivost, řada serverů tamo uvedených je nefunkční.

V zájmu rozmnožení jejich řad jsem napsal webovou aplikaci (přesněji modul pro IIS), který umožňuje jednoduše nabídnout možnost pingu a traceroute na jakémkoliv serveru. Jmenuje se IIS Network Diagnostic Tools a je zdarma ke stažení na https://iisnetdiag.codeplex.com/.

Co umí PING

Příkaz ping funguje tak, že vygeneruje náhodná data (na Windows typicky 32 bajtů, neřeknete-li jinak) a jako ICMP echo request je pošle cílovému klientovi, tedy počítači, jehož dostupnost chcete ověřit. Ten tatáž data pošle v podobě ICMP echo reply zpátky. Pingající počítač pak dokáže zjistit, jak dlouho to trvalo, případně zda vůbec dostal odpověď.

Ping má následující podstatné parametry:

  • Objem dat – nezáleží na jejich obsahu, ale na objemu. V mezních situacích se mohou sítě chovat různě pro malé a velké pakety.
  • Timeout – čas (obvykle udávaný v milisekundách) za který musí dorazit odpověď. Nedorazí-li, ping vypíše populární "Request timed out".
  • Počet požadavků – vzhledem k povaze ICMP nemá zaslání jednoho paketu příliš velkou vypovídací hodnotu. Jeden ztracený ping nic neznamená. Typicky bych tedy pošleme větší množství a vyhodnocujeme je statisticky.
  • TTL – zákeřná a často nepochopená hodnota "time to live". Nemá v zásadě nic společného s časem, ale je to počet "skoků", které může request vykonat, tj. přes kolik routerů může požadavek projít. Pokud nedosáhne svého cíle před vypršením tohoto čísla, zobrazí se stav "TTL expired in transit".

Norma RFC1122 sice stanoví, že každý počítač musí ICMP echo request přijmout a také na něj odpovědět, ale v dnešní době je to bohapustá teorie a zbožné přání. Velké množství firewallů ping blokuje, z údajně bezpečnostních důvodů. Pokud vám tedy neznámý počítač neodpovídá na ping, samo o sobě to nic neznamená, klidně může běžet a fungovat.

Co umí TRACEROUTE

Příkaz traceroute (na Windows tracert) představuje jenom komplikovanější formu použití příkazu ping. Jeho cílem je zobrazit cestu, jakou pakety šly. Ping vám řekne jenom, jestli se k danému cílovému počítači dostanete, ale už ne, kde je problém. Traceroute ano.

Postupuje tak, že opakovaně posílá ping, u kterého postupně zvyšuje parametr TTL. Tím vlastně "pingá" a odhaluje postupně všechny routery po cestě. Pokud některý neodpoví, nenechá se tím odradit a pošle další požadavek s TTL o jedna vyšším. Pokračuje, dokud mu neodpoví cílový stroj a nebo dokud není vyčerpán celkový počet pokusů (standardně 30).

IIS Network Diagnostic Tools

Funkcionalita PINGu je v .NETu součástí třídy System.Net.NetworkInformation.Ping. Je tedy velmi snadné si obě dvě služby napsat.  IIS Network Diagnostic Tools sestávají ze čtyř tříd:

  • FormHandler je HTTP handler, který umí zobrazit úvodní HTML formulář.
  • PingHandler je HTTP handler, který zobrazí výsledky PINGu.
  • TraceRouteHandler je HTTP handler, který zobrazí výsledky TRACEROUTE.
  • ToolsHandlerFactory je pomocná třída, handler factory, která rozděluje práci mezi tři výše uvedené handlery. Takže není nezbytné registrovat handlery samostatně, ale stačí zaregistrovat jednu factory.

Aplikaci včetně zdrojového kódu si můžete stáhnout na iisnetdiag.codeplex.com, naživo si  ji můžete vyzkoušet z našeho serveru v ČR nebo v USA.

Michal Valášek (ASP.NET MVP)