Как я могу распознать пакеты ICMP/ARP в pcap.net/SharpPcap?

Так что это действительно странно. Я пробовал несколько выражений, но я еще не нашел правильное логическое выражение, чтобы распознать, является ли пакет пакетом ICMP или ARP. я пробовал

packet.ipv4.icmp != null

в результате чего программа вошла в блок, хотя пакет не является ICMP, я также пробовал

packet.ipv4.Protocol == IpV4Protocol.InternetControlMessageProtocol

но тогда программа никогда не входит в блок, хотя пакет ICMP какие-нибудь идеи?

1 ответ

Решение

Предположим, что мы говорим о пакете 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) {

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

Другие вопросы по тегам