客户端代理软件:Clash/proxychains与Windows10指定域名走代理

跨平台客户端代理Clash

clash基础版本开源,平常够用了。

Linux下代理工具proxychains

proxychains-ng是proxychains的加强版
proxychains在linux中可以很方便的使用

使用方式:

  • 配置代理服务器
  • 使用方式: proxychains <运行的命令> <命令参数> , 例如 $ proxychains curl http://baidu.com

如何在windows10中设置仅指定域名/IP访问时使用代理

通常我们在配置客户端代理时, 大多都是统一设置之后就全局生效了, 不管是否需要都将访问转发到代理服务器. 这并不是我么所需要的.

例如, 我在香港买了一台服务器, 我仅需要访问github时, 将访问转发到香港服务器, 然后通过其代理服务器访问github, 其他的访问不走代理.

win10中自动设置代理与手动设置代理

手动设置代理

手动设置代理就是如上我们说的情况, 设置好了之后全部访问都将其转发到代理服务器, 再由代理了服务器去访问目标. 尽管可以设置忽略一些ip和域名, 但是不是我想要的.

自动设置代理(PAC)

自动设置代理PAC(Proxy Automatic Configuration)

当我们需要对一部分网站需要用到特定的代理服务时, 就需要使用到PAC了

代理自动配置是一个 JavaScript 脚本,其核心是一个 JavaScript 函数,用来决定网页浏览请求(HTTP、HTTPS,和 FTP)应当直连目标地址,还是被转发给一个网页代理服务器并通过代理连接

将一下代码命名为proxy.pac并上传到网站上, 并在控制面板->网络和Internet->代理-> 脚本地址中设置proxy.pac文件地址即可.

# return语句有三种指令
# DIRECT,表示无代理直接连接
# PROXY host:port,表示走host:port 的 proxy 服务
# SOCKS host:port,表示走host:port 的 socks 服务

function FindProxyForURL(url, host) {
    //本地地址直接连接
    if (isPlainHostName(host)) {
        return "DIRECT";
    }
    //访问10.8的网段的ip地址需要走代理
    if (shExpMatch(url, "*10.8.*")) {
        return "PROXY 127.0.0.1:8087";
    }
    //当我的ip地址为192.168.2.*/192.168.8.*不需要走代理
    if (shExpMatch(myIpAddress(), "192.168.8.*") || shExpMatch(myIpAddress(), "192.168.2.*")) {
        return "DIRECT";
    }
    //否则访问192.168.8.*的网段的ip地址需要走代理
    if (shExpMatch(url, "*192.168.8.*")) {
        return "PROXY 111.111.111.111:1234";
    }
    return "DIRECT";
}
# 常用的pac方法

# 基于主机名的函数:
# 是否内部主机名
if(isPlainHostName(host)){}  
# 类似于 ==,但是对大小写不敏感
if(dnsDomainIs(host, "google.com")){}  
# 判断host字符与指定字符是否前置匹配, 类似strpos(host, host1) == 0
if(localHostOrDomainIs(hots, "www.github.com")){}  
# 判断主机是否可访问
if(isResolvable()){}  
# 判断是否在网段内容,比如 10.1.0.0 这个网段,10.1.1.0 就在网段中,
if(isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0"))){}  

# 相关的实用程序函数:
# 通过 DNS 查询主机 ip
if(dnsResolve(host)){}  
# 当前主机IP地址
if(myIpAddress()){}  
# 返回是几级域名,比如dnsDomainLevels(http://barretlee.com) 返回的结果就是 1
if(dnsDomainLevels(host) > 1){}  
# 基于URL/主机名的条件
if(shExpMatch(host, "*.domain.com")){}  

# 基于时间的条件:
if(weekdayRange()){}  
if(dateRange()){}  
if(timeRange()){}  
if(isPlainHostName(host)){}  

此处评论已关闭