macOS使用了代理也无法ping通google的原因及其解决办法

macOS使用了代理也无法ping通google的原因及其解决办法

终端不走代理的解决方法

终端不走代理主要是终端不读取系统的配置,只认终端的变量,我们可以在~/.bashrc~/.zshrc添加以下配置

# 设置使用代理
alias setproxy="export http_proxy=http://127.0.0.1:1087; export https_proxy=$http_proxy; export all_proxy=socks5://127.0.0.1:1080; echo 'Set proxy successfully'"
# 设置取消使用代理
alias unsetproxy="unset http_proxy; unset https_proxy; unset all_proxy; echo 'Unset proxy successfully'"

添加上述配置后,就可以通过在终端执行setproxy命令来设置终端走代理,使用unsetproxy来取消走代理,具体请查看:Mac让Mail(自带邮箱客户端)的gmail走代理及终端走代理

当我们使用setproxy命令设置走代理之后,网络请求类的命令都会走代理,比如brewnpmcomposergitcurl等等。

但是ping www.google.com还是ping不通,这是为什么呢?

使用了代理也无法ping通的原因

先说结论:ping使用的是ICMP协议,ICMP处于网络层(第三层),而SOCKS5是传输层代理协议(第四层),HTTP和HTTPS是应用层协议(第五层或者第七层),协议层不同是无法代理的。

因为上层协议是作为下层协议的数据来传输的,如图,TCP和和UDP是作为IP的数据部分来传输的,IP段本身是不知道数据是什么的。
-w765


ICMP协议是Internet Control Message Protocol,把“Protocol”往前挪,事实上它就是“Internet Protocol Control Message”,而“Internet Protocol”其实就是我们平时说的IP协议,所以“ICMP”其实就是“IP Control Message”,翻译成中文就是“IP协议控制信息”,ping、traceroute用的都是ICMP协议。

ICMP协议是封装在IP数据报的数据部分的(TCP/UDP也是在IP数据报),但它不作为一个独立的层次,只是作为IP层的一部分存在。

解决方法一:使用httping

首先安装httping(我是macOS,其它系统请自行安装)

brew install httping

但是httping也不直接使用终端的http_proxyhttps_proxy变量,我们需要通过它的-x参数手动指定使用代理

httping -x 127.0.0.1:1087 -g https://www.google.com

但是这样ping太麻烦了,我们可以写个alias放到~/.bashrc~/.zshrc里(记得source重新加载才能读取到)

alias hping="httping -x 127.0.0.1:1087 -g"

或者也可以把-g换成-h,实则这两个参数完全一样用,看不出区别

alias hping="httping -x 127.0.0.1:1087 -h"

添加之后,我只需要这样ping就可以了

hping https://www.google.com

更简单的写法,不写协议(当然这样它会走80端口,即http协议)

hping www.google.com

当然也可以在不写协议的情况下添加443端口,这样虽然没写https协议,但它还是会走https,因为443端口是https默认端口

hping www.google.com:443
  • -x表示指定http代理地址;
  • -g表示指定要ping的url;
  • -h表示指定要ping的主机名(即域名),h是hostname的首字母。

解决方法二:使用curl

使用setproxy设置终端走代理后,直接使用curl来请求,比如:

curl https://www.google.com

如果返回一大片内容,说明是通的,那一大片内容就是goole首页的html代码,如果返回的是以下这样的报错,则说明没走代理或者代理不通

curl: (7) Failed connect to www.google.com:443; Connection timed out
打赏

订阅评论
提醒
guest

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

0 评论
内联反馈
查看所有评论
Chan Marc
Chan Marc
2 年 前

Nice!

0
希望看到您的想法,请您发表评论x

扫码在手机查看
iPhone请用自带相机扫
安卓用UC/QQ浏览器扫

macOS使用了代理也无法ping通google的原因及其解决办法