Библиотека WinDivertSharp — Не удается получить доступ к пакетным данным

#c# #windows #networking #network-programming

Вопрос:

Я пытаюсь написать программу, которая ловит пакеты и выводит IP-адрес пакета. Но когда я пытаюсь распечатать данные, они ничего не показывают. Я проверил, и по какой-то причине заголовки пакетов равны нулю.

Цель кода-напечатать IP-адрес пакетов, но он этого не делает, вместо этого он ничего не печатает(под чем я подразумеваю «не удалось найти IP» ). Я использую winDivertSharp, потому что в будущем он мне понадобится для использования функций библиотеки winDivertSharp, и из-за этого я не могу выбрать другую библиотеку.

Это и есть код:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WinDivertSharp;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            bool answer = true;
            int counter = 0;
            WinDivertBuffer p = new WinDivertBuffer();
            WinDivertAddress ad = new WinDivertAddress();
            System.IntPtr b ;
            b = WinDivert.WinDivertOpen("true", 0, 0, 0);
            while (counter < 100)
            {

                answer = WinDivert.WinDivertRecv(b, p, ref (ad));
                if (answer amp;amp; p != null){
                    Console.WriteLine(p);
                    Console.WriteLine("nPacket number {0}:", counter   1);
                    printPacketData(p, ad);
                    WinDivert.WinDivertSend(b, p, p.Length, ref (ad));
                    counter  ;
                }
                else
                {
                    Console.WriteLine("Packet error!n");
                }
                
                
            }
       
        }

        public static void printPacketData(WinDivertBuffer p, WinDivertAddress ad)
        {
            WinDivertParseResult result = WinDivert.WinDivertHelperParsePacket(p, p.Length);
            unsafe
            {
                //Print the packet length
                Console.WriteLine("Packet length:{0}",p.Length);
                //Print the packet direction
                if(ad.Direction == WinDivertDirection.Inbound)
                {
                    Console.WriteLine("Direction:Inbound");
                }
                else
                {
                    Console.WriteLine("Direction:outbound");
                }

                //Print the ip of the sender
                if (result.TcpHeader == null || result.IPv4Header == null)
                {
                    Console.WriteLine("colud not find IP!");
                    
                }
                else
                {
                    Console.Write("IP:");
                    Console.WriteLine(result.IPv4Header->SrcAddr);
                }
                
            }
        }
    }
}
 

Кто-нибудь, пожалуйста, может мне помочь?