Как я могу распознать пакеты 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) {
Что должно гарантировать, что вы не получите нулевые ссылки при оценке выше.