如何通过网络发送原始数据?
我有一些数据存储在字节数组中。数据包含一个 IPv4 数据包(其中包含一个 UDP 数据包)。
我想使用 C#(首选)或 C++ 通过网络发送该数组原始数据。例如,我不想使用 C# 的 udp-client。
有谁知道如何执行此操作?
I have some data stored in a byte-array. The data contains an IPv4 packet (which contains a UDP packet).
I want to send this array raw over the network using C# (preferred) or C++. I don't want to use C#'s udp-client for example.
Does anyone know how to perform this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
尝试原始套接字(指定 SOCK_RAW 作为套接字类型)。
您还将负责计算 IP 校验和。这可能有点烦人。
Try raw sockets (specify SOCK_RAW for the socket type).
You will be responsible for calculating the IP checksums as well. This can be a little annoying.
这是通过 NIC http://www.codeproject.com/ 发送原始数据的方法KB/IP/sendrawpacket.aspx 如上所述,Windows 限制原始套接字操作,您必须修改 NDIS 驱动程序才能发送您想要的任何内容。当然,您会遇到 Vista/7 上的数字驱动程序签名问题(可以通过测试模式暂时绕过)。
Here is a way to send raw data over NIC http://www.codeproject.com/KB/IP/sendrawpacket.aspx As mentioned above Windows is restricting raw socket operations, you have to modify NDIS driver to be able to send whatever you want. Of course you will then have a problem with digital driver signing on Vista/7 (can be temporary bypassed with test mode).
当您有原始数据(即字节数组)并且想要通过网络发送它时,您需要某种编码:
编码解决了上面的第一点。
TCP是后两点的常规解决方案。
编码示例如下:
When you have raw data (ie a byte-array) and you want to send it over a network, then you need some sort of encoding:
Encoding solves the first point above.
TCP is the conventional solution to the second two points.
Examples of encoding are: