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

时间:2015-10-14 13:03:39

标签: c# network-programming protocols sniffer pcap.net

所以这真的很奇怪。 我尝试了多个表达式,但我还没有找到一个合适的布尔表达式来识别数据包是ICMP还是ARP数据包。 我试过了

packet.ipv4.icmp != null

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

packet.ipv4.Protocol == IpV4Protocol.InternetControlMessageProtocol

但是即使数据包是ICMP,程序也不会进入块 任何想法?

1 个答案:

答案 0 :(得分: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) {

应该保证在评估上述内容时不会得到空引用。