基于Perl的DNS over SOCKS代理

基于Perl的DNS over SOCKS代理,perl,proxy,dns,socks,resolve,Perl,Proxy,Dns,Socks,Resolve,我正在尝试编写一个脚本,通过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::Socke

我正在尝试编写一个脚本,通过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吗

谢谢

这段代码允许我连接到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();
不是真的。它连接到SOCKS代理,然后按名称连接到给定主机。它不会通过SOCKS解析主机名。相反,解析仅在SOCKS服务器内完成,以便连接到给定主机,而不是“通过SOCKS”完成。事实上,SOCKS服务器甚至可能有一个上游SOCKS服务器,它只将连接转发到该服务器,而不自行解析主机名


此外,没有反向通道让SOCKS客户端知道SOCKS服务器解决了什么问题。这是不需要的,因为作为代理的任务不需要这种连接详细信息。

谢谢您的解释。你是说这是两步连接,对吗?客户端连接到SOCKS代理并说“请连接到此主机和此端口”,SOCKS代理负责此操作,但从未真正告诉客户端有关第二次连接的任何信息。鉴于此,将无法检索已解析的IP,这是您所说的吗?谢谢