ICMP協議之ping實現

2021-06-29 11:30:00 字數 1364 閱讀 8073

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回送應答訊息給源主機。如果源主機在一定時...