让iTerm2实时显示梯子状态

作为日常翻墙的不轨分子之一,常遇到需要会调用curl、wget、brew等进行代理下载的时候,这时候碰壁是最撕心裂肺的。通常最省力的做法是装个代理开关,早前也有写过相关简案《给zsh来把翻墙弹椅 》。

但问题来了,时间一长,却常将当前session抛之脑后而无法分辨当前连接状态,这就是本文的来缘了。

方案一:增强型function

修改~/.zshrc

加入下列内容:

export proxy_host=127.0.0.1
export proxy_port=1080//自定义梯子端口
export switch_proxy=0
export cdc_in=0

function pp(){
	if [ $switch_proxy = 0 ]; then
    export http_proxy="$proxy_host:$proxy_port"
    export https_proxy="$proxy_host:$proxy_port"
    export ftp_proxy="$proxy_host:$proxy_port"
    export GOPROXY="$proxy_host:$Proxy_port"
    switch_proxy=l
    echo -e "梯子模式"
  else

    unset http_proxy
    unset https_proxy
    unset ftp_proxy
    unset GOPROXY
    switch_proxy=0

    echo -e "和谐模式"
  fi
}

方案二:iTerm2 badge功能

先安装 Shell Integration1,以zsh为例:

$ curl -L https://iterm2.com/shell_integration/zsh \
-o ~/.iterm2_shell_integration.zsh

重新加载配置

$ source ~/.iterm2_shell_integration.zsh

~/.zshrc 添加脚本内容2

function iterm2_print_user_vars() {
 iterm2_set_user_var proxy $([ -z "$http_proxy" ] || echo "㊙️🅿️")
}

打开iTerm2 ,将Preferences -> Profiles -> General -> Badge3 设置为 \(user.proxy)

最终,我结合了上述两种办法,制作了双保险方案,效果如下:

  • 键入pp,进入梯子模式
梯子模式
梯子模式
  • 再次键入pp,退出梯子状态,回退到和谐模式
和谐模式
和谐模式

方案三:proxychains

但在实际应用中,由于经常在clashX与v2rayu之间切换,pp经常不是特别灵光,于是又加了第三重保险:proxychians-ng4

$ brew install proxychains-ng

proxychains-ng默认配置文件名为proxychains.conf

  • 通过源代码编译安装的默认为 /etc/proxychains.conf
  • Mac下用Homebrew安装的默认为 /usr/local/etc/proxychains.conf
$ vi /usr/local/etc/proxychains.conf

修改可能会用到的对应协议及端口即可:

[ProxyList]
socks5  127.0.0.1 1080 # v2rayU端口
http    127.0.0.1 1089 # v2rayU端口
socks5  127.0.0.1 7891 # ClashX端口
http    127.0.0.1 7890 # ClashX端口

根据自己的实际情况选择proxychains-ng的代理模式:

  • dynamic_chain :动态模式,按照代理列表顺序自动选取可用代理
  • strict_chain :严格模式,严格按照代理列表顺序使用代理,所有代理必须可用
  • round_robin_chain :轮询模式,自动跳过不可用代理
  • random_chain :随机模式,随机使用代理

建议:编辑vi ~/.zshrc,加入别名映射

alias pc='proxychains4'

测试:

$ pc curl ip.cc
[proxychains] config file found: /usr/local/etc/proxychains.conf
[proxychains] preloading /usr/local/Cellar/proxychains-ng/4.14/lib/libproxychains4.dylib
[proxychains] DLL init: proxychains-ng 4.14
[proxychains] Dynamic chain  ...  127.0.0.1:7891  ...  timeout
[proxychains] Dynamic chain  ...  127.0.0.1:1080  ...  cip.cc:80  ...  OK
IP	: 103.17.10.50
地址	: 中国  台湾  新北市
运营商	: twnoc.net
数据二	: 台湾省新北市 | 远振资讯
数据三	: 中国台湾新北 | 台湾固网

  1. How To Enable Shell Integration ↩︎

  2. Scripting Fundamentals ↩︎

  3. Badge Format ↩︎

  4. 通过 ProxyChains-NG 实现终端下任意应用代理 ↩︎