2010-04-21 2 views
2

SharpPcap을 사용하여 패킷을 캡처하고 있습니다.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()); 
     } 
    } 
} 
+0

실제로 "오류"는 아닙니다. 그것은 "예외"입니다. –

+0

언급 해 주셔서 감사합니다 :) – Eyla

답변

3

그 예외 udp, udp.ipv6 또는 udp.ipv6.TrafficClass 하나가 널 (null)을 의미한다. 다음을 확인해야합니다.

if (udp != null && udp.ipv6 != null && udp.ipv6.TrafficClass != null) 
{ 
    MessageBox.Show(udp.ipv6.TrafficClass.ToString(); 
} 
+0

좋은 답변입니다. SharpPcap이 무언가를 파싱 할 수없는 경우 자동으로 null을 반환합니다. 예, TCP 패킷을 캡처하여 UDP로 구문 분석하려고하면 null이 반환됩니다. 필터가 올바르게 설정되었는지 확인한 다음 예외가 발생하지 않도록 페이로드/헤더/필드를 구문 분석하기 전에 null로 캡처 된 패킷을 확인하십시오. –

4

여기서 생각한 것은 실제로 모든 다른 패킷 만 검사한다는 것입니다.

packet이 이미 while 루프 상단에 지정되어 있기 때문에 두 번째 packet = device.GetNextPacket();이 필요하지 않습니다. 당신은 여전히 ​​예외를 받고있는 경우

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 패킷을받지 못하고 있기 때문에 그때가 가장 가능성이 높습니다 : 당신은 여전히 ​​예외를 얻을 경우

이 시도하고 참조하십시오.

+0

예 저는 여전히 같은 예외가 발생합니다 !!! 그러나 도움을 주셔서 감사합니다. – Eyla

관련 문제