Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 编写程序以形成您自己的IP数据包需要什么?_Sockets_Networking_Linux Kernel_Packet - Fatal编程技术网

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是可选的)和路由(->正确的接口)。

有几种方法可以实现这一点。它可以通过原始套接字或直接访问网络适配器内核模式驱动程序来完成

传统上,许多人选择原始套接字来制作用户定义的协议/数据包和注入测试

要使用原始套接字,您需要选择一个提供原始套接字访问和使用的系统

原始插座编程的典型步骤如下:

  • 确保用于制作您自己的数据包的过程已启用CAP_NET_RAW
  • 打开原始插座(使用SOCK_raw)
  • 创建所需的数据包(如果使用TCP/IP进行构建,请确保填写适当的校验和,否则数据包将在下一个节点中丢弃)
  • 确保通过setsockopt设置IP_HDRINCL,以便内核知道头的存在,而不插入自己的头。(如果IP校验和设置为零,这也可以确保在这种情况下填充IP校验和。)
  • 通过sendto发送数据

  • 但是,请注意,尽管linux不填充任何标题填充,但存在IP_HDRINCL的情况除外(即使在这里,它也只填充0的选择性字段),但不同的操作系统将以不同的方式运行。所以,通常原始套接字的使用会降低可移植性的可行性。

    您必须研究如何制定协议和大量RFC以获得所需的。这不是Soy中所期望的问题答案您仍然会使用标准的套接字API实践,唯一不同的是您必须使用
    RAW
    socket(但是,大多数平台仅限管理员用户访问
    RAW
    socket),然后您可以发送自己的数据包头,并访问接收到的数据包头。