在C#中捕獲網(wǎng)絡(luò)數(shù)據(jù)包可以使用第三方庫,例如SharpPcap或PacketDotNet。以下是一個(gè)簡單示例來捕獲網(wǎng)絡(luò)數(shù)據(jù)包:
using System;
using SharpPcap;
class Program
{
static void Main(string[] args)
{
// 設(shè)置設(shè)備
CaptureDeviceList devices = CaptureDeviceList.Instance;
if (devices.Count < 1)
{
Console.WriteLine("No devices found.");
return;
}
ICaptureDevice device = devices[0];
device.OnPacketArrival += new PacketArrivalEventHandler(device_OnPacketArrival);
// 打開設(shè)備
device.Open(DeviceMode.Promiscuous);
Console.WriteLine("Listening on " + device.Description + "...");
// 開始捕獲數(shù)據(jù)包
device.Capture();
}
private static void device_OnPacketArrival(object sender, CaptureEventArgs e)
{
// 處理捕獲到的數(shù)據(jù)包
Console.WriteLine("Packet captured at " + e.TimeStamp.ToString("HH:mm:ss.fff"));
}
}
在上面的示例中,我們使用SharpPcap庫來捕獲網(wǎng)絡(luò)數(shù)據(jù)包。首先,我們獲取設(shè)備列表并選擇第一個(gè)設(shè)備。然后,我們訂閱OnPacketArrival
事件來處理捕獲到的數(shù)據(jù)包。當(dāng)數(shù)據(jù)包到達(dá)時(shí),device_OnPacketArrival
方法會(huì)被調(diào)用,并輸出捕獲到的數(shù)據(jù)包的時(shí)間戳。
請注意,捕獲網(wǎng)絡(luò)數(shù)據(jù)包可能需要管理員權(quán)限,因此您可能需要以管理員身份運(yùn)行程序。