1

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

packet.ipv4.icmp != null

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

packet.ipv4.Protocol == IpV4Protocol.InternetControlMessageProtocol

但是即使数据包是ICMP,程序也永远不会进入块有什么想法吗?

4

1 回答 1

0

假设我们讨论 ARP over Ethernet 数据包与 ICMP over IPv4 over Ethernet 数据包:

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) {

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

于 2015-10-24T09:03:21.340 回答