Skip to content
intermediate

如何在 Linux 上通过 ProxyScrape SOCKS5 代理路由命令行工具

在 Linux 上将 curl、wget、git、proxychains 和 Python 的流量通过 ProxyScrape 的 HTTP 与 SOCKS5 端点发送,并采用安全的凭据处理方式与无 DNS 泄漏的 SOCKS5h 配置。

Linux SOCKS5 网页抓取

概述

在 Linux 上,大多数工具不会读取单一的全局代理设置——每个程序都会查看自己的配置文件,或读取 http_proxy、https_proxy 和 all_proxy 环境变量。ProxyScrape 支持 HTTP 和 SOCKS5,本指南将展示如何把常用的命令行工具指向你的端点。

当你希望 DNS 查询在代理端而非本地进行时,优先使用 socks5h 方案的 SOCKS5。这样可以避免 DNS 泄漏,也能防止目标使用本地解析器无法解析的域名时出现失败。

步骤

  1. 收集端点信息。 在 ProxyScrape 控制面板中,记下主机、HTTP 端口、SOCKS5 端口以及你的用户名和密码。

  2. 为你的 shell 会话导出凭据。 避免将密码直接输入命令中,否则它们会留在 shell 历史记录里:

    read -rsp "ProxyScrape username: " PS_USER && echo
    read -rsp "ProxyScrape password: " PS_PASS && echo
    export PS_HOST="your-host"
    export PS_HTTP_PORT="your-http-port"
    export PS_SOCKS_PORT="your-socks5-port"
    
  3. 用 curl 测试 HTTP 代理。

    curl -x "http://$PS_USER:$PS_PASS@$PS_HOST:$PS_HTTP_PORT" https://ipinfo.io/ip
    
  4. 测试 SOCKS5。 --socks5-hostname 会通过代理解析 DNS。SOCKS5 用户名/密码认证需要 curl 7.51.0 或更高版本:

    curl --socks5-hostname "$PS_HOST:$PS_SOCKS_PORT" -U "$PS_USER:$PS_PASS" https://ipinfo.io/ip
    
  5. 为遵循这些环境变量的工具设置环境变量。

    export http_proxy="http://$PS_USER:$PS_PASS@$PS_HOST:$PS_HTTP_PORT"
    export https_proxy="$http_proxy"
    export no_proxy="localhost,127.0.0.1,.local"
    

    对于 SOCKS5,请使用 export all_proxy="socks5h://$PS_USER:$PS_PASS@$PS_HOST:$PS_SOCKS_PORT"。并非每个程序都会遵循 all_proxy;请用 curl -v 或该工具自身的文档进行确认。

  6. 配置 wget。 wget 不支持 SOCKS 代理,因此请在 ~/.wgetrc 中使用 HTTP 端口:

    use_proxy = yes
    http_proxy = http://USER:PASS@HOST:PORT
    https_proxy = http://USER:PASS@HOST:PORT
    

    然后用 chmod 600 ~/.wgetrc 限制访问权限。

  7. 使用 proxychains-ng 路由任意二进制程序。 安装 proxychains-ng,并将你的端点添加到 proxychains.conf:

    socks5 HOST PORT USER PASS
    

    proxychains-ng 接受端口之后可选的用户名和密码字段;如果你的构建版本不接受它们,请查阅你的发行版针对该版本的文档。然后为任意命令加上前缀:

    proxychains4 curl https://ipinfo.io/ip
    
  8. 在 Python 中使用。

    import os, requests
    url = f"http://{os.environ['PS_USER']}:{os.environ['PS_PASS']}@{os.environ['PS_HOST']}:{os.environ['PS_HTTP_PORT']}"
    proxies = {"http": url, "https": url}
    print(requests.get("https://ipinfo.io/ip", proxies=proxies, timeout=15).text)
    

    如果你更倾向使用 SOCKS5 端口,请安装 requests[socks]。

  9. 避免将密钥存放在明文文件中。 优先使用环境变量或权限为 chmod 600 的 ~/.netrc,并记住,直接在命令行上传递的凭据可能会被其他用户通过 ps aux 看到。