我如何识别 pcap.net/SharpPcap 中的 ICMP/ARP 数据包?
How can I recognize ICMP/ARP packets in pcap.net/SharpPcap?
所以这真的很奇怪。
我尝试了多种表达式,但还没有找到合适的布尔表达式来识别数据包是 ICMP 还是 ARP 数据包。
我试过了
packet.ipv4.icmp != null
导致程序进入块,即使数据包不是 ICMP
我也试过
packet.ipv4.Protocol == IpV4Protocol.InternetControlMessageProtocol
但是即使数据包是 ICMP,程序也永远不会进入块
有什么想法吗?
假设我们讨论以太网数据包上的 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) {
这应该保证您在评估上述内容时不会得到空引用。
所以这真的很奇怪。 我尝试了多种表达式,但还没有找到合适的布尔表达式来识别数据包是 ICMP 还是 ARP 数据包。 我试过了
packet.ipv4.icmp != null
导致程序进入块,即使数据包不是 ICMP 我也试过
packet.ipv4.Protocol == IpV4Protocol.InternetControlMessageProtocol
但是即使数据包是 ICMP,程序也永远不会进入块 有什么想法吗?
假设我们讨论以太网数据包上的 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) {
这应该保证您在评估上述内容时不会得到空引用。