Mac 自动代理切换

2023-05-16

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_dialog

end tell


if 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 if


if proxy_interface is "关闭代理" then

    do 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' ]
then

    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

else

        networksetup -setwebproxystate 'Wi-Fi' off&&networksetup -setsecurewebproxystate 'Wi-Fi' off

fi

然后还是采用脚本编辑器, 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 定时任务

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mac 自动代理切换 的相关文章

  • Mac环境下 手动配置Gradle环境变量

    本人刚接触mac不久 今天遇到了配置gradle环境变量问题 中间遇到了一些坑 与大家分享一下 1 第一步 找到Androidstudio应用程序 右键 显示包内容 为了拿到路径 可以把gradle这个文件拖到 终端 把刚才路径 在打开的o
  • Openwrt编译报错 TCP Fast Open is not available for client mode 的解决办法

    报错信息 configure error TCP Fast Open is not available for client mode please rerun without enable tfo client gmake 3 Makef
  • Mac平台VMware Fusion虚拟机无网络连接与解决方法

    打开设置Network 点击下方锁子打开权限后点击 新增一个 把所有能打的对勾都打上 打开虚拟机后点击上面的 lt gt 然后把对勾打到新增的那个网络设置上 然后重启 不是挂起 而是重启
  • Mac配置与下载安卓SDK,配置adb命令

    所以如果想要单独下载SDK 参考如下步骤 文章目录 配置步骤 1 首先需要安装java的JDK 2 解压上面下载好的文件 3 补充SDK内容 4 配置环境变量 5 测试adb命令 其他信息 配置步骤 1 首先需要安装java的JDK 首先登
  • Mac 中的sublime text3 如何安装插件

    Mac 中的sublime text3 如何安装插件 相信大家在Windows系统中试用sublime text 的体验非常不错 我也是在Windows系统中使用了两年的时间 才转战Mac系统的 但是说实话 Mac系统好多东西都是十分不习惯
  • mac typora低版本出现图片不显示

    由于mac的系统版本低 安装的typora的版本也相对低 但是会遇到一些问题 尤其是遇到加载的图片 出现不显示 需要手动一个一个修改一下才能显示 如果图片较多就麻烦了 可以切换源代码模式 在源码模式下 编写一个图片的链接 可以在 和imag
  • 安装HomeBrew 失败的解决方案

    在安装HomeBrew 或者安装成功 执行相关指令 时遇到错误提示 Error Failure while executing git clone https github com Homebrew homebrew core usr lo
  • mac系统渗透测试小技巧-将命令行工具能够tab补全

    在kali中各种工具都能补全 但在mac中我们有些工具是需要自己下载回来的 每次使用工具都需要进入目录再打开命令行 这样会影响我们渗透测试的速度 说起来就是懒 懒人自有懒方法 其实很简单 我们只需要添加一个软连接到 usr local bi
  • TextureTailor自制Plist碎图工具

    最近在开发小游戏 美术资源是个令人头疼的问题 故搜寻了一些网上的资源文件 但是总被plist格式和png图片格式所困扰 在参考了一些大佬的代码后自制了一个符合我个人需求的小工具 先放源码地址 TextureTailor 再来预览一下效果 界
  • Mac配置item2高亮颜色

    item2颜色生效配置 1 bash设置 在导入并应用完颜色方案之后 通过命令vim bash profile 或open bash profile编辑文件 添加以下内容 之后source bash profile来应用文件修改 CLICO
  • 终端zsh_只需七个步骤,即可使您的“ ZSH”终端站起来—直观指南

    终端zsh by rajaraodv 通过rajaraodv 只需七个步骤 即可使您的 ZSH 终端站起来 直观指南 Jazz Up Your ZSH Terminal In Seven Steps A Visual Guide In th
  • JAVA之初识springMVC框架

    1 环境 操作系统 Mac OS 10 12 6 Tomcat v7 0 JDK 1 7 工具 eclipse 2 新建项目 用eclipse新建项目 选择Dynamic Web Project 将项目字符集改为UTF 8 3 编辑web
  • Android Studio快捷键从Mac OS改为Win

    原理将Mac的Control映射为Command Command映射为Option Option映射为control 这样与win的快捷键按键习惯应该相同 未长时间测试
  • mac用终端登陆PostgreSQL时出现-bash: psql: command not found

    系统无psql命令 此时要将postgresql 的 bin 目录添加到环境变量中 注意你的postgresql在哪 还有它的版本 推荐前往 Applications和 Library确认 export PATH Library Postg
  • mac 卸载 XCode

    1 卸载之前的XCode 命令行执行下面命令 sudo Developer Library uninstall devtools mode all sudo Developer Library uninstall developer fol
  • mac下python安装lxml失败

    作者 张自玉 链接 https www zhihu com question 30047496 answer 76115376 来源 知乎 著作权归作者所有 商业转载请联系作者获得授权 非商业转载请注明出处 首先请确认安装了xcode co
  • 使用Mac的十大最好用神器

    资深 Mac 用户 提升效率的 10 大神器 谢志鹏 大家好 我是曹将的徒弟 Pem 最近刚结束悉尼大学研究生的学习 是一枚正在求职的交互设计师 我是从 2015 年开始使用 Mac 的 如果用一句话来形容 Mac 的使用感受 那就是 令人
  • mac 和华为手机互传文件

    参考博客 华为手机传输文件到Mac电脑上 简书 应用场景 1 把资料从手机上的数据备份到电脑上或反向操作 2 需要把资料传给朋友的时候 有两种方式 第一种是通过数据线 传输速度快 但是需要安装软件和使用数据线 具体流程如下 1 先准备一个双
  • Downie 4 4.6.12 MAC上最好的一款视频下载工具

    Downie for Mac 简介 Downie是Mac下一个简单的下载管理器 可以让您快速将不同的视频网站上的视频下载并保存到电脑磁盘里然后使用您的默认媒体播放器观看它们 Downie 4 Downie 4 for Mac Downie
  • mac下搭建cocos2d-x3.2开发环境

    1 软件 Xcode Ant apache ant 1 9 4 bin tar gz Jdk jdk 8u45 macosx x64 dmg 有的mac系统上没有自带 Ndk android ndk r10d darwin x86 64 b

随机推荐

  • Linux系统中安装elasticsearch详解

    官方网站 xff1a Install Elasticsearch from archive on Linux or MacOS Elasticsearch Guide 7 17 Elastic 一 安装命令 xff1a wget https
  • centos7系统查看防火墙状态

    查看方法 xff1a 1 利用systemctl查看 xff0c 该命令用于管理系统 xff0c 语法为 systemctl status firewalld xff1b 2 用firewall查看 xff0c 可以查看防火墙的默认状态 x
  • Docker中网络的使用和配置用法详解

    一 单个物理机中docker网络 1 1 Docker默认网桥 安装Docker 服务默认会创建一个 docker0 网桥 xff08 其上有一个 docker0 内部接口 xff09 xff0c 它在内核层连通了其他的物理或虚拟网卡 xf
  • mongo数据库中字符串型正负数值比较大小

    数据库中数据展示 xff1a 使用python代码实现 xff1a Requires pymongo 3 6 0 43 from pymongo import MongoClient client 61 MongoClient 34 mon
  • IDEA插件系列(3):Easy Javadoc插件——快速生成javadoc文档注释

    1 插件介绍 Easy Javadoc插件 能帮助开发者快速生成类 方法 属性等中文javadoc 2 安装方式 第一种安装方式是在线下载安装插件 第二种安装方式是使用离线插件进行安装 插件下载地址 xff1a https plugins
  • flask项目中内部接口调用其他内部接口操作

    1 requests 在 Flask 框架项目中 xff0c 可以通过使用 requests 模块来进行内部接口调用 requests 模块是 Python 中常用的 HTTP 请求库 xff0c 可以用于发送 HTTP 请求和处理响应 示
  • ElasticSearch删除索引中的数据(delete_by_query)

    1 删除两个月以前的数据 在 Elasticsearch 中 xff0c 要删除两个月以前的数据 xff0c 可以通过以下步骤 xff1a 计算当前时间的两个月前的日期 xff0c 可以使用 Python 的 datetime 模块来实现
  • ubuntu进入initramfs,系统黑屏

    ubantu黑屏 解决方法 解决方法 1 如果在initramfs模式输入reboot重启 xff0c 或者长按开机键强制关机重启 xff0c 然后选择ubuntu xff08 高级选项 xff09 中的修复模式 xff08 recover
  • You must specify at least three points for the robot footprint,reverting to previous footprint

    找到 costmap common params yaml xff0c 修改成如下形式 xff1a robot radius 0 20 distance a circular robot should be clear of the obs
  • 基于Anaconda3.8环境安装Python3.6

    基于Anaconda3 8环境安装Python3 6 1 通过如下命令查看当前已经装好的python环境 conda info e 2 通过python V 查看当前所处的版本 3 装好anaconda3 8以后想再安装一个python3
  • PX4无人机环境搭建

    PX4无人机资料开发 1 1 Ubuntu系统的安装及相关工具使用ubuntu 系统安装以及基础使用系统安装ubuntu基础使用常用工具使用git常用命令 1 2PX4开发环境搭建编译工具链的安装code安装使用 1 1 Ubuntu系统的
  • 3 FlightPlot安装使用方法

    FlightPlot安装使用方法 下载flightPlot源码下载切换openjdk 版本重启安装flightPlot 下载flightPlot源码 git clone recursive https github com PX4 Flig
  • 在Windows下安装TensorFlow和Keras

    在Windows下安装TensorFlow和Keras 1 安装 Anaconda3 5 1 0 Windows x86 64 exe xff0c 之前用的版本 xff0c 也可以下载更新的版本 绝大多数都选用默认选项即可 xff0c 遇到
  • 初学STM32

    编译出错 xff1a Error L6002U could not open file o No such file or directory 原因 xff1a 汉化出问题
  • 百度可视化工具Sugar简单介绍以及使用说明

    百度可视化工具Sugar简单介绍以及使用说明 介绍使用指南免费试用快速入门 使用流程使用示例 这是我个人的第一篇博客 最近因为工作原因 xff0c 需要了解百度可视化工具Sugar xff0c 因此在这里做个总结 xff0c 同时也为自己梳
  • 四小时Jsp期末作业速成——MyBlog个人博客系统(javaweb:非框架)

    MyBlog个人博客系统 xff08 javaweb 非框架 xff09 目录第一章 系统简介 31 1 背景及意义 31 2 开发目的 31 3 开发环境 3 第二章 系统设计 42 1 系统分析 42 1 1 系统需求分析 42 1 2
  • 【已解决】Ubantu问题记录:在连接网线的情况下ubuntu系统ping网关不通以及无法上网

    问题背景 xff1a 我们的服务器配置了两张在同一网段下的网卡 xff0c 卡 eno4 连接以太网ip xff1a 192 168 2 10 网关192 168 2 1 卡 eno2 ip xff1a 192 168 2 12 网关192
  • ros知识点

    工作空间 一个典型的ROS工作空间目录结构如下 所有ROS程序都必须放置在某个ROS工作空间 workspace 下 xff0c 我们在主目录下创建一个名为catkin ws的ROS工作空间 ROS工作的空间名字可以随便取 xff0c 一般
  • 我有一个IT梦

    介绍 作为一名大二的学生 xff0c 接触计算机基础技术近乎俩年 xff0c 俩年来我愈加发觉计算机是一门发展力很强的学科 它多式多样 xff0c 更像是一种挑战 xff0c 对于好强的我来说 xff0c 越来越着迷计算机的世界 纵然未知的
  • Mac 自动代理切换

    Mac 自动代理切换 背景 xff1a 工作有时需要用goole搜索 xff0c 所以会配置一下公司提供的HTTP和HTTPS代理 xff0c 但是下班之后回到家 xff0c 只有公司内网才能访问代理 xff0c 所以还需要把代理关掉 每次