Ping
Utilitara Ping este principala unealta a administratorilor de sistem care e folosita pentru a verifica daca un computer este operativ si de asemenea pentru a vedea daca conexiunile retelei sunt intacte. Comanda ping foloseste functia Echo din Internet Control Message Protocol (ICMP).
ICMP
Protocolul Internet Protocol (IP) este folosit pentru serviciul de datagrame host-to-host intr-un sistem de retele interconectate numit Catenet. Dispozitivele de conectare ale retelelor sunt numite Gateway-uri. Aceste gateway-uri comunica intre ele prin Gateway to Gateway Protocol (GGP). Ocazional un gateway sau un host destinatie, va comunica cu un host sursa, de exemplu pentru a raporta o eroare in procesarea datagramelor. Pentru asemenea scopuri este folosit protocolul ICMP (Internet Control Message protocol). ICMP foloseste suportul de baza al IP, asemenea unui protocol de nivel mai inalt, totusi, ICMP este o parte integranta a IP si trebuie implementat de fiecare modul IP.
Mesajele ICMP sunt trimise in diferite situatii: de exemplu, cand o datagrama nu isi atinge destinatia, cand gatewayul nu are capacitatea buferilor pentru a transmite mai departe o datagrama, si cand gateway-ul poate directiona host-ul sa trimita traficul pe o ruta mai scurta.
Scopul principal al acestor mesaje de control este sa furnizeze feedbackul pentru probleme in mediul de comunicatie, si nu de a imbunatatii protocolul IP. Totusi nu sunt garantii ca o datagrama va fi furnizata sau un mesaj de control va fi returnat. Unele datagrame pot sa nu ajunga la destinatie si sa nu se primeasca nici un raport al pierderii lor.
Mesajele ICMP sunt caracterizate prin faptul ca raporteaza erori in procesarea datagramelor. Pentru a evita o regresie infiniita a mnesajelor despre mesaje etc, nici un messaj ICMP nu vafi trimis pentru alt mesaj ICMP. De asemenea mesajele ICMP sunt trimise pentru erori in cadrul fragmentului cu offsetul 0 in cadrul datagramelor fragmentate.
Mai multe despre ICMP in RFC 792.
Functionarea PING-ului
Un pachet mic este trimis in retea spre o anumita adresa de IP. Pachetul contine 64 de bytes - 56 bytes de date si inca 8 bytes ce contin informatii specifice protocolului. Computerul care trimite pachetul va astepta apoi (sau "asculta") pentru un pachet de raspuns. In cazul in care conexiunile sunt bune si calculatorul tinta functioneaza, un pachet de raspuns valid este primit. PING-ul poate de asemenea sa spuna userului numarul de "salturi" (hops) intre cele doua computere si durata de timp pentru un pachet pentru a parcurge un drum complet. In mod aditional un utilizator poate folosi Pingul pentru a testa rezolutia de nume. Daca pachetul se intoarce cand e trimis la adresa de IP dar nu si cand e trimis la nume, atunci sistemul are o problema in a suprapune numele cu adresa de IP. Timpul cat ii ia unui pachet sa ajunga la computerul tinta si inapoi e numit "round trip time". Daca acesta dureaza o perioada mare de timp, indica faptul ca ceva s-ar putea sa functioneze gresit.
Structurile IP si ICMP
Conform RFC 791 si RFC 792 structurile unor headere pentru IP respectiv ICMP au urmatoarea forma.
// IP Header -- RFC 791
typedef struct tagIPHDR {
u_char VIHL; // Version and IHL
u_char TOS; // Type Of Service
short TotLen; // Total Length
short ID; // Identification
short FlagOff; // Flags and Fragment Offset
u_char TTL; // Time To Live
u_char Protocol; // Protocol
u_short Checksum; // Checksum
struct in_addr iaSrc; // Internet Address - Source
struct in_addr iaDst; // Internet Address - Destination
}IPHDR, *PIPHDR;
// ICMP Header - RFC 792
typedef struct tagICMPHDR {
u_char Type; // Type
u_char Code; // Code
u_short Checksum; // Checksum
u_short ID; // Identification
u_short Seq; // Sequence
char Data; // Data
}ICMPHDR, *PICMPHDR;
Folosind aceste stucturi se construiesc stucturile unui pachet de request respectiv de reply.
// ICMP Echo Request
typedef struct tagECHOREQUEST {
ICMPHDR icmpHdr;
DWORD dwTime;
char cData[REQ_DATASIZE];
}ECHOREQUEST, *PECHOREQUEST;
// ICMP Echo Reply typedef
struct tagECHOREPLY {
IPHDR ipHdr;
ECHOREQUEST echoRequest;
char cFiller[256];
}ECHOREPLY, *PECHOREPLY;
REQ_DATASIZE din stuctura pachetului de request are valoarea 32.
Parametrii din linia de comanda
Pentru implementarea Pingului se va folosi lucrul cu socketuri. Comanda ping implementata va suporta urmatorii parametrii si optiuni:
- adresa computerului tinta.
-t - se vor executa un numar nelimitat de pinguri pana cand utilizatorul va intrerupe executia programului.
-n - se vor executa un numar specificat de pinguri.
-w - se va specifica un timp de asteptare in secunde.(timeout).
-a - rezolva numele targetului.(rezolutia de nume)
Implicit la folosirea comenzii ping sub forma ping adresa_tinta se efectueaza 4 pinguri succesive timeoutul avand valoarea 5(sec).