如何在ftp服务器/客户端将数据发送到TCP套接字之前从其获取数据

how to get data from a ftp server/client before it sends it data to TCP socket

本文关键字:数据 套接字 TCP 获取 ftp 服务器 客户端      更新时间:2023-10-16

在我的程序中,在FTP服务器/客户端将数据发送到TCP套接字之前,我需要从它获取数据,在获取数据之后,我必须将8字节的数据(将在负载开始时添加)附加到它,然后将其恢复到TCP套接字。这可能吗?我在网上搜索没有运气

正如Pragnesh所建议的,使用cURL库。然而,使用cURL意味着它将创建数据包并通过套接字发送数据包。您可以尝试以下两种方法

  1. 第一个选项是修改cURL代码本身,以便在将数据包写入套接字之前对其进行修改。但这需要对FTP库有一个很好的理解,并重新编译整个代码。这是可能的,但不是一个巧妙的方法。

  2. 第二种方法的工作原理如下a.允许库(cURL或任何其他库)创建协议包并将其写入套接字。但是,当您将FTP服务器IP传递给库时,传递一个假IP(这是一个临时IP,稍后将被替换),例如10.1.1.5。

    b。创建一个虚拟设备(TUN设备是标准linux发行版的一部分),并将FTP协议包写入IP层的虚拟设备。为此,添加一个新的路由表条目,该条目指出,对于目的地IP为假IP的数据包(在这种情况下为10.1.1.5),目的地设备应为TUN设备。因此,每次FTP协议包到达目的地IP为10.1.1.5的IP层时,它都会被写入虚拟设备,而不是从机器中发送出去。

    c。在应用程序中,使用read()命令侦听虚拟设备。写入到虚拟设备上的所有数据包都在应用程序处接收。接收到的数据包是"FTP over TCP over IP"数据包。这意味着它将具有FTP协议数据包、TCP报头和IP报头。

    d。现在,你可以用这个包做任何你想要的事情。在您的情况下,只需在缓冲区中获得正确的偏移量(IP和TCP标头的大小是固定的),然后添加您的数据。一旦修改了数据包,就必须更改两个IP地址。此IP数据包中的源IP地址是虚拟设备IP地址,而不是您的eth0地址。因此,请将此源IP替换为您的eth0地址。数据包中的目标IP地址是假IP。再次将此地址替换为正确的FTP服务器IP。

    e。完成后,重新计算IP和TCP标头校验和。(这些都是很容易找到的标准算法)。在此之后,最后一件事是使用write()命令在虚拟设备上再次写入数据包。一旦你这样做,数据包将被注入IP层,这一次将从机器中取出。您必须设置IP转发标志并禁用rp筛选器设置。

希望这能有所帮助。