最近 Shadowsock s 不稳定,极大的影响了工作效率。不过 ssh 还能连上自己的机器,所以掏出 ssh -D 满足自己

#!/usr/bin/env bash

disable_proxy()
{
networksetup -setsocksfirewallproxystate Wi-Fi off
networksetup -setsocksfirewallproxystate Ethernet off
echo "SOCKS proxy disabled."
}
trap disable_proxy EXIT # Ctrl+C 的时候执行 disable_proxy IP=127.0.0.1
PORT=`python -c 'import socket; s=socket.socket(); s.bind(("localhost", 0)); print(s.getsockname()[1]); s.close()'` networksetup -setsocksfirewallproxy Wi-Fi $IP $PORT
networksetup -setsocksfirewallproxy Ethernet $IP $PORT
networksetup -setsocksfirewallproxystate Wi-Fi on
networksetup -setsocksfirewallproxystate Ethernet on echo "SOCKS proxy enabled."
echo "Tunneling..."
ssh -ND $PORT root@xxx.xxx.xxx.xxx

2019.11.12 更新:

上面的已经够用了,但是还不够“智能”,所有网页都通过代理来访问, 国内的也网站也要绕一圈,没能根据一个列表来决定哪些网址需要代理,哪些不需要。

要满足这一点,需要 networksetup -setautoproxyurl networkservice url

networksetup -setautoproxyurl networkservice url

Set proxy auto-config to url for and enable it.

首先需要一个 .pac 文件,这个文件怎么搞到呢,可以从网上下载一个, 也可以自己写。其实这个文件主要是一个函数, 类似这样:


function FindProxyForURL(url, host) {
var proxy = "SOCKS5 127.0.0.1:1280; SOCKS 127.0.0.1:1280; DIRECT;"
var direct = 'DIRECT;';
if (defaultMatcher.matchesAny(url, host) instanceof BlockingFilter) {
return proxy;
}
return 'DIRECT;'
}

我们修改后的 shell 脚本文件长这样:

#!/usr/bin/env bash

# https://www.cnblogs.com/hangj/p/11838259.html

IP=localhost
FILE=proxy.pac # 找到一个可用的 port
SOCKSPORT=`python -c 'import socket; s=socket.socket(); s.bind(("localhost", 0)); print(s.getsockname()[1]); s.close()'`
HTTPPORT=`python -c 'import socket; s=socket.socket(); s.bind(("localhost", 0)); print(s.getsockname()[1]); s.close()'` URL=http://$IP:$HTTPPORT/$FILE # 设置配置中的 port
sed "s/var proxy = .*/var proxy = \"SOCKS5 127.0.0.1:$SOCKSPORT; SOCKS 127.0.0.1:$SOCKSPORT; DIRECT;\";/" $FILE.bak > $FILE python3 -m http.server $HTTPPORT --bind $IP &
echo "http server started." disable_proxy()
{
ps -ef | grep "-m http.server $HTTPPORT" | grep -v grep | awk '{print $2}' | xargs kill
lsof -nP -i :$HTTPPORT | grep $HTTPPORT | awk '{print $2}' | xargs kill networksetup -setautoproxyurl Wi-Fi " "
networksetup -setautoproxyurl Ethernet " "
echo "SOCKS proxy disabled."
}
trap disable_proxy EXIT networksetup -setautoproxyurl Wi-Fi $URL
networksetup -setautoproxyurl Ethernet $URL echo "SOCKS proxy enabled."
echo "Tunneling..."
ssh -ND $PORT root@xxx.xxx.xxx.xxx

我的配置文件地址:proxy.pac.bak

backup shadowsock.readme(base64)

PT09IHN0YXJ0L3N0b3Agc2hhZG93c29ja3MgJiYgc2hhZG93c29ja3MgY29uZmlnDQoNCiAgIGhvdyB0byBidWlsZCBzczogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vMzAxMzIxNjAyNy80NjllN2I5ODhlZGRlN2U1ZjgwNmY1NWE5OTNiOWVmYQ0KICAgc3RhcnQgc3M6IHNzc2VydmVyIC1jIC9ldGMvc2hhZG93c29ja3MuanNvbiAtZCBzdGFydA0KICAgc3RvcCBzczogc3NzZXJ2ZXIgLWMgL2V0Yy9zaGFkb3dzb2Nrcy5qc29uIC1kIHN0b3ANCiAgIHNzIGNvbmZpZzogL2V0Yy9zaGFkb3dzb2Nrcy5qc29uDQoNCj09PSBhYm91dCBpcHRhYmxzDQogICBpbnN0YWxsIGlwdGFibGVz

最新文章

  1. Redis性能问题排查解决手册(七)
  2. thinkphp上传
  3. Delphi线程的终止
  4. WINDOWS命令和批处理
  5. 如何将消息发送给Whatsapp联系人
  6. JSP-09-使用EL显示数据
  7. 翻译:WebApi 认证--用户认证Oauth解析
  8. J2EE开发常用开源框架技术(转)
  9. [LeetCode] 76. Minimum Window Substring 解题思路
  10. 详细解释VB连接access几种方法数据库
  11. database disk image is malformed
  12. master log 与relay log的关系
  13. Socket 参数笔记
  14. H3C交换机如何配置管理VLAN
  15. windows部署jenkins持续集成maven测试项目不能访问测试报告
  16. lumen框架学习01——引入自定义类和函数
  17. ServletContextListener使用详解(监听Tomcat启动、关闭)
  18. javaScript高级教程(一)javaScript 1.6 Array 新增函数
  19. C# GDI绘制波形图
  20. 关于ESP8266EX的一些资料

热门文章

  1. (论文笔记Arxiv2021)Walk in the Cloud: Learning Curves for Point Clouds Shape Analysis
  2. 当鼠标移入div上时,div的背景色在4s之内渐变为灰色,同时在5s之内顺时针旋转45度,且尺寸缩小一半;当鼠标移走时,再渐变恢复初始样式
  3. 【java基础】枚举
  4. Java预科:DOS命令及电脑快捷键
  5. JAVAWEB过滤器、监听器的作用及使用>从零开始学JAVA系列
  6. vue传值 ---- >> 子传父,$emit()
  7. 能够进行多段文本匹配的NFA改良算法
  8. python数据统计之禅道bug统计
  9. Shell-07-文本处理grep
  10. 【错误】element cannot be mapped to a null key