socks代理是什么意思啊?
SOCKS:防火墻安全會(huì)話轉(zhuǎn)換協(xié)議 ,SOCKS 協(xié)議提供一個(gè)框架,為在 TCP 和 UDP 域中的客戶機(jī)/服務(wù)器應(yīng)用程序能更方便安全地使用網(wǎng)絡(luò)防火墻所提供的服務(wù);
socks代理是一種全能代理,就像有很多跳線的轉(zhuǎn)接板,只是簡(jiǎn)單地將一端的系統(tǒng)連接到另外一端,支持多種協(xié)議,包括http、ftp請(qǐng)求及其它類型的請(qǐng)求;
socks代理分socks 4 和socks 5兩種類型,socks 4只支持TCP協(xié)議而socks 5支持TCP/UDP協(xié)議,還支持各種身份驗(yàn)證機(jī)制等協(xié)議,其標(biāo)準(zhǔn)端口為1080。
SOCKS4、SOCKS5和HTTP代理,這幾種網(wǎng)絡(luò)代理方式有什么區(qū)別?
SOCKS4、SOCKS5和HTTP代理區(qū)別為:速度不同、支持協(xié)議不同、驗(yàn)證機(jī)制不同。
一、速度不同
1、SOCKS4代理:SOCKS4代理只是簡(jiǎn)單地傳遞數(shù)據(jù)包,所以SOCKS代理服務(wù)器比HTTP代理服務(wù)器速度要快得多。
2、SOCKS5代理:SOCKS5代理只是簡(jiǎn)單地傳遞數(shù)據(jù)包,所以SOCKS代理服務(wù)器比HTTP代理服務(wù)器速度要快得多。
3、HTTP代理:HTTP代理在傳遞數(shù)據(jù)包的同時(shí)要,驗(yàn)證是何種應(yīng)用協(xié)議,所以HTTP代理服務(wù)器比SOCKS代理服務(wù)器速度要慢得多。
二、支持協(xié)議不同
1、SOCKS4代理:SOCKS4代理只支持TCP協(xié)議。
2、SOCKS5:SOCKS5既支持TCP協(xié)議又支持UDP協(xié)議。
3、HTTP代理:HTTP代理支持HTTP協(xié)議、FTP協(xié)議、TCP協(xié)議、UDP協(xié)議等多種應(yīng)用協(xié)議。
三、驗(yàn)證機(jī)制不同
1、SOCKS4代理:SOCKS4代理不支持身份驗(yàn)證機(jī)制、服務(wù)器端域名解析。
2、SOCKS5代理:SOCKS5代理支持各種身份驗(yàn)證機(jī)制、服務(wù)器端域名解析。
3、HTTP代理:HTTP代理支持各種身份驗(yàn)證機(jī)制、服務(wù)器端域名解析
SOCKS4和SOCKS5的區(qū)別
OkHttp源碼解析 (三)——代理和路由
初看OkHttp源碼,由于對(duì)Address、Route、Proxy、ProxySelector、RouteSelector等理解不夠,讀源碼非常吃力,看了幾遍依然對(duì)于尋找復(fù)用連接、創(chuàng)建連接、連接服務(wù)器、連接代理服務(wù)器、創(chuàng)建隧道連接等邏輯似懂非懂,本篇決定梳理一遍相關(guān)的概念及基本原理。
● HTTP/1.1(HTTPS)
● HTTP/2
● SPDY
一個(gè)http請(qǐng)求的流程(直連):
1、輸入url及參數(shù);
2、如果是url是域名則解析ip地址,可能對(duì)應(yīng)多個(gè)ip,如果沒(méi)有指定端口,則用默認(rèn)端口,http請(qǐng)求用80;
3、創(chuàng)建socket,根據(jù)ip和端口連接服務(wù)器(socket內(nèi)部會(huì)完成3次TCP握手);
4、socket成功連接后,發(fā)送http報(bào)文數(shù)據(jù)。
一個(gè)https請(qǐng)求的流程(直連):
1、輸入url及參數(shù);
2、如果是url是域名則解析ip地址,可能對(duì)應(yīng)多個(gè)ip,如果沒(méi)有指定端口,則用默認(rèn)端口,https請(qǐng)求用443;
3、創(chuàng)建socket,根據(jù)ip和端口連接服務(wù)器(socket內(nèi)部會(huì)完成3次TCP握手);
4、socket成功連接后進(jìn)行TLS握手,可通過(guò)java標(biāo)準(zhǔn)款提供的SSLSocket完成;
5、握手成功后,發(fā)送https報(bào)文數(shù)據(jù)。
1、分類
● HTTP代理:普通代理、隧道代理
● SOCKS代理:SOCKS4、SOCKS5
2、HTTP代理分類及說(shuō)明
普通代理
HTTP/1.1 協(xié)議的第一部分。其代理過(guò)程為:
● client 請(qǐng)求 proxy
● proxy 解析請(qǐng)求獲取 origin rver 地址
● proxy 向 origin rver 轉(zhuǎn)發(fā)請(qǐng)求
● proxy 接收 origin rver 的響應(yīng)
● proxy 向 client 轉(zhuǎn)發(fā)響應(yīng)
其中proxy獲取目的服務(wù)器地址的標(biāo)準(zhǔn)方法是解析 request line 里的 request-URL。因?yàn)閜roxy需要解析報(bào)文,因此普通代理無(wú)法適用于https,因?yàn)閳?bào)文都是加密的。
隧道代理
通過(guò) Web 代理服務(wù)器用隧道方式傳輸基于 TCP 的協(xié)議。
請(qǐng)求包括兩個(gè)階段,一是連接(隧道)建立階段,二是數(shù)據(jù)通信(請(qǐng)求響應(yīng))階段,數(shù)據(jù)通信是基于 TCP packet ,代理服務(wù)器不會(huì)對(duì)請(qǐng)求及響應(yīng)的報(bào)文作任何的處理,都是原封不動(dòng)的轉(zhuǎn)發(fā),因此可以代理 HTTPS請(qǐng)求和響應(yīng)。
代理過(guò)程為:
● client 向 proxy 發(fā)送 CONNET 請(qǐng)求(包含了 origin rver 的地址)
● proxy 與 origin rver 建立 TCP 連接
● proxy 向 client 發(fā)送響應(yīng)
● client 向 proxy 發(fā)送請(qǐng)求,proxy 原封不動(dòng)向 origin rver 轉(zhuǎn)發(fā)請(qǐng)求,請(qǐng)求數(shù)據(jù)不做任何封裝,為原生 TCP packet.
3、SOCKS代理分類及說(shuō)明
● SOCKS4:只支持TCP協(xié)議(即傳輸控制協(xié)議)
● SOCKS5: 既支持TCP協(xié)議又支持UDP協(xié)議(即用戶數(shù)據(jù)包協(xié)議),還支持各種身份驗(yàn)證機(jī)制、服務(wù)器端域名解析等。
SOCK4能做到的SOCKS5都可得到,但反過(guò)來(lái)卻不行,比如我們常用的聊天工具QQ在使用代理時(shí)就要求用SOCKS5代理,因?yàn)樗枰褂肬DP協(xié)議來(lái)傳輸數(shù)據(jù)。
有了上面的基礎(chǔ)知識(shí),下面分析結(jié)合源碼分析OkHttp路由相關(guān)的邏輯。OkHttp用Address來(lái)描述與目標(biāo)服務(wù)器建立連接的配置信息,但請(qǐng)求輸入的可能是域名,一個(gè)域名可能對(duì)于多個(gè)ip,真正建立連接是其中一個(gè)ip,另外,如果設(shè)置了代理,客戶端是與代理服務(wù)器建立直接連接,而不是目標(biāo)服務(wù)器,代理又可能是域名,可能對(duì)應(yīng)多個(gè)ip。因此,這里用Route來(lái)描述最終選擇的路由,即客戶端與哪個(gè)ip建立連接,是代理還是直連。下面對(duì)比下Address及Route的屬性,及路由選擇器RouteSelector。
描述與目標(biāo)服務(wù)器建立連接所需要的配置信息,包括目標(biāo)主機(jī)名、端口、dns,SocketFactory,如果是https請(qǐng)求,包括TLS相關(guān)的SSLSocketFactory 、HostnameVerifier 、CertificatePinner,代理服務(wù)器信息Proxy 、ProxySelector 。
Route提供了真正連接服務(wù)器所需要的動(dòng)態(tài)信息,明確需要連接的服務(wù)器IP地址及代理服務(wù)器,一個(gè)Address可能會(huì)有很多個(gè)路由Route供選擇(一個(gè)DNS對(duì)應(yīng)對(duì)個(gè)IP)。
Address和Route都是數(shù)據(jù)對(duì)象,沒(méi)有提供操作方法,OkHttp另外定義了RouteSelector來(lái)完成選擇的路由的操作。
1、讀取代理配置信息:retNextProxy()
讀取代理配置:
● 如果有指定代理(不讀取系統(tǒng)配置,在OkHttpClient實(shí)例中指定),則只用1個(gè)該指定代理;
● 如果沒(méi)有指定,則讀取系統(tǒng)配置的,可能有多個(gè)。
2、獲取需要嘗試的socket地址(目標(biāo)服務(wù)器或者代理服務(wù)器):retNextInetSocketAddress()
結(jié)合Address的host和代理,解析要嘗試的套接字地址(ip+端口)列表:
● 直連或者SOCK代理, 則用目標(biāo)服務(wù)器的主機(jī)名和端口,如果是HTTP代理,則用代理服務(wù)器的主機(jī)名和端口;
● 如果是SOCK代理,根據(jù)目標(biāo)服務(wù)器主機(jī)名和端口號(hào)創(chuàng)建未解析的套接字地址,列表只有1個(gè)地址;
● 如果是直連或HTTP代理,先DNS解析,得到InetAddress列表(沒(méi)有端口),再創(chuàng)建InetSocketAddress列表(帶上端口),InetSocketAddress與InetAddress的區(qū)別是前者帶端口信息。
3、獲取路由列表:next()
選擇路由的流程解析:
● 遍歷每個(gè)代理對(duì)象,可能多個(gè),直連的代理對(duì)象為Proxy.DIRECT(實(shí)際是沒(méi)有中間代理的);
● 對(duì)每個(gè)代理獲取套接字地址列表;
● 遍歷地址列表,創(chuàng)建Route,判斷Route如果在路由黑名單中,則添加到失敗路由列表,不在黑名單中則添加到待返回的Route列表;
● 如果最后待返回的Route列表為空,即可能所有路由都在黑名單中,實(shí)在沒(méi)有新路由了,則將失敗的路由集合返回;
● 傳入Route列表創(chuàng)建Selection對(duì)象,對(duì)象比較簡(jiǎn)單,就是一個(gè)目標(biāo)路由集合,及讀取方法。
為了避免不必要的嘗試,OkHttp會(huì)把連接失敗的路由加入到黑名單中,由RouteDataba管理,該類比較簡(jiǎn)單,就是一個(gè)失敗路由集合。
1、創(chuàng)建Address
Address的創(chuàng)建在RetryAndFollowUpInteceptor里,每次請(qǐng)求會(huì)聲明一個(gè)新的Address及StreamAllocation對(duì)象,而StreamAllocation使用Address創(chuàng)建RouteSelector對(duì)象,在連接時(shí)RouteSelector確定請(qǐng)求的路由。
每個(gè)Requst都會(huì)構(gòu)造一個(gè)Address對(duì)象,構(gòu)造好了Address對(duì)象只是有了與服務(wù)器連接的配置信息,但沒(méi)有確定最終服務(wù)器的ip,也沒(méi)有確定連接的路由。
2、創(chuàng)建RouteSelector
在StreamAllocation聲明的同時(shí)會(huì)聲明路由選擇器RouteSelector,為一次請(qǐng)求尋找路由。
3、選擇可用的路由Route
下面在測(cè)試過(guò)程跟蹤實(shí)例對(duì)象來(lái)理解,分別測(cè)試直連和HTTP代理HTTP2請(qǐng)求路由的選擇過(guò)程:
● 直連請(qǐng)求流程
● HTTP代理HTTPS流程
請(qǐng)求url: https://www.jianshu.com/p/63ba15d8877a
1、構(gòu)造address對(duì)象
2、讀取代理配置:retNextProxy
3、解析目標(biāo)服務(wù)器套接字地址:retNextInetSocketAddress
4、選擇Route創(chuàng)建RealConnection
5、確定協(xié)議
測(cè)試方法:
● 在PC端打開Charles,設(shè)置端口,如何設(shè)置代理,網(wǎng)上有教程,比較簡(jiǎn)單;
● 手機(jī)打開WIFI,選擇連接的WIFI修改網(wǎng)絡(luò),在高級(jí)選項(xiàng)中設(shè)置中指定了代理服務(wù)器,ip為PC的ip,端口是Charles剛設(shè)置的端口;
● OkHttpClient不指定代理,發(fā)起請(qǐng)求。
1、構(gòu)造address對(duì)象
2、讀取代理配置:retNextProxy
3、解析目標(biāo)服務(wù)器套接字地址:retNextInetSocketAddress
4、選擇Route創(chuàng)建RealConnection
5、創(chuàng)建隧道
由于是代理https請(qǐng)求,需要用到隧道代理。
從圖可以看出,建立隧道其實(shí)是發(fā)送CONNECT請(qǐng)求,header包括字段Proxy-Connection,目標(biāo)主機(jī)名,請(qǐng)求內(nèi)容類似:
6、確定協(xié)議,SSL握手
1、代理可分為HTTP代理和SOCK代理;
2、HTTP代理又分為普通代理和隧道代理;普通代理適合明文傳輸,即http請(qǐng)求;隧道代理僅轉(zhuǎn)發(fā)TCP包,適合加密傳輸,即https/http2;
3、SOCK代理又分為SOCK4和SOCK5,區(qū)別是后者支持UDP傳輸,適合代理聊天工具如QQ;
4、沒(méi)有設(shè)置代理(OkHttpClient沒(méi)有指定同時(shí)系統(tǒng)也沒(méi)有設(shè)置),客戶端直接與目標(biāo)服務(wù)器建立TCP連接;
5、設(shè)置了代理,代理http請(qǐng)求時(shí),客戶端與代理服務(wù)器建立TCP連接,如果代理服務(wù)器是域名,則解釋代理服務(wù)器域名,而目標(biāo)服務(wù)器的域名由代理服務(wù)器解析;
6、設(shè)置了代理,代理https/http2請(qǐng)求時(shí),客戶端與代理服務(wù)器建立TCP連接,發(fā)送CONNECT請(qǐng)求與代理服務(wù)器建立隧道,并進(jìn)行SSL握手,代理服務(wù)器不解析數(shù)據(jù),僅轉(zhuǎn)發(fā)TCP數(shù)據(jù)包。
如何正確使用 HTTP proxy
OkHttp3中的代理與路由
HTTP 代理原理及實(shí)現(xiàn)(一)
請(qǐng)問(wèn)SOCKS4是什么意思?
socks4/5和http代理有什么區(qū)別?
本文發(fā)布于:2023-02-28 19:26:00,感謝您對(duì)本站的認(rèn)可!
本文鏈接:http://m.newhan.cn/zhishi/a/167761502762017.html
版權(quán)聲明:本站內(nèi)容均來(lái)自互聯(lián)網(wǎng),僅供演示用,請(qǐng)勿用于商業(yè)和其他非法用途。如果侵犯了您的權(quán)益請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)刪除。
本文word下載地址:socks4代理(socks4代理什么意思).doc
本文 PDF 下載地址:socks4代理(socks4代理什么意思).pdf
| 留言與評(píng)論(共有 0 條評(píng)論) |