c# - C#发送TCP数据包

标签 c# tcp

我想在 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/

相关文章:

python - 检查套接字端口是否可用

用于与 IoT 设备通信的 Java TCP 服务器

c - 我在 IPv6 套接字连接中遇到错误

C# 检查 MaskedTestBox 是否为空

c# - 使用 ASP.Net 标记的 Eval 格式化(仅限)

Go 中的 TCP 连接

tcp - LwIP Netconn API + FreeRTOS TCP 客户端缓冲区问题

方法的 C# 字符串表示

c# - 通过 Enterprise Guide 执行 SAS 和从 .Net 执行 IOM 之间的区别

c# - 如何在 Asp.Net MVC 中动态插入部分 View