C# SharpPcap-从数据包中提取信息的数据包捕获问题
我正在使用SharpPcap捕获数据包 我正在尝试获取流量类值,并使用udp.ipv6.TrafficClass.ToString() 我遇到此异常的问题是:C# SharpPcap-从数据包中提取信息的数据包捕获问题,c#,packet-capture,sharppcap,C#,Packet Capture,Sharppcap,我正在使用SharpPcap捕获数据包 我正在尝试获取流量类值,并使用udp.ipv6.TrafficClass.ToString() 我遇到此异常的问题是: private void packetCapturingThreadMethod() { Packet packet = null; while ((packet = device.GetNextPacket()) != null) { if (packet is UDPPacket)
private void packetCapturingThreadMethod()
{
Packet packet = null;
while ((packet = device.GetNextPacket()) != null)
{
if (packet is UDPPacket)
{
UDPPacket udp = (UDPPacket)packet;
MessageBox.Show(udp.ipv6.TrafficClass.ToString());
}
}
}
对象引用未设置为对象的实例
private void packetCapturingThreadMethod()
{
Packet packet = null;
while ((packet = device.GetNextPacket()) != null)
{
packet = device.GetNextPacket();
if (packet is UDPPacket)
{
UDPPacket udp = (UDPPacket)packet;
MessageBox.Show(udp.ipv6.TrafficClass.ToString());
}
}
}
该异常表示
udp
、udp.ipv6
或udp.ipv6.TrafficClass
为空。您需要检查:
if (udp != null && udp.ipv6 != null && udp.ipv6.TrafficClass != null)
{
MessageBox.Show(udp.ipv6.TrafficClass.ToString();
}
我认为这里发生的是,你实际上只是在检查其他的数据包 您不需要第二个
packet=device.GetNextPacket()代码>因为已在while循环的顶部分配了数据包
尝试此操作,看看是否仍会出现异常:
private void packetCapturingThreadMethod()
{
Packet packet = null;
while ((packet = device.GetNextPacket()) != null)
{
if (packet is UDPPacket)
{
UDPPacket udp = (UDPPacket)packet;
MessageBox.Show(udp.ipv6.TrafficClass.ToString());
}
}
}
如果您仍然收到异常,那么很可能是因为您没有收到有效的ipv6数据包。BTW,这不是一个“错误”;这是一个“例外”。谢谢你提到:)回答得好。如果SharpPcap无法解析某些内容,它会自动返回null。例如,如果捕获一个TCP数据包并尝试将其解析为UDP,则返回null。确保过滤器设置正确,然后在解析有效负载/头/字段之前检查捕获的数据包是否为null,以避免任何异常。