阅读 2128

命令行走代理的便捷方式

简述

对于一个开发者,翻墙是一个很常见的需求了。我们以mac为例,使用ss来进行翻墙。正常情况下都能正常翻墙,但经常使用终端的人可能会发现,命令行的请求好像不走ss代理,那么怎么解决呢?

常见的解决方案

  • 使用网络拦截工具,如proxychains-ng(如果打不开就翻墙试下)

  • 配置命令行的代理,把终端的请求转发到ss的端口上,这样就可以利用ss进行翻墙

    对于工具的方式:

  1. 优点是很便捷,功能更强大、用途更广,可以不止在终端
  2. 但是假如有这样一个需求,在终端会话1需要翻墙,会话2不需要翻墙呢?当然通过工具操作,就是每当切换会话时就需要操作下工具的开关,是比较麻烦的

配置命令行代理:

  1. 这种方式就是简单,可以精细控制每个会话窗口,可以随时打开或关闭代理,本文主要采用这种方式

配置命令行代理

第一步: 查看ss监听的端口号

打开ss,查看ss的代理ip和端口,下图可以看出端口是1086

第二步: 查看http监听的端口号

第三步:简单的设置代理

  1. 首先确定你已经打开了翻墙,然后访问正常
  2. 打开终端, 首先测试下当前的ip所属区域,执行如下命令 curl ip.gs,可以看到ip相关信息
  3. 然后执行如下命令,把终端代理到ss的端口上
export ALL_PROXY=socks5://127.0.0.1:1086
export http_proxy=http://127.0.0.1:1087
export https_proxy=http://127.0.0.1:1087
复制代码
  1. 再次执行curl ip.gs,查看ip是否已经是代理服务器的ip了
  2. 这样就可以在终端上进行翻墙访问了
  3. 如果要解除,不需要终端翻墙了,则执行如下命令
unset ALL_PROXY
unset http_PROXY
unset https_PROXY
复制代码

第三步:优化操作

上面的设置方式显然有些繁琐,每次都要执行一遍,命令还比较长,所以可以考虑优化下

毕竟是终端,利用shell脚本来操作,写两个函数开启代理(proxy_on) & 关闭代理(proxy_off), 并且默认打开终端代理是关闭的

开始操作

  1. 随便找个目录新建个shell脚本teminal_proxy.sh,然后编写如下两个函数
# 开启代理
function proxy_on(){
    export ALL_PROXY=socks5://127.0.0.1:1087
    export http_proxy=http://127.0.0.1:1087
    export https_proxy=https://127.0.0.1:1087
    echo -e "已开启代理"
}
# 关闭代理
function proxy_off(){
    unset ALL_PROXY
    unset http_proxy
    unset https_proxy
    echo -e "已关闭代理"
}
# 执行proxy_off,默认关闭,也可以默认开启
proxy_off
复制代码
  1. 然后找到终端的初始配置文件~/.bashrc,如果你使用的是zsh,则配置文件是~/.zshrc,在文件的末尾添加一句source /path1/path2/teminal_proxy.sh,执行代理脚本
  2. 然后新建一个终端的会话窗口,执行proxy_on,然后通过curl ip.gs测试是否翻墙,再执行proxy_off进行测试

总结

总结下优化后的效果

  1. 可以控制默认是开启代理还是关闭代理
  2. 每新建一个终端会话,都可以通过执行proxy_onproxy_off来控制代理的开关,并且每个会话的代理设置是独立的,真正做到窗口级的控制
  3. 如果你在执行某个命令时不想翻墙,那么执行proxy_off即可

最后欢迎关注笔者公众号:【码上work】,本公众号致力于浅显易懂的方式讲解移动/全栈开发、有趣算法、计算机基础知识等,帮你构建完整的知识体系,一起成为顶级开发者。公众号回复12345有大量学习资料:

  1. iOS电子书(整理好组织结构)
  2. 全栈开发视频教程(全套)
  3. 机器学习视频(全套)
  4. 区块链视频教程(全套)