如何识别pcap.net/SharpPcap中的ICMP/ARP数据包?

如何识别pcap.net/SharpPcap中的ICMP/ARP数据包?

问题描述:

所以这真的很奇怪。 我试过多个表达式,但我还没有找到合适的布尔表达式来识别一个数据包是ICMP还是ARP数据包。 我试过如何识别pcap.net/SharpPcap中的ICMP/ARP数据包?

packet.ipv4.icmp != null 

导致在程序进入块,即使该数据包是不是ICMP 我也试过

packet.ipv4.Protocol == IpV4Protocol.InternetControlMessageProtocol 

但随后的程序不会进入块,即使包是ICMP 有什么想法?

假设我们谈论过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) { 

这应该保证你在评估上面的时候不会得到空引用。