#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);
}
}
}
}
}
Кто-нибудь, пожалуйста, может мне помочь?