Я думаю, что здесь происходит то, что вы проверяете только каждый второй пакет.
Вам не нужен второй packet = device.GetNextPacket();
, потому что packet
уже назначается в верхней части цикла 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.