SharpPcap - проблема захвата пакетов для извлечения информации из пакета
-
30-09-2019 - |
Вопрос
Я использую SharpPcap для захвата пакетов.
Я пытаюсь получить значение класса трафика, и я использую 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();
потому что packet
уже назначается в верхней части вашего цикла.
Попробуйте это и посмотрите, если вы все еще получите исключение:
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.