我想在 C# 中发送一个 TCP 数据包(带有自定义 header )。构建这样的数据包没有问题,我的数据是字节数组。但是我怎样才能通过套接字发送这个数据包呢?
我试过这样的:
using (Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP))
{
TcpPacket tcpPacket = new TcpPacket();
// fill tcpPacket with data
sock.Bind(new IPEndPoint(MYADDRESS, MYPORT));
byte[] data = tcpPacket.GetBytes();
sock.SendTo(data, new IPEndPoint(DESTADDRESS, DESTPORT));
}
这运行没有任何异常,但嗅探网络显示没有发送任何内容。解决方案是什么?
我使用 Windows 7 Professional,我不希望系统单独创建完整的 TCP 连接。
PS:我不想使用其他库。
PS:构建IP数据包也不是问题。
最佳答案
要在 Windows 7 上发送您自己制作的 TCP 数据包,您需要一个类似 WinPcap 的驱动程序.如果您使用 WinPcap,则可以使用众多 .NET 包装器之一或编写您自己的包装器。仅使用 Windows API(如套接字)提供的对象发送原始帧是行不通的。
只需查看 TCP/IP Raw Sockets .
唯一的选择是创建您自己的网络监控驱动程序,或者购买不需要安装但可以无缝集成到您的程序中的商业版 WinPcap。
On Windows 7, Windows Vista, Windows XP with Service Pack 2 (SP2), and Windows XP with Service Pack 3 (SP3), the ability to send traffic over raw sockets has been restricted in several ways:
TCP data cannot be sent over raw sockets.
对于你改变主意的情况。也许你能在图书馆找到你需要的东西eExNetworkLibrary .
它包括一个 WinPcap 包装器和许多用于制作和分析数据包的方法和对象。希望它会有用。
关于c# - C#发送TCP数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4399473/