我想定期检查我的 SOCKS 服务器是否工作正常。为了做到这一点,我想通过 SOCKS 服务器 ping 8.8.8.8(谷歌 DNS 服务器)。
还有其他推荐的方法吗?如果它是最佳的,我如何用 python ping SOCKS?
SOCKS 代理提供 TCP 代理服务(SOCKS 5 添加了 UDP 支持)。您不能“通过”SOCKS 代理服务执行 ICMP Echo。
即使可以,您也将测试 ICMP Echo 和 Echo Reply,而不是您的 SOCKS 服务器运行良好。
如果您想测试您的 SOCKS 服务器是否“运行良好”,我建议您打开本地侦听端口,然后尝试通过 SOCKS 服务连接到它。
您可以使用httping
通过 SOCKS 服务器而不是普通的来检查网络ping
。
ping:向网络主机发送 ICMP ECHO_REQUEST 数据包
httping:测量网络服务器的延迟和吞吐量
ICMP工作在OSI模型的Layer3(网络层),SOCKS工作在Layer5(会话层),httping工作在Layer7(应用层),所以ping
消息不能通过SOCKS,但httping
消息可以。
例如,我在 VPS 中设置了一个 shadowsocks(一个 SOCKS5 代理)服务器,使用我的 macbook pro 作为客户端,使用 127.0.0.1:1080,我想检查到 google 的网络是否良好。
httping -x 127.0.0.1:1080 -g http://www.google.com -5
httping usage
httping [options]
-5 The proxy server selected is a SOCKS5 server.
-g url This selects the url to probe. E.g.: http://localhost/
-x proxyhost[:port] Probe using a proxyserver.
你可以使用 curl 通过那个 socks 获取一些网站,如果有正确的答案,那么 socks 代理就可以了。例如
curl --socks5 127.0.0.1:1080 ifconfig.me
如果您收到警告,那么您的袜子无法使用
curl: (7) Unable to receive initial SOCKS5 response.
这就是我要做的方式,使用子进程执行操作系统的 ping 命令并使用正则表达式解析输出可能是最简单的。
编辑
有一个关于activestate的示例,大部分情况下,您只需要更改套接字以以某种方式指定您的代理,但这并不是我真正的领域,所以我不确定您将如何去做。