Marco Nie - proxy
https://blog.niekun.net/tag/proxy/
-
macOS/Linux/windows设置终端 proxy 代理
https://blog.niekun.net/archives/97.html
2019-02-21T20:33:00+08:00
macOS/Linux通过设置代理来让终端流量走代理端口(socks5适用于大部分的流量,有些程序不走http),在终端输入:export all_proxy=socks5://127.0.0.1:1080
取消代理:unset all_proxy
也可以通过创建alias来设置一个“快捷命令”运行此命令:alias proxy='export all_proxy=socks5://127.0.0.1:1080'
alias unproxy='unset all_proxy'
然后开启代理就输入:proxy
取消代理输入:unproxy
设置只对当前窗口有效,关闭后取消。可以通过bash文件保存alias,快速设置/取消proxy。打开 linux 打开 ~/.bash_profile, ~/.bashrc, 或者 ~/.profile,macOS 打开 ~/.zshrc。The difference between these files is (primarily) when they get read by the shell. If you're not sure where to put it, ~/.bashrc is a good choice.macos/Linux此文件一般不存在,可新建: vim ~/.bashrc
# vim ~/.zshrc # macos将下面代码加入文件:alias proxy='export all_proxy=socks5://127.0.0.1:1080 && export http_proxy=http://127.0.0.1:1082 && export https_proxy=http://127.0.0.1:1082'
alias unproxy='unset all_proxy && export http_proxy= && export https_proxy='保存文件后,重新载入配置: source ~/.bashrc
# source ~/.zshrc. # macos运行命令测试alias是否生效:proxy
对于 macOS,默认的 shell 是 zsh,它的默认加载文件是 ~/.zshrc,所以将内容放入此文件内即可。windowsCMDcmd 中用 set http_proxy 设置set http_proxy=http://127.0.0.1:1082
set https_proxy=http://127.0.0.1:1082
恢复set http_proxy=
set https_proxy=
command prompt 使用 doskey 命令建立类似 alias 功能:新建 cmd_profile.bat 文件内容如下:@echo off
doskey phttp = set http_proxy=http://127.0.0.1:1082
doskey phttps = set https_proxy=http://127.0.0.1:1082
doskey unphttp = set http_proxy=
doskey unphttps = set https_proxy=打开注册表:win + r 输入 regedit,定位到 HKEY_CURRENT_USER\Software\Microsoft\Command Processor\,右键 new - string value,重命名为:Autorun,值设置为 bat 文件路径:重新打开 cmd 输入 phttp phttps,查看当前IP:curl ipecho.net/plain ; echo
注意,如果默认终端是 powershell 则无法通过上述方式在注册表加载 bat 脚本,建议将脚本路径设置到系统 path 中,然后启动 CMD 后输入脚本文件名运行一次即可。power shellpower shell 稍微麻烦一下,需要建立 PowerShell profile 文件设置 alias。在启动 power shell 时会执行 profile 里的命令,类似与上面的 .bashrc 文件,关于建立 PowerShell profile 文件参考:https://docs.microsoft.com/en-us/previous-versions/system-center/service-manager-2010-sp1/ff461033(v=technet.10)?redirectedfrom=MSDN开始建立 profile,首先以管理员权限运行 power shell,执行以下命令:Test-path $profile
如果返回值为 false 执行以下命令,返回值为 true 跳过此步骤:New-item –type file –force $profile
打开 profile 文件:Notepad $profile
加入以下内容:# Set-Proxy command
Function SetProxy() {
Param(
$Addr = $null,
[switch]$ApplyToSystem
)
$env:HTTP_PROXY = $Addr;
$env:HTTPS_PROXY = $Addr;
$env:http_proxy = $Addr;
$env:https_proxy = $Addr;
if ($addr -eq $null) {
[Net.WebRequest]::DefaultWebProxy = New-Object Net.WebProxy;
if ($ApplyToSystem) { SetSystemProxy $null; }
Write-Output "Successful unset all proxy variable";
}
else {
[Net.WebRequest]::DefaultWebProxy = New-Object Net.WebProxy $Addr;
if ($ApplyToSystem) {
$matchedResult = ValidHttpProxyFormat $Addr;
# Matched result: [URL Without Protocol][Input String]
if (-not ($matchedResult -eq $null)) {
SetSystemProxy $matchedResult.1;
}
}
Write-Output "Successful set proxy as $Addr";
}
}
Function SetSystemProxy($Addr = $null) {
Write-Output $Addr
$proxyReg = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings";
if ($Addr -eq $null) {
Set-ItemProperty -Path $proxyReg -Name ProxyEnable -Value 0;
return;
}
Set-ItemProperty -Path $proxyReg -Name ProxyServer -Value $Addr;
Set-ItemProperty -Path $proxyReg -Name ProxyEnable -Value 1;
}
Function ValidHttpProxyFormat ($Addr) {
$regex = "(?:https?:\/\/)(\w+(?:.\w+)*(?::\d+)?)";
$result = $Addr -match $regex;
if ($result -eq $false) {
throw [System.ArgumentException]"The input $Addr is not a valid HTTP proxy URI.";
}
return $Matches;
}
Set-Alias -Name set-proxy -Value SetProxy上面的脚本主要就是建立了三个 function:设置代理 设置系统代理 检查 uri 是否正确,然后设置 alias。关于 Set-Alias 语法参考:https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/set-alias?view=powershell-7保存文件后,继续输入下面命令:Set-ExecutionPolicy RemoteSigned
. $profile
以上就完成了 profile 的设置,使用语法如下:# 设置当前窗口代理 :
set-proxy http://your-proxy:port
#设置当前窗口代理 + 系统代理:
set-proxy http://your-proxy:port -ApplyToSystem
#取消当前窗口代理:
set-proxy (没有参数)
#取消当前窗口代理 + 系统代理:
set-proxy -ApplyToSystem测试代理然后查看当前IP:set-proxy http://127.0.0.1:1082
curl https://info.niekun.net/ip ; echo