日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

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

编程问答

ios设备使用socks代理

發布時間:2024/1/1 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ios设备使用socks代理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在linux上運行了socks5的代理客戶端之后,發現我的iphone在局域網的詳細信息里竟然無法設置socks代理,只有http代理,而我的代理客戶端又不支持http代理,所以找了下iphone上設置socks代理的方法,記錄如下:

HTTP Prxoy有3種模式: 關閉Off/手動Manual/自動Auto

用自動配置文件,就可以支持socks代理

function FindProxyForURL(url, host) {return "SOCKS proxy_host:proxy_port"; }
將上面的proxy_host和proxy_port換成socks服務器實際的IP地址和端口
然后保存為 proxy.pac
放到 http://zhiwei.li/proxy.pac
在 iPhone設備中,添加自動配置 URL 為上面的地址,就可以使用socks代理了。


擴展1:
局域網流量不要用代理

function FindProxyForURL(url, host) {if (isInNet(host, "192.168.1.0", "255.255.255.0"))return "DIRECT";return "SOCKS proxy_host:proxy_port"; }
一個PAC文件包含一個JavaScript的函數”FindProxyForURL(url, host)”. 這個函數返回一個包含一個或多個訪問規則的字符串。用戶代理根據這些規則適用一個特定的代理其或者直接訪問。 當一個代理服務器無法響應的時候,多個訪問規則提供了其他的后備訪問方法。 瀏覽器在訪問其他頁面以前,首先訪問這個PAC文件。PAC文件中的URL可能是手工配置的,也可能是是通過網頁的網絡代理自發現協議(Web Proxy Autodiscovery Protocol)自動配置的。

為了完整性和最佳的兼容性,我們應該設置網頁服務器(apache或者nginx,lighttpd等等)將這個pac文件的MIME類型聲明為 application/x-ns-proxy-autoconfig 或者 application/x-javascript-config

對于現代瀏覽器來說,兩種mime類型都沒有問題, 但 application/x-ns-proxy-autoconfig 相對 application/x-javascript-config 被更多的客戶端所支持, 因為它被定義在最初的Netscape規范里

FindProxyForURL的返回值,可以是以下3種之一,或者是它們的組合

DIRECT直接連接,不使用代理PROXY host:port使用指定的http代理SOCKS host:port使用指定的SOCKS代理

如果是多個組合,要用 分號;拼接起來
并且,放在最左邊的優先級最高,如果最左邊的失敗,依次往右邊嘗試

如果最左邊的代理服務器掛掉了,并且你在右邊沒有指定DIRECT選項, 瀏覽器應該會問你
代理服務器掛了,能不能臨時忽略它,直接連接網絡?

shExpMatch(str, shexp)
第1個參數str, 待比較的任意字符串,一般是url或者host
第2個參數shexp是shell表達式,隨意可以有*號通配符

isPlainHostName(host)
如果host是不含有”.”, 說明是一個主機名, 就返回true;
如果有點號,說明是一個域名, 返回false
host是從URL中分離出來的主機名(不包括端口號)

isInNet(host_or_ip, pattern, mask)
這個函數將會考察第1個參數 ip地址 (如果傳入的參數是主機名,會被自動轉換為ip地址)
看它是否在 第2個參數pattern 和 第3個參數 mask 決定的子網絡范圍內

例如

if (isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0"))return "DIRECT";if (isInNet(myIpAddress(), "10.10.1.0", "255.255.255.0"))return "PROXY 10.10.5.1:8080";

其中myIpAddress() 返回 瀏覽器所在的主機的當前IP地址, 很多時候這是個局域網地址

dnsResolve(host) 將host解析為ip地址

var resolved_ip = dnsResolve(host); 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";這段必須用上啊

dnsDomainIs(host, domain)

if (dnsDomainIs(host, ".google.com"))return "DIRECT";
其中host是從URL分離出來的主機名

localHostOrDomainIs(host, hostdom)

if (localHostOrDomainIs(host, "www.google.com"))return "DIRECT";

hostdom 是 域名全稱
host 既可以是 域名,也可以是 簡短主機名
如果是域名,必須完全同 hostdom 匹配
如果是主機名,必須同 hostdom的主機名 要完全匹配

isResolvable(host)

dnsResolve(host)

dnsDomainLevels(host)

dnsDomainLevels("www") 返回 0dnsDomainLevels("www.netscape.com") 返回 2
調試是個大問題

PAC是一個javascript腳本,瀏覽器在每次請求一個URL之前,都會運行它
但它和普通的js腳本有點不同

1)在PAC中,有個幾個特殊的函數,它只能在PAC運行,在普通的js腳本運行會報告
“is not defined”
比如 shExpMatch

2)PAC的執行,也不支持js的所有特性.

3)在不同的瀏覽器中,對pac腳本的執行有著不同的實現方式.
可以用Firefox的錯誤控制臺來查看錯誤信息
IE也支持alert()
并且 pac文件可以存在于本地文件系統
用 file:///var/run/x.pac 這樣的路徑
而不要用 http ,方便調試

function FindProxyForURL(url, host){if (isPlainHostName(host) || dnsDomainIs(host, ".mydomain.com"))return "DIRECT";else if (shExpMatch(host, "*.com"))return "PROXY proxy1.mydomain.com:8080; " +"PROXY proxy4.mydomain.com:8080";else if (shExpMatch(host, "*.edu"))return "PROXY proxy2.mydomain.com:8080; " +"PROXY proxy4.mydomain.com:8080";elsereturn "PROXY proxy3.mydomain.com:8080; " +"PROXY proxy4.mydomain.com:8080";}
我的最終版本

function FindProxyForURL(url, host) {url = url.toLowerCase();host = host.toLowerCase();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";if (shExpMatch(url,"*twitter*") ||shExpMatch(url,"*facebook*") ||shExpMatch(url,"*blogspot*") ||shExpMatch(url,"*youtube*") ||){return "SOCKS 1.2.3.4:1080; DIRECT";} }

Chrome在Linux下沒有代理配置界面,但可以通過命令行參數配置

--proxy-server=host:port --no-proxy-server --proxy-auto-detect --proxy-pac-url=URL pac就用 --proxy-pac-url=file:///var/run/autoproxy.pac
新的瀏覽器支持正則表達式
如果需要做一些較為復雜的判斷,那可直接拋棄 shExpMatch 函數,而自己使用正則表達式或別的工具來進行判斷,如:

var regexpr = /[a-zA-Z]{4}.microsoft.com/;if(regexpr.test(host))return "PROXY w3proxy:8080; DIRECT";
調試,使用alert,在IE上沒問題

function isMatchProxy(url, pattern) {try {return new RegExp(pattern.replace('.', '.')).test(url);} catch (e) {return false;} }function FindProxyForURL(url, host) {debugPAC ="PAC Debug Informationn";debugPAC +="-----------------------------------n";debugPAC +="Machine IP: " + myIpAddress() + "n";debugPAC +="Hostname: " + host + "n";if (isResolvable(host)) {resolvableHost = "True"} else {resolvableHost = "False"};debugPAC += "Host Resolvable: " + resolvableHost + "n";debugPAC += "Hostname IP: " + dnsResolve(host) + "n";if (isPlainHostName(host)) {plainHost = "True"} else {plainHost = "False"};debugPAC += "Plain Hostname: " + plainHost + "n";debugPAC += "Domain Levels: " + dnsDomainLevels(host) + "n";debugPAC += "URL: " + url + "n";alert(debugPAC);var Proxy = 'SOCKS 1.2.3.4:9625; DIRECT';var list = ['t.co','twitter.com','twimg.com','posterous.com','tinypic.com','twitpic.com','bitly.com','yfrog.com','youtube.com','facebook.com','appspot.com','dropbox.com','flickr.com','youtube.com','ytimg.com','plus.google.com','ggpht.com','talkgadget.google.com','picasaweb.google.com','googleusercontent.com','hzmangel.info','slideshare.net','code.google.com','golang.org','vimeo.com','wordpress.com','dxtl.net','123cha.com'];for(var i=0, l=list.length; i<l; i++) {if (isMatchProxy(url, list[i])) {alert("Match");return Proxy;}}alert("direct");return 'DIRECT'; }
在PAC中,Firefox和Internet Explore都支持alert語句,IE的表現同普通js一樣
Firefox是在  ”瀏覽器控制臺”(Ctrl+Shift+J快捷鍵調出來) JS標簽 里顯示出來

[21:32:29.568] PAC-alert: PAC Debug Information———————————–Machine IP: 192.168.1.99Hostname: zhiwei.liHost Resolvable: TrueHostname IP: 199.188.204.95Plain Hostname: FalseDomain Levels: 1URL: http://zhiwei.li/
正則表達式的另外一個例子

由于.pac 文件支持整個 JavaScript 語言,可以使用正則表達式對象,并測試方法來測試對照正則表達式的字符串。下面的代碼示例演示如何使用.pac 文件中的正則表達式對象: function FindProxyForURL(url, host) {// For instance, if the server has 4 alphabetic characters,// such as "MSDN", route it through a specific proxy:var regexpr = /[a-zA-Z]{4}.microsoft.com/;if(regexpr.test(host))return "PROXY w3proxy:8080; DIRECT";// Or else connect directly:return "DIRECT"; }
http://technet.microsoft.com/en-us/library/dd361950.aspx (微軟給的例子)

驗證工具
https://code.google.com/p/pacparser/   (支持Python和C)
http://www.jslint.com/ (驗證你的js語法)

Debian Jessie中的IceWeasel 24.1.0 對 PAC的支持有問題,
Windows版本的Firefox 26.0就能很好的支持
解決方法,安裝 擴炸  foxyproxy
xul-ext-foxyproxy-standard 或者從mozilla addons下載

SOCKS SOCKS4 SOCKS5的問題

“SOCKS host:port”
有的瀏覽器使用SOCKS4協議,也支持DNS 解析  (IceWeasel 的代理管理,就是這個做法, 但是SOCKS4實際上是不支持 DNS解析的,socks5服務看到協議版本是4, dns請求是未知的,就會直接關掉連接
所以, 你在 firefox里選中socks4協議,就不要 讓 extensions.foxyproxy.socks_remote_dns 這個選項為true
但是,如果不做遠程dns的話,偉/大的-城_墻 會污染DNS)

有的瀏覽器使用SOCKS4協議,但不支持 DNS解析
有的瀏覽器直接使用SOCKS5協議,當然就支持 DNS解析了 (foxyProxy擴展,看到 SOCKS,就直接用SOCKS5了,相當聰明)

“SOCKS5 host:port”   明確說明要用 SOCKS5 代理
據說 Safari (OSX, iOS)只認識SOCKS,雖然它默認也是使用SOCKS5協議

SOCKS5 127.0.0.1:1080; SOCKS 127.0.0.1:1080; DIRECT
這種寫法可以兼容絕大數瀏覽器
對于不認識的SOCKS5,丟掉,認識的SOCKS直接用



轉載來源:http://zhiwei.li/text/2015/08/16/用代理自動配置文件pac給iphone和ipad設備添加socks代理/

總結

以上是生活随笔為你收集整理的ios设备使用socks代理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。