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 صالحة.
لا تنتمي إلى StackOverflow