如何在 c 中创建自定义数据包



我正在尝试使用TCP/IP协议使用C创建自定义数据包。当我说自定义时,我的意思是能够更改数据包中的任何值;例如:MAC、IP 地址等。

尝试四处搜索,但我找不到任何真正指导我或给我示例源代码的东西。

如何创建自定义数据包或应在哪里查找指导?

一个相对容易的便携式工具是 libpcap .它以接收原始数据包而闻名(事实上,您最好先使用它,因为您可以将收到的数据包与手工制作的数据包进行比较),但鲜为人知的pcap_sendpacket实际上会发送原始数据包。

如果您想自己从头开始,请打开一个带有 AF_PACKETSOCK_RAW 的套接字(适用于 Linux,其他操作系统可能会有所不同) - 例如,请参阅 http://austinmarton.wordpress.com/2011/09/14/sending-raw-ethernet-packets-from-a-specific-interface-in-c-on-linux/和 https://gist.github.com/austinmarton/1922600 的完整代码。请注意,您需要是 root(或更准确地说具有适当的能力)才能执行此操作。

另请注意,如果您尝试发送原始 tcp/udp 数据包,您将遇到的一个问题是禁用自动处理回复的网络堆栈(通过将其视为寻址到现有 IP 地址或尝试转发它)。

做这种事情并不像你想象的那么简单。使用普通套接字 API 控制 IP 层上方的数据相对容易,但控制下面的数据则更加复杂。大多数操作系统使更改较低级别的协议信息变得困难,因为内核本身管理网络连接并且不希望您搞砸事情。除此之外,还有其他平台差异、网络控制等可能会对您造成严重破坏。

您应该查看一些可以执行此操作的库。一些例子:

  • 利布内特 - http://libnet.sourceforge.net/
  • libdnet - http://libdnet.sourceforge.net/

如果您的目标是欺骗数据包,则还应阅读基于网络的欺骗缓解技术(例如出口过滤以防止欺骗数据包退出网络)。

最新更新