如何搭建TCP代理(三)
来源:岁月联盟
时间:2020-03-24
DNS响应还必须包含正确的主机名和DNS请求ID,以便你的智能手机能够匹配其原始请求的响应。正如我们在netcat的实验中所看到的,如果这些字段出错,你的智能手机将忽略我们的DNS响应。与我们的原始netcat脚本不同,我们的DNS服务器动态读取DNS请求的主机名和请求ID,并在响应中正确设置它们。
最后,我们不仅必须从头开始手动构建DNS响应,还必须构建将传输它的IP数据包。特别是,我们需要指定IP数据包的源IP地址和目标IP地址,以确保将其安全路由到你的智能手机。为此,我们将响应IP包的源设置为请求IP包的目的地,反之亦然。
在我们的TCP代理项目的这一部分中,我们将你的智能手机配置为将其DNS请求发送到你的笔记本电脑。我们构建了一个伪造的DNS服务器,使你的笔记本电脑可以通过欺骗响应来响应这些DNS请求。如果DNS请求是关于我们的目标主机名的,则我们的服务器会以你笔记本电脑的本地IP地址作为响应。
这意味着你的智能手机开始尝试与我们的目标应用程序构建TCP连接,而不是与你的笔记本电脑,它的功能与所有其他主机名一样。
接下来,我们将构建一个在笔记本电脑上运行的TCP服务器,并监听来自智能手机的这些传入TCP连接。该服务器将打印并保存这些请求的内容,将其转发到预期的目的地,并处理TLS加密和解密。然后,我们将拥有我们梦寐以求的通用TCP代理。
代理服务器
该代理将能够处理任何基于TCP的协议,而不仅仅是HTTP。
到目前为止,我们已经构建的虚假DNS服务器正在欺骗你的智能手机将TCP数据发送到你的笔记本电脑,接下来,我们将构建实际的TCP代理服务器,并在你的笔记本电脑上运行它。它的工作是监听你的手机发送的数据,将其转发到实际的远程服务器。最后,将所有来自服务器的响应转发回你的手机。换句话说,就是充当代理。
代理服务器的工作原理
我们的代理将运行在你的笔记本电脑上,监听端口80上的TCP连接。按照规定,是未加密的HTTP端口。当它从你的智能手机接收到一个TCP连接时,它将首先构建另一个TCP连接,这一次使用的是目标主机的远程服务器。其次,它将接收通过与你的智能手机连接接收到的任何数据,然后通过与远程服务器的新连接重新发送这些数据。第三,它将监听来自服务器的响应数据。第四步,也是最后一步,它会把这个响应数据传回你的智能手机,完成一个4步循环。你的智能手机将能够与远程服务器正常交谈,只需通过我们的代理稍微绕行。
我们将使用HTTP代替其他基于TCP的协议进行测试,因为它更容易。要使你的手机发出HTTP请求,你要做的就是访问一个网站。我们的代理不是“non-HTTP” ,而是 “non-HTTP-specific”。此外,我们的TCP代理的第一个版本将无法处理TLS加密。因此,我们将必须谨慎使用使用未加密HTTP而非HTTPS的网站进行测试。我们将在接下来添加TLS支持:
让我们仔细看看我们的4步循环的每个阶段:从智能手机,到笔记本电脑,到远程服务器,然后再返回。
此时,你的手机已经被诱骗将其目标主机名的TCP连接发送到你的笔记本电脑,剩下的就是确保我们的代理安全接收它们。
将笔记本电脑的信息传送到远程服务器
从笔记本电脑到远程服务器的第二步由我们的代理处理,当我们的代理从你的智能手机接收到TCP连接时,它将转身并启动第二个TCP连接,这一次是与目标远程服务器的连接。然后,它将从手机收到的所有数据重新发送到远程服务器。
如上所述,我们将对代理应该与之构建第二连接的远程服务器的主机名进行硬编码。我们还将注意确保此硬编码的主机名与我们的虚假DNS服务器中的硬编码的主机名匹配。
将服务器的信息到发送到笔记本电脑
一旦我们的代理服务器向远程服务器发送了从智能手机接收到的数据,剩下要做的就是将它从远程服务器接收到的响应数据发送回手机。将服务器的信息到发送到笔记本电脑的过程中,我们将确保代理可以接收来自远程服务器的响应数据。
将响应数据发送回你的手机
最后,我们的代理会将响应数据发送回你的手机。你的手机将以完全相同的形式接收数据,就像它直接与远程服务器通信一样,并且它将假定刚刚发生的一切都是完全正常的。
上一页 [1] [2] [3] [4]
下一篇:返回列表