我正在尝试编写一个通过SOCKS5代理发送请求的脚本。 我想做的事情是通过SOCKS代理DNS请求。我设法使用IO :: Socket :: Socks模块执行此操作。
此代码允许我连接到SOCKS代理,然后通过SOCKS解析主机名并在此之后连接到它。
use strict;
use warnings;
use IO::Socket::Socks;
my $sock = IO::Socket::INET->new("127.0.0.1:9050") or die $@;
$sock = IO::Socket::Socks->start_SOCKS($sock, ConnectAddr => "example.com", ConnectPort => 80) or die $SOCKS_ERROR;
$sock->syswrite ("GET / HTTP/1.1\r\nHost: example.com\r\n\r\n");
$sock->close();
这很好用。但是,我想向用户展示IP已解决,我正在努力实现这一目标,因为对于$sock
对象,它似乎将对等体视为SOCKS代理主机而不是真正的最终主机。
有谁知道如何通过SOCKS检索从此DNS解析的IP?
谢谢!
答案 0 :(得分:0)
此代码允许我连接到SOCKS代理,然后通过SOCKS解析主机名并在此之后连接到它。
不是真的。它连接到SOCKS代理,然后按名称连接到给定主机。它无法解析SOCKS上的主机名。相反,解析只在SOCKS服务器内完成,以便连接到给定的主机而不是通过SOCKS"完成。事实上,SOCKS服务器甚至可能有一个上游SOCKS服务器,它只是转发连接而不解析主机名。
此外,没有反向通道让SOCKS客户端知道SOCKS服务器确实解决了什么问题。这不是必需的,因为作为代理的任务不需要这种连接细节。