有没有一种简单的方法,最好使用 Linux 终端,来检查 Socks5 代理是否有效?
答案1
如果您自己创建了代理,则首先应检查是否有开放端口(p
仅当相关进程是您的或您是 root 时,该参数才有效):
netstat -tlnp
这应该会给你一行类似的东西:(我有一个代理localhost:8888
)
tcp 0 0 127.0.0.1:8888 0.0.0.0:* LISTEN
如果您发现这样的行或代理不是您的,请尝试通过它发送数据包。例如,使用以下命令请求网页curl
:
curl --socks5 localhost:8888 binfalse.de
应该输出一些 HTML 内容。希望这有助于查找错误 ;-)
辅助:在我的示例中,我通过以下方式创建代理:
ssh -o ServerAliveInterval=60 -D8888 someone@somewhere
someone
用您的用户名和目标服务器替换somewhere
。当然,使用 OpenSSH 只是众多可能的 socks5 代理中的一种方法。
答案2
要让 curl 解析另一端的 DNS,请更改--socks5
为--socks5-hostname
。
看手册页了解更多信息。
答案3
以下命令将测试 Socks 5 代理是否正常工作localhost:8080
:
timeout 5 curl -x socks5://localhost:8080 http://example.com/
否则 5 秒后会超时。如果您没有命令timeout
,请放弃它。
答案4
您可以使用 netcat 连接并遵守RFC 1928与服务器对话。不过,您必须能够键入和读取不可打印的字符,或者将它们记录到文件中以供进一步检查。
例如,要测试它是否是 SOCKS5 服务器并确定它支持 no-auth、gssapi 或 usr+pwd 身份验证方法中的哪种,请发送 0x05 0x03 0x00 0x01 0x02。准备使用 usr+pwd 身份验证的 SOCKS5 服务器将回复 0x05 0x02。
或者按照以下方法检查它是否是 SOCKS5 服务器并且 no-auth(方法 0)是否有效:
echo 050100 | xxd -p -r | netcat -o out.txt {server} {port}
中断之后,如果服务器支持该方法(0),则在 out.txt 末尾它应该生成 0x05 0x00,如果服务器不支持该方法,则生成 0x05 0xFF。