Mac 自动代理切换

背景:

工作有时需要用goole搜索,所以会配置一下公司提供的HTTP和HTTPS代理,但是下班之后回到家,只有公司内网才能访问代理,所以还需要把代理关掉。每次都要点呀点,有点麻烦,所以打算弄个脚本来简化这个过程

v1.0

mac 上自带了脚本编辑器,使用applescript,参考一些博客写了一个进行开关代理的脚本,源码如下:

tell application "System Events"set proxy_dialog to display dialog "Wi-Fi代理:" buttons {"打开代理", "关闭代理"} default button "打开代理" with title "代理快速切换"set proxy_interface to button returned of proxy_dialogend tellif proxy_interface is "打开代理" then# 进行代理的设置 xxx.xxx.xxx.xxx 代理地址,xxxx代理端口do shell script "networksetup -setwebproxy 'Wi-Fi' xxx.xxx.xxx.xxx xxxx && networksetup -setsecurewebproxy 'Wi-Fi' xxx.xxx.xxx.xxx xxxx && networksetup -setwebproxystate 'Wi-Fi' on&&networksetup -setsecurewebproxystate 'Wi-Fi' on"end ifif proxy_interface is "关闭代理" thendo shell script "networksetup -setwebproxystate 'Wi-Fi' off&&networksetup -setsecurewebproxystate 'Wi-Fi' off"end if

选择存储为应用程序,运行之后如下,可以快速打开或者关闭代理,基本可以达到目的。

主要参考:MAC OS X 下快速切换代理_iteye_7514的博客-CSDN博客

v2.0

虽然1.0已经基本可以达到目的了,但是出于进一步简化的目的,又找了一些资料,写了一个新的脚本。

这次用shell脚本,源码如下

#! /bin/sh
# 获取当前wifi
SSID=$(/System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport -I  | awk -F' SSID: '  '/ SSID: / {print $2}')if [ $SSID = 'xxx' ]
thennetworksetup -setwebproxy 'Wi-Fi' xxx.xxx.xxx.xxx xxxx&&networksetup -setsecurewebproxy 'Wi-Fi' xxx.xxx.xxx.xxx xxxx&&networksetup -setwebproxystate 'Wi-Fi' on&&networksetup -setsecurewebproxystate 'Wi-Fi' onelsenetworksetup -setwebproxystate 'Wi-Fi' off&&networksetup -setsecurewebproxystate 'Wi-Fi' offfi

然后还是采用脚本编辑器, do shell script "/bin/sh xxx/xxx/xxx.sh" 保存为应用程序,运行之后,可以自动判断当前Wi-Fi,进行代理的设置和关闭。比1.0少了在界面选择的过程,我觉得和1.0可以结合来用。

主要参考:Mac 自动设置终端代理IP - 莫名博客

v2.1

上面的shell脚本也可以用mac的「自动操作」应用程序,运行shell脚本,保存应用程序来执行

v3.0

为了进一步简化这个过程,最好都不用我去点击运行,在切换后能够自己完成代理的设置,我又找了一些macOS 关于定时任务或者触发任务的内容,最终实现了目的。

在MAC下,我们一般用launchd实现定时任务,以及其他事件触发的任务。

简单介绍下launchd,launchd存在于MAC OX的系统进程中,用户不能直接对该进程进行操作,只能通过launchctl对其进行管理。

launchctl是一个统一的服务管理框架,可以启动、停止和管理守护进程、应用程序、进程和脚本等。launchctl是通过配置文件来指定执行周期和任务的。配置文件一般是plist类型的文件。

属性列表(Property List)文件是一种用来存储序列化后的对象的文件。属性列表文件的文件扩展名为.plist,因此通常被称为plist文件。Plist文件通常用于存储用户设置,也可以用于存储捆绑的信息,plist中主要的字段和它的含义如下:

  • Label用来在launchd中的一个唯一标识,如同每一个程序都有一个identifies一样。

  • UserName指定运行启动项的用户,只有当Launchd 作为 root 用户运行时,此项才适用。

  • GroupName指定运行启动项的组,只有当Launchd 作为 root 用户运行时,此项才适用。

  • KeepAlive这个key值是用来控制可执行文件是持续运行,还是满足具体条件之后再启动。默认值为false,也就是满足具体条件之后才启动。当设置值为ture时,表明无条件的开启可执行文件,并使之保持在整个系统运行周期内。

  • RunAtLoad标识launchd在加载完该项服务之后立即启动路径指定的可执行文件。默认值为false。

  • Program这个值用来指定进程的可执行文件路径。

  • ProgramArguments这个值用来指定可执行文件和运行的参数。

plist脚本一般存放在以下目录:

  • /Library/LaunchDaemons -->只要系统启动了,哪怕用户不登陆系统也会被执行

  • /Library/LaunchAgents -->当用户登陆系统后才会被执行

  • ~/Library/LaunchAgents --> 由用户自己定义的任务项

  • System/Library/LaunchAgents -->由Mac OS X为用户定义的任务项

  • /System/Library/LaunchDaemons -->由Mac OS X定义的守护进程任务项

切换代理实现步骤:

~/Library/LaunchAgents 文件夹下新建xxx.plist文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict><!-- Label唯一的标识 --><key>Label</key><string>com.onnetworkchange</string><!-- 指定要运行的脚本 --><key>ProgramArguments</key><array><!-- v2.0中的shell脚本--><string>/xxx/xxx/xxx.sh</string></array><!-- 标准输出文件 --><key>StandardOutPath</key><string>/xxx/xxx/xxx.log</string><!-- 标准错误输出文件,错误日志 --><key>StandardErrorPath</key><string>/xxx/xxx/xxx.err</string><!-- 监控文件变化,触发脚本 --><key>WatchPaths</key><array><!-- 没找到wifi属性的文件,但是这个文件在切换wifi时也会被重置,所以用这个也可以--><string>/Library/Preferences/SystemConfiguration/com.apple.wifi.message-tracer.plist</string></array>
</dict>
</plist>

运行命令 launchctl load -w xxx.plist 加载plist文件。

其他命令:

#查看 launchctl使用手册, man在对mac下大部分命令通用,例如 man ifconfig
$ man launchctl

# 加载任务, -w选项会将plist文件中无效的key覆盖掉,建议加上$ launchctl load -w zrbdemo.plist# 删除任务$ launchctl unload -w zrbdemo.plist# 查看任务列表$ launchctl list# 开始任务$ launchctl start zrbdemo.plist# 结束任务$ launchctl stop zrbdemo.plist

最终可以达到切换wifi,识别当前wifi,并进行代理设置的功能,达到了目的

主要参考:MAC下定时任务设置与网络事件监听并执行相应脚本_瓜而不皮的博客-CSDN博客_launchd 定时任务

回头来看,还挺简单的,但是奈何自己水平有限,中间还是费了些功夫的,如果有什么改进,请指出哈

Mac 自动代理切换相关推荐

  1. 谈谈privoxy:关于广告过滤和自动代理切换

    转载自品略图书馆 http://www.pinlue.com/article/2020/04/0206/0310102132438.html privoxy:广告过滤和自动代理切换 最初用Privox ...

  2. 自动切换输入法 mac版能让你在不同的应用之间自动的切换输入法

    自动切换输入法专业版for mac一款切换输入法辅助工具.自动切换输入法 mac版能让你在不同的应用之间自动的切换输入法,以及中英文.让你的文字输入行云流水,从此告别繁琐的手动切换输入法,大幅提高输入 ...

  3. iOS Mac设置代理以及忽略部分IP代理

    前言 在iOS开发中有时候需要用到代理,但是Mac中代理是如何设置的呢?还有设置代理后发现公司内网及部分网络无法使用,又怎样解决呢? 一.设置代理 1.在电脑右上角上找到网络图标------点击网络偏 ...

  4. OWASP ZAP mac chrome代理配置取消URL强制Https【已解决】

    1.OWASP ZAP OWASP Zed攻击代理(ZAP)是世界上最受欢迎的免费安全审计工具之一,由数百名国际志愿者积极维护.它可以帮助你在开发和测试应用程序时自动查找Web应用程序中的安全漏洞. ...

  5. 个人建议:设置Alt+S快捷键来控制VSCode自动保存切换功能

    经常要修改配置文件或者组件Vue,但是自动保存如果设置了就会导致还没输入完成一个完整代码行,就自动格式化(当时这种情况真的想骂人),但平时编辑Vue页面文件又不想每次都去Ctrl+S保存(毕竟键盘死的 ...

  6. Spring源码-AOP(六)-自动代理与DefaultAdvisorAutoProxyCreator

    2019独角兽企业重金招聘Python工程师标准>>> Spring AOP 源码解析系列,建议大家按顺序阅读,欢迎讨论 Spring源码-AOP(一)-代理模式 Spring源码- ...

  7. 可自动定时切换的选项卡/滑动门导航代码

    代码简介: 这个滑动门特效不错,可以设定时间,自动循环切换,也可以鼠标控制,而且选项卡也比较漂亮,在新浪和百度见到过这种自动切换的TAB,很实用,代码也简洁. 代码内容: <!DOCTYPE h ...

  8. 不是架构的架构之四:业务层的实现与自动代理

    我们在开篇中提到,希望能有一种办法,能自动适应系统的环境配置,在局域网小型应用中将直接访问数据库以获得最高的性能,在分布式环境中自动使用WCF来获得较好的安全性和连通性. 但是,我们不希望这样的特性使 ...

  9. PAC自动代理文件格式,教你如何写PAC文件

    前些天,同事给我抱怨,公司的GPO强制更改了笔记本的IE代理服务器,在办公室还好,一回家就上不了网了,必须手动更改代理设置,真是麻烦.我想了想,proxy.pac自动代理文件应该可以解决这个问题,于是 ...

最新文章

  1. springside3.3.4部署小结
  2. 【python数据挖掘课程】十六.逻辑回归LogisticRegression分析鸢尾花数据
  3. NLP Coursera By Michael Collins - Week1
  4. BootStrap笔记-栅格系统
  5. h5跳转小程序_微信小程序吞掉H5?
  6. golang 中io包用法(一)
  7. Unity实现3D物体叠加到摄像头画面上
  8. 项目中坑记录:mongo 插入失败无提示
  9. pycharm安装PyQT5教程
  10. centos7 禁止ip访问_centos7下使用iptables屏蔽所有中国IP
  11. 非线性动力方程中的解析法和数值法(解析解和数值解)
  12. 【NOIP2018】旅行 (洛谷P5049 / P5022) O(nlogn)题解
  13. PWN入门(9)NX enabled,PIE enabled与返回LibC库
  14. golang并发编程之Ticker
  15. 网页设计配色应用教程之各种色彩对比分析
  16. Winrm后门在实战中的巧妙应用
  17. Linux 命令学习_无名小仙男
  18. FFT(快速傅里叶变换)学习笔记
  19. isEqualTo函数模板久久不能通过,到底是小媛掉发过少,还是发量太多,种种谜团围绕在本题周围。让我们跟随Jine一起探索谜团背后的悬疑。
  20. 私活之Python数据挖掘建模平台

热门文章

  1. 又一家中国IC进军IPO:年出货上亿颗,在做Type-C 8K芯片
  2. gtk设计简单的文本编辑器(1)
  3. 网页转PDF文件工具——wkhtmltopdf
  4. 阿里又上美国“售假黑名单” 是被故意抹黑了吗
  5. c语言消消乐字母游戏代码,基于pygame的小游戏———数字消消乐
  6. 关于windows10升级
  7. Windows-dos命令
  8. UBI,MTD(Memory Technology Device),raw flash,emmc,Flash,Block Device
  9. win10计算机维护,Win10系统打开或关闭自动维护功能的方法
  10. 延缓青少年近视进展的新方案