在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
。