在C#中,要捕獲TCP/IP數據包,可以使用System.Net.Sockets
命名空間中的Socket
類
using System;
using System.Net;
using System.Net.Sockets;
namespace TcpIpPacketCapture
{
class Program
{
static void Main(string[] args)
{
// 創建一個TCP監聽器
TcpListener listener = new TcpListener(IPAddress.Any, 8080);
listener.Start();
Console.WriteLine("等待客戶端連接...");
// 當有客戶端連接時,接受連接并開始接收數據
using (TcpClient client = listener.AcceptTcpClient())
{
Console.WriteLine("客戶端已連接: " + client.Client.RemoteEndPoint);
// 獲取網絡流
NetworkStream stream = client.GetStream();
// 創建一個字節數組來存儲接收到的數據
byte[] buffer = new byte[1024];
while (true)
{
try
{
// 從網絡流中讀取數據
int bytesRead = stream.Read(buffer, 0, buffer.Length);
if (bytesRead == 0)
{
// 如果沒有數據可讀,說明客戶端已斷開連接
break;
}
// 將接收到的數據轉換為字符串并打印
string data = Encoding.ASCII.GetString(buffer, 0, bytesRead);
Console.WriteLine("接收到的數據: " + data);
}
catch (Exception ex)
{
Console.WriteLine("發生錯誤: " + ex.Message);
break;
}
}
Console.WriteLine("客戶端已斷開連接.");
}
listener.Stop();
}
}
}
這個示例創建了一個簡單的TCP服務器,監聽8080端口。當客戶端連接時,服務器會接收并打印客戶端發送的數據。請注意,這個示例僅適用于簡單的文本數據傳輸。對于更復雜的數據包捕獲和分析,您可能需要使用第三方庫,如SharpPcap
或Pcap.Net
。