Python中能 ping google, 但是不能 ping youtube 和 facebook 是什么原因?

最近在学习 Python, 尝试发送 gmail 邮件, 但是始终显示拒绝连接. 我买的 ss 账号, 可以正常科学上网的. 不大明白为什么通过 terminal 无法连接 gmail, 但是可以 ping google. 有大佬可以解惑吗?


Python中能 ping google, 但是不能 ping youtube 和 facebook 是什么原因?
24 回复

Ping 的通 和 terminal 走不走代理是两回事儿


这通常是DNS解析的问题。你的系统能解析google.com,但可能因为某些原因(比如DNS污染、本地hosts文件配置或网络策略)无法正确解析youtube.comfacebook.com的域名。

先用nslookupdig命令检查一下这些域名的DNS解析是否正常:

import socket

domains = ['google.com', 'youtube.com', 'facebook.com']
for domain in domains:
    try:
        ip = socket.gethostbyname(domain)
        print(f"{domain} -> {ip}")
    except socket.gaierror as e:
        print(f"无法解析 {domain}: {e}")

如果YouTube和Facebook解析失败或返回奇怪的IP,那就是DNS问题。试试换个公共DNS,比如Google的8.8.8.8或Cloudflare的1.1.1.1

如果解析正常但还是ping不通,可能是网络层面的限制(比如防火墙规则只允许特定域名)。这时候可以试试用traceroute看看包在哪丢了:

import subprocess

sites = ['google.com', 'youtube.com']
for site in sites:
    print(f"\nTracing route to {site}:")
    result = subprocess.run(['traceroute', site], capture_output=True, text=True)
    print(result.stdout)

建议:先检查DNS解析,不行再查路由路径。

就算是在墙内,任意连接互联网的位置,都能“ ping 的通” Google. 你需要让你写的这个程序走你的代理(在代码层面或全局代理)。

最近在学习 Python, 尝试写了个爬虫下小姐姐视频,小姐姐突然衣服就不见了。求助大佬,是我 python 版本问题吗?

可能是你爬虫程序的问题,衣服给爬掉了

v2 真是太初学者不友好了。。。

Terminal 一般不使用系统代理,所以你需要找一下 Terminal 使用代理的方法。

可以 Ping Google 并不代表翻出去了,一种可能就是 DNS 污染

GFW 没有禁 ping 谷歌服务器。

还有一个事情是 ping 用的是 ICMP,而 ss 只能代理 TCP 和 UDP,所以用 ping 来测试能否代理是不可行的。要让终端走 ss-local 代理的话可以先执行 export ALL_PROXY=socks5://127.0.0.1:1080。这个命令在 macOS 下亲测有效,如果所用的系统不支持的话恐怕得先转换成 http 代理。这样的话终端应该就可以通过代理连接了,不过该 ping 不通的依然不行。(实在想 ping 的话可以考虑一下走 TCP 的 httping / psping )

应该说是初学者自己信息都不完全吧。代码片段不贴,ping 的 ip 也不贴。原因靠大家去猜。

路由器 [全局 SS] 就能 ping 了。

我觉得是你眼镜可以透视了,所谓的约片无数,心中自然无码

多看书,计算机网络。
多看项目页面,https://github.com/shadowsocks/shadowsocks/tree/master

ss 只能 tcp ping,代理不了 icmp 请求

告诉大家一个天大的秘密!无论你在哪里 Ping Google,延迟都非常短!!!

因为 youtube 和 facebook 根本不存在呀!(手动滑稽)

使用 proxychain 之类的工具让命令行应用也能走 ss 代理。



我一定是 ping 到了假的 google,难道 ping 不通 google 的就我一个人???

你不会是改了 hosts 文件自己不记得吧?

前段时间他们不是说 ipv4 那个谷歌网址能上吗,我发现可以 ping 并且 curl 都可以(但是 curl 看见的是 301 )。尽管我访问不是 ipv4 那个网址,但是 ping 还是没问题的…

你是不是用 terminal 执行的 python 脚本?这样的话需要让你的 terminal 的所有出口都走代理端口,比如用 export all proxy 命令,或者用 proxychain 这种软件来设置

我设置完 proxychain 之后可以 httping 出 fb 和油管了. 但是还是不知道该如何执行一个 python 文件, "proxychains python3 test.py"这样操作?

使用 privoxy 将代理转成 HTTP,然后在命令行输入 export http_proxy=http://127.0.0.1:端口号 。
之后输入命令,都是使用代理连接网络

要不在 github 搜索 hosts,找可用 hosts 文件,轻松搞定

如果都 ping 不通,前几天 youtube 也不会 down 了

回到顶部