2013-03-29 1195 views
4

我正在netfilter中編寫一個數據包過濾器。有沒有一種方法可以獲得ICMP數據包的源端口和目的端口?ICMP數據包的源端口和目的端口

我已經從sk_buff結構中提取了icmp_hdr。但我沒有看到來源地址和目的地址的任何屬性?

回答

8

端口號是TRANSPORT層識別哪個數據包屬於終端系統的哪個進程的方式。
它們用於讓流程到流程交付工作;但從功能角度來看,ICMP不是傳輸層協議。

ICMP是網絡層的一個消息傳遞協議(在IP的頂層; but not really in the transport layer),它有很多責任,但是它們沒有一個與流程到流程交付有關,所以有一個端口號沒有任何意義。

舉一個例子,當你ping(ping使用ICMP回顯消息)一個IP地址時,你真的在​​哪個端口pinging
答案是:沒有端口,你正在ping整個站看它是否還活着。

現在,ICMP有很多types of messages;如果要過濾掉,例如,ping消息,則應檢查字段type,如果它等於ICMP_ECHO,則可以使用return NF_DROP