C# SharpPcap-从数据包中提取信息的数据包捕获问题

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)

我正在使用SharpPcap捕获数据包

我正在尝试获取流量类值,并使用udp.ipv6.TrafficClass.ToString()

我遇到此异常的问题是:

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,以避免任何异常。