2015-10-14 58 views
1

所以這真的很奇怪。 我試過多個表達式,但我還沒有找到合適的布爾表達式來識別一個數據包是ICMP還是ARP數據包。 我試過如何識別pcap.net/SharpPcap中的ICMP/ARP數據包?

packet.ipv4.icmp != null 

導致在程序進入塊,即使該數據包是不是ICMP 我也試過

packet.ipv4.Protocol == IpV4Protocol.InternetControlMessageProtocol 

但隨後的程序不會進入塊,即使包是ICMP 有什麼想法?

回答

0

假設我們談論過ARP IPv4上的以太網數據包與ICMP以太網數據包:

1)檢查數據包是以太網。

if (packet.DataLink.Kind == DataLinkKind.Ethernet) { 

2)檢查以太網數據包是ARP或IPv4的:

if (packet.Ethernet.EtherType == EthernetType.IpV4) { 

if (packet.Ethernet.EtherType == EthernetType.Arp) { 

3)如果是這樣的IPv4,檢查它是否是ICMP:

if (packet.Ethernet.IpV4.Protocol == IpV4Protocol.InternetControlMessageProtocol) { 

您可能要如果數據包有效,請在執行上述所有操作之前進行檢查。

if (packet.IsValid) { 

這應該保證你在評估上面的時候不會得到空引用。