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í.
ping
traceroute
tracert
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 http://iisnetdiag.codeplex.com/.
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:
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.
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).
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:
System.Net.NetworkInformation.Ping
FormHandler
PingHandler
TraceRouteHandler
ToolsHandlerFactory
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)