欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

配置 HTTP 代理(WIN10)、SOCKS 代理(WIN10)和编写 PAC 自动配置脚本

发布时间:2023/12/18 编程问答 57 豆豆
生活随笔 收集整理的这篇文章主要介绍了 配置 HTTP 代理(WIN10)、SOCKS 代理(WIN10)和编写 PAC 自动配置脚本 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
  • 文档:
  • ⭐️ mdn - https://developer.mozilla.org/en-US/docs/Web/HTTP/Proxy_servers_and_tunneling/Proxy_Auto-Configuration_PAC_file
  • 相关:
  • ⭐️ 使用PAC file结合ATS控制访问 - https://www.cnblogs.com/zyxnhr/p/11000959.html
  • ⭐️ PAC 代理自动发现简介 - https://www.cnblogs.com/zyxnhr/p/10980279.html
  • Navigator Proxy Auto-Config File Format -
    https://web.archive.org/web/20070602031929/http://wp.netscape.com/eng/mozilla/2.0/relnotes/demo/proxy-live.html
  • PAC语法整理 - https://www.gl.sh.cn/2019/03/14/pac_yu_fa_zheng_li.html
  • 详解自动配置 PAC - https://www.barretlee.com/blog/2016/08/25/pac-file/
  • ⭐️ PAC代理语法含义与书写规范 - https://www.bbsmax.com/A/gVdn389NzW/

文章目录

    • HTTP 代理、SOCKS 代理
      • 配置:HTTP 代理(WIN10)
      • 配置:SOCKS 代理(WIN10)
    • PAC 代理自动配置
      • 语法、函数
        • dnsDomainIs
        • shExpMatch
        • isInNet
        • myIpAddress
        • isPlainHostName
        • localHostOrDomainIs
        • isResolvable
        • dnsResolve
        • dnsDomainLevels
        • weekdayRange
        • dateRange
        • timeRange
        • 通用js函数
          • # alert
          • # url.substring
          • # Math
        • 更多
      • ⭐️ 配置:nginx 配置 PAC 文件服务
      • ⭐️配置:WIN10 配置 PAC 地址
    • WPAD 网络代理自发现协议

HTTP 代理、SOCKS 代理

安全性

保障隐私和安全性是使用代理的重要目的和作用。HTTP 和 SOCKS 代理都能够充当客户端和服务器之间的中介,以保护您的在线活动并使其更难被追踪。

HTTP 代理广泛应用于电子邮件保护和网络安全项目,因为它们能够解析数据包并根据特定需求进行过滤。这对于网络抓取和数据挖掘活动也很有用。

功能性

尽管 HTTP 代理只能处理 HTTP(S) 流量,但它们的配置可以根据众多用例进行设置。由于 HTTP 代理可以读取客户端和 Web 服务器之间的网络流量,它们可以发现重复的请求或缓存响应。

至于 SOCKS 代理,它们不受特定网络协议的约束(全能代理),因此可以更灵活地使用。由于它们无法读取网络流量,因此它们非常适合访问防火墙后面的连接。
(SOCKS 分 socks 4 和 socks 5 两种类型,socks 4 只支持 TCP 协议而 socks 5 支持 TCP/UDP 协议,还支持各种身份验证机制等协议)

性能

由于 HTTP 代理能够过滤数据或缓存网页,它们可以为您的抓取操作提供动力,并提高加载速度和性能。因此,这些代理允许您每秒管理更多请求。另一方面,SOCKS 代理因其速度而广受好评,因为它们更易于应用:这使得它们非常适合在线下载、传输和上传 Web 数据。

配置:HTTP 代理(WIN10)

在 Windows 系统中,通过「网络和Internet -> 代理 --> 手动设置代理」可以找到配置处

配置:SOCKS 代理(WIN10)

由于 Windows 系统自带的“代理服务器”配置只显式支持 ​​http ​​代理,所以让人误以为 Windows 不支持 ​​Socks​​ 代理。但其实它是支持 ​​Socks​​ 的,只需要配置的时候正确编写信息即可。

在 Windows 系统中,通过「网络和Internet -> 代理 --> 手动设置代理」可以找到配置处

PAC 代理自动配置

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

系统读取到 PAC 脚本,以 FindProxyForURL 方法名作为入口执行脚本,根据返回值决定代理方向。

function FindProxyForURL(url, host) {return "DIRECT"; }

💡 提示

使用RAC文件的好处

  • 受所有的主要操作系统和浏览器支持
  • 无论用户是输入域还是输入IP地址,都能正确的自动路由流量
  • 自动代理故障转移
  • 内部流量见直接传输,并且可以根据需要考虑和路由该逻辑的任何和异常,一旦涉及并部署了PAC文件,任何持续的维护都是直截了当的

语法、函数

function FindProxyForURL(url, host) {return "DIRECT"; }

上面函数中:

  • url 字段就是我们在浏览器地址栏输入的待访问地址

    URL 中类似 https:// 这样的的路径和查询组件已被去除
    不同浏览器中,可以通过设置去除

    • chrome(版本 52 至 73):设置 PacHttpsUrlStrippingEnabled 为 false
    • Firefox:对应的选项是 network.proxy.autoconfig_url.include_path
  • host 为该地址对应的 hostname

    从 URL 中提取得到的主机名。这只是为了方便;它与 :// 之后到第一个 : 或 / 之前的字符串相同。端口号不包括在此参数中,必要时可以自行从 URL 中提取。

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

而返回的接口可以是多个代理串联:(以 ; 分割)

function FindProxyForURL(url, host) {// 循序执行,前面的挂了用后面的return "SOCKS 192.168.1.1:10801; PROXY 192.168.1.1:10800; DIRECT"; }

💡 提示:后面介绍的pac流程判断和代理服务器上的分流的区别

后面介绍的pac流程判断语法&函数。其功能类似代理服务器上的统一分流配置。
但不同在于,pac 流程判断可以指定流量流向多台服务(从而使用多台服务器的流量规则),而代理服务器上的流量分流只遵循自己的流量规则。
所以,后面介绍的pac流程判断适合多台代理服务器,多中分流规则的用户使用。
(一台服务器,关注的是保证pac文件服务器的可用性,和配置返回值的可用性既可。)

dnsDomainIs

类似于 ==,但是对大小写不敏感,

if (dnsDomainIs(host, "google.com") ||dnsDomainIs(host, "www.google.com")) {return "DIRECT"; }

shExpMatch

Shell 正则匹配

if (shExpMatch(host, "vpn.domain.com") ||shExpMatch(url, "http://abcdomain.com/folder/*")) {return "DIRECT"; }

isInNet

判断是否在网段内容

if (isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0")) {return "DIRECT"; }

myIpAddress

返回主机的 IP

if (isInNet(myIpAddress(), "10.10.1.0", "255.255.255.0")) {return "PROXY 10.10.5.1:8080"; }

isPlainHostName

判断是否是本地主机。(判断是否为诸如 barret/,server-name/ 这样的主机名)

if (isPlainHostName(host)) {return "DIRECT"; }

localHostOrDomainIs

判断访问主机是否属于某个域和某个域名

function FindProxyForURL(url, host) {if ((isPlainHostName(host) ||dnsDomainIs(host, ".company.com")) &&!localHostOrDomainIs(host, "http://www.company.com/") &&!localHostOrDomainIs(host, "home.company.com"))return "DIRECT";elsereturn "PROXY proxy:80"; }

isResolvable

判断主机是否可访问(主机名是否能被dns服务器解析)

if (isResolvable(host)) {return "PROXY proxy1.example.com:8080"; }

dnsResolve

通过 DNS 查询主机 ip

if (isInNet(dnsResolve(host), "10.0.0.0", "255.0.0.0") ||isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0") ||isInNet(dnsResolve(host), "192.168.0.0", "255.255.0.0") ||isInNet(dnsResolve(host), "127.0.0.0", "255.255.255.0")) {return "DIRECT"; }

dnsDomainLevels

返回是几级域名,比如 dnsDomainLevels 返回的结果就是 1

if (dnsDomainLevels(host) > 0) {return "PROXY proxy1.example.com:8080"; } else {return "DIRECT"; }

weekdayRange

周一到周五

if (weekdayRange("MON", "FRI")) {return "PROXY proxy1.example.com:8080"; } else {return "DIRECT"; }

dateRange

一月到五月

if (dateRange("JAN", "MAR")) {return "PROXY proxy1.example.com:8080"; } else {return "DIRECT"; }

timeRange

八点到十八点

if (timeRange(8, 18)) {return "PROXY proxy1.example.com:8080"; } else {return "DIRECT"; }

通用js函数

# alert

这个弹窗警报信息函数可以用来配合浏览器的控制台进行调试

resolved_host = dnsResolve(host); alert(resolved_host);
# url.substring

截取协议字符串

function FindProxyForURL(url, host) {if (url.substring(0, 5) == "http:") {return "PROXY proxy:80";}else if (url.substring(0, 4) == "ftp:") {return "PROXY fproxy:80";}else if (url.substring(0, 7) == "gopher:") {return "PROXY gproxy";}else if (url.substring(0, 6) == "https:") {return "PROXY secproxy:8080";}else {return "DIRECT";} }
# Math
Math.floor(Math.random()*5)

更多

官方文档 - https://developer.mozilla.org/en-US/docs/Web/HTTP/Proxy_servers_and_tunneling/Proxy_Auto-Configuration_PAC_file#predefined_functions_and_environment

⭐️ 配置:nginx 配置 PAC 文件服务

记录如何用 nginx 部署 pac 脚本,供 win 使用。

root@OpenWrt_D2550:~# cat /www/pac/pac.txt function FindProxyForURL(url, host) {// 内网if(isInNet(dnsResolve(host), "192.168.0.0", "255.255.0.0")) {return "DIRECT";}return "SOCKS 192.168.1.1:10801; PROXY 192.168.1.1:10800; DIRECT"; }root@OpenWrt_D2550:~# cat /etc/nginx/nginx.conf http {#access_log off;log_format openwrt'$request_method $scheme://$host$request_uri => $status'' (${body_bytes_sent}B in ${request_time}s) <- $http_referer';access_log /var/log/nginx/access_log.log openwrt;error_log /var/log/nginx/error_log.log info;include mime.types;#错误页面# error_page 500 502 503 504 /50x.html;# pacserver {listen 80;listen [::]:80;server_name pac.pac; # 通过域名挟持访问location / {proxy_pass http://192.168.1.1:8099/;}}server {# Module ngx_http_core_modulelisten 8099;server_name 192.168.*;# 限制内网访问include restrict_locally;# Module ngx_http_charset_modulecharset utf-8;# 静态资源优化sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout 65;types_hash_max_size 2048;# 禁止缓存add_header Cache-Control no-store;add_header Cache-Control no-cache;location / {# pac 文件指定类型:# application/x-ns-proxy-autoconfig# application/x-javascript-configtypes { } default_type application/x-ns-proxy-autoconfig;# return 200 '{status:200}';root /www/pac;}}}

⚠️ 注意
PAC 文件被访问时,返回的文件类型(Content-Type)应该为: application/x-ns-proxy-autoconfig 或者 application/x-javascript-config

当然,如果你不写,一般浏览器也能够自动辨别

❓ 问题:设置那种文件类型更好?

没有什么理由偏爱一种 MIME 类型多一些,如果有的话,假设 application/x-ns-proxy-autoconfig 相对 application/x-javascript-config 被更多的客户端所支持是可以理解的。
因为它被定义在最初的 Netscape 规范里面,后者是最近才开始被使用

⭐️配置:WIN10 配置 PAC 地址

在 Windows 系统中,通过「网络和Internet -> 代理 --> 自动设置代理」可以找到配置处,下放的地址栏填写 PAC 文件的 URI。(这个 URI 可以是本地资源路径(file:///),也可以是网络资源路径(http://))

💡 提示

通过修改 host 或者 域名挟持技术可以让将任何域名赋予 pac 文件服务器,简化配置。

WPAD 网络代理自发现协议

PAC 文件中的 URL 可能是手工配置的,也可能是通过网络代理自发现协议自动配置的。

网络代理自动发现协议(Web Proxy Auto-Discovery -WPAD)是一种帮助 Web 浏览器使用 DNS 或 DHCP 自动检测 PAC 文件位置的技术。

说白了,就是: 通过 DHCP 和 DNS 的查询来搜索 PAC 文件的位置

更多:https://www.cnblogs.com/zyxnhr/p/10980279.html

总结

以上是生活随笔为你收集整理的配置 HTTP 代理(WIN10)、SOCKS 代理(WIN10)和编写 PAC 自动配置脚本的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。