Sockets 编写程序以形成您自己的IP数据包需要什么?
我正在尝试编写我自己的包制作软件,我希望在没有任何外部库的情况下(除了构建在操作系统上的库之外)完成它 通常,我们可以通过以下教程创建套接字和网络编程 但我的问题是,我希望对发送的实际数据包有更多的控制。(防止操作系统指纹识别和渗透测试)Sockets 编写程序以形成您自己的IP数据包需要什么?,sockets,networking,linux-kernel,packet,Sockets,Networking,Linux Kernel,Packet,我正在尝试编写我自己的包制作软件,我希望在没有任何外部库的情况下(除了构建在操作系统上的库之外)完成它 通常,我们可以通过以下教程创建套接字和网络编程 但我的问题是,我希望对发送的实际数据包有更多的控制。(防止操作系统指纹识别和渗透测试) 从哪里开始最好。现在让我们假设我们处于Linux环境中。最好的开始位置可能是MAN7 raw或MAN7 packet。创建原始数据包应该很简单;但是您必须自己实现CRC生成(对于TCP是必需的,对于UDP是可选的)和路由(->正确的接口)。有几种方法可以实现这
从哪里开始最好。现在让我们假设我们处于Linux环境中。最好的开始位置可能是
MAN7 raw
或MAN7 packet
。创建原始数据包应该很简单;但是您必须自己实现CRC生成(对于TCP是必需的,对于UDP是可选的)和路由(->正确的接口)。有几种方法可以实现这一点。它可以通过原始套接字或直接访问网络适配器内核模式驱动程序来完成
传统上,许多人选择原始套接字来制作用户定义的协议/数据包和注入测试
要使用原始套接字,您需要选择一个提供原始套接字访问和使用的系统
原始插座编程的典型步骤如下:
但是,请注意,尽管linux不填充任何标题填充,但存在IP_HDRINCL的情况除外(即使在这里,它也只填充0的选择性字段),但不同的操作系统将以不同的方式运行。所以,通常原始套接字的使用会降低可移植性的可行性。您必须研究如何制定协议和大量RFC以获得所需的。这不是Soy中所期望的问题答案您仍然会使用标准的套接字API实践,唯一不同的是您必须使用
RAW
socket(但是,大多数平台仅限管理员用户访问RAW
socket),然后您可以发送自己的数据包头,并访问接收到的数据包头。