通过SOCKS服务器使用ping?

7
我希望定期检查我的SOCKS服务器是否正常工作。为了做到这一点,我想通过SOCKS服务器ping 8.8.8.8(谷歌DNS服务器)。
是否有其他推荐的方法? 如果这是最佳方法,如何使用Python通过SOCKS进行ping?
4个回答

14
一个SOCKS代理提供TCP代理服务(SOCKS 5添加了UDP支持)。您无法通过SOCKS代理服务执行ICMP Echo。
即使可以,您将测试ICMP Echo和Echo Reply,而不是您的SOCKS服务器是否正常运行。
如果要测试您的SOCKS服务器是否正常运行,建议您打开本地侦听端口,然后尝试通过SOCKS服务连接到它。

6
您可以使用httping来检查网络,而不是普通的ping

Ping:将ICMP ECHO_REQUEST数据包发送到网络主机
httping:测量Web服务器的延迟和吞吐量

ICMP工作在OSI模型的第3层(网络层),SOCKS工作在第5层(会话层),httping工作在第7层(应用层),因此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 通过SOCKS5 httping Google的屏幕截图 httping使用 httping [options] -5 选定的代理服务器是SOCKS5服务器。 -g url 这选择要探测的URL。例如:http://localhost/ -x proxyhost[:port] 使用代理服务器进行探测。

4
您可以使用curl通过该socks代理获取一些网站,如果有正确的响应则说明该socks代理可用。例如:
curl --socks5 127.0.0.1:1080 ifconfig.me

如果你收到了这个警告,那么你的袜子就无法使用。
curl: (7) Unable to receive initial SOCKS5 response.

0

这是我会采取的方式,最简单的方法可能是使用子进程执行您操作系统的ping命令,并使用正则表达式解析输出。


编辑

Activestate 上有一个示例,基本可以实现你想要的功能。你只需要将套接字更改为指定代理即可,但这不是我的专业领域,所以我不确定该如何实现。


1
但我希望ICMP数据包通过SOCKS代理传输。 - iTayb
我假设你已经设置了默认连接通过SOCKS代理路由,如果是这样的话,那么这肯定会实现你想要的功能。否则,我认为更多的信息可能会有所帮助 :) - theheadofabroom
2
SOCKS 5代理提供TCP和UDP服务。您不能将默认路由通过它们。您也无法通过它们进行ping测试。 - MattH
SOCKS不会转发ICMP(ping)请求,它只支持TCP和有时UDP。 - Adrien

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接