SharppCap - مشكلة في التقاط الحزمة لاستخراج المعلومات من الحزمة

StackOverflow https://stackoverflow.com/questions/2685714

  •  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 صالحة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top