2015-10-14 5 views
1

Так что это действительно странно. Я пробовал несколько выражений, но я еще не нашел правильное булевское выражение, чтобы узнать, является ли пакет ICMP или ARP-пакетом. Я попыталсяКак узнать пакеты ICMP/ARP в pcap.net/SharpPcap?

packet.ipv4.icmp != null 

, в результате которого программа ввода блока, даже если пакет не ICMP Я также попытался

packet.ipv4.Protocol == IpV4Protocol.InternetControlMessageProtocol 

, но тогда программа не входит в блок, даже если пакет ICMP любые идеи?

ответ

0

Предположим, что мы говорим о ARP через пакет Ethernet против ICMP через IPv4 через пакет Ethernet:

1) Проверьте, является ли пакет Ethernet.

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

2) Проверьте, если пакет Ethernet является 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) { 

который должен гарантировать, что вы не получите нулевые ссылки при оценке вышеуказанного.