Marco Nie - socks https://blog.niekun.net/tag/socks/ zh-CN Thu, 21 Feb 2019 20:33:00 +0800 Thu, 21 Feb 2019 20:33:00 +0800 macOS/Linux/windows设置终端 proxy 代理 https://blog.niekun.net/archives/97.html https://blog.niekun.net/archives/97.html Thu, 21 Feb 2019 20:33:00 +0800 admin 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,所以将内容放入此文件内即可。

windows

CMD

cmd 中用 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 文件路径:
2019-10-15T06:04:07.png

重新打开 cmd 输入 phttp phttps,查看当前IP:

curl ipecho.net/plain ; echo

注意,如果默认终端是 powershell 则无法通过上述方式在注册表加载 bat 脚本,建议将脚本路径设置到系统 path 中,然后启动 CMD 后输入脚本文件名运行一次即可。

power shell

power 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
]]>
0 https://blog.niekun.net/archives/97.html#comments https://blog.niekun.net/feed/tag/socks/archives/97.html