1. 相關icmp協議概述
這裡只講解與ping有關的icmp訊息型別,主機傳送回送訊息(type = 8),被請求主機回送響應訊息(type = 0),基本格式如下:
回送訊息[echo]
回送響應訊息[echo reply]
其中•code = 0,
•checksum為校驗和,重點注意從icmp的頭部(即type開始),到data結束(即到整個資料報結束),具體計算見下面分析
•identifier為識別符號,由主機設定,一般設定為程序號,回送響應訊息與回送訊息中identifier保持一致
•sequence number為序列號,由主機設定,一般設為由0遞增的序列,回送響應訊息與回送訊息中sequence number保持 一致
•data為資料,由主機設定,回送響應訊息與回送訊息中data保持一致
2. ping流程
ping實際上利用的就是icmp echo和icmp echo reply包來探測主機是否存在,所以ping程式的流程十分簡單:傳送icmp echo包---- > 接收icmp echo reply包
傳送icmp echo包時填充identifier為程序id, sequence number為從0遞增計數,data填充為傳送時間
接收icmp echo reply包時檢查identifier, sequence number是否正確,通過ip報頭的源位址字段獲得回送報文的主機位址是否正確
3. 模擬ping實現pingy
ping的基本流程已講解完
由於要自己構造icmp包,因此建立需要建立原始套接字(即需要自己填充報頭):
sockfd = socket(af_inet, sock_raw, ipproto_icmp)
sock_raw用於直接訪問網路層,應用程式負責構造自己的協議首部;ipproto_icmp表示icmp報頭由程式構造
構造icmp報頭,注意各個欄位的填充,特別是校驗和(可以參照icmp的結構定義)
icmp->icmp_type
icmp->icmp_code
icmp->icmp_cksum
icmp->icmp_id
icmp->icmp_seq
icmp ->icmp_data;
而完成系統的ping命令還需新增資訊統計,如傳送位元組數,收到位元組數,傳送包,接收包,傳送時間,ttl等;另外,新增訊號處理,在使用者使用control^c等退出時列印即時資訊
4. 具體**見附件
5. 最終效果如下
ICMP協議之ping實現
1.相關icmp協議概述 這裡只講解與ping有關的icmp訊息型別,主機傳送回送訊息 type 8 被請求主機回送響應訊息 type 0 基本格式如下 回送訊息 echo 回送響應訊息 echo reply 其中 code 0,checksum為校驗和,重點注意從icmp的頭部 即type開始 到...
ICMP協議之ping實現
1.相關icmp協議概述 這裡只講解與ping有關的icmp訊息型別,主機傳送回送訊息 type 8 被請求主機回送響應訊息 type 0 基本格式如下 回送訊息 echo 回送響應訊息 echo reply 其中 code 0,checksum為校驗和,重點注意從icmp的頭部 即type開始 到...
ping 原理與ICMP協議
ping 原理與icmp協議 ping的原理 ping程式是用來探測主機到主機之間是否可通訊,如果不能ping到某台主機,表明不能和這台主機建立連線。ping使用的是icmp協議,它傳送icmp回送請求訊息給目的主機。icmp協議規定 目的主機必須返回icmp回送應答訊息給源主機。如果源主機在一定時...