在C#中,要使用PCAP庫捕獲數據包,你需要首先安裝一個名為"Pcap.Net"的庫。你可以通過NuGet包管理器來安裝它。在你的項目中,添加以下引用:
using PcapDotNet.Core;
using PcapDotNet.Packets;
using PcapDotNet.Win32;
接下來,你需要創建一個捕獲器來開始捕獲數據包。以下是一個簡單的示例:
using System;
using System.Net.NetworkInformation;
using PcapDotNet.Core;
using PcapDotNet.Packets;
using PcapDotNet.Win32;
namespace PcapCaptureExample
{
class Program
{
static void Main(string[] args)
{
// 獲取網絡接口
string interfaceName = GetDefaultInterface();
// 創建一個捕獲器
using (var capture =
new CaptureFileReader(interfaceName, PcapFileMode.Read, PcapFileAccess.ReadOnly, 10 * 1024 * 1024, ErrorStatus.Ok))
{
// 添加過濾器以捕獲特定協議的數據包,例如TCP
capture.Filter = "tcp";
// 開始捕獲數據包
Console.WriteLine("開始捕獲數據包...");
capture.Start();
// 處理捕獲到的數據包
Console.WriteLine("捕獲到數據包:");
int packetCount = 0;
while (capture.HasMorePackets)
{
var packet = capture.NextPacket();
Console.WriteLine($"數據包 {packetCount}:");
// 處理數據包,例如打印源IP和目標IP
if (packet is TcpPacket tcpPacket)
{
Console.WriteLine($"源IP: {tcpPacket.Source.ToString()}");
Console.WriteLine($"目標IP: {tcpPacket.Destination.ToString()}");
}
packetCount++;
}
}
}
// 獲取默認網絡接口的名稱
static string GetDefaultInterface()
{
if (Environment.OSVersion.Platform == PlatformID.Win32NT)
{
return NetworkInterface.GetByInetAddress(IPAddress.Loopback).Name;
}
else
{
return NetworkInterface.GetByInetAddress(IPAddress.Any).Name;
}
}
}
}
這個示例將捕獲默認網絡接口上的TCP數據包,并在控制臺中打印源IP和目標IP。你可以根據需要修改過濾器以捕獲其他協議的數據包。