1. 程式人生 > >SSH Tunnels & SOCKS 4/5

SSH Tunnels & SOCKS 4/5

SOCKS協議,代理
SOCKS:防火牆安全會話轉換協議 (Socks: Protocol for sessions traversal across firewall securely) SOCKS 協議提供一個框架,為在 TCP 和 UDP 域中的客戶機/伺服器應用程式能更方便安全地使用網路防火牆所提供的服務。這個協議從概念上來講是介於應用層和傳輸層之間的 “中介層(shim-layer)”,因而不提供如傳遞 ICMP 資訊之類的網路層閘道器服務。

SSH 隧道技術:
Local(Outgoing)
Remote(Incoming)
Dynamic(SOCKS4/5)    for 代理

 SOCKS5協議的原理和應用
首先解釋一下為什麼它被稱之為SOCKS。其實該協議設計之初是為了讓有許可權的使用者可以穿過過防火牆的限制,使得高許可權使用者可以訪問一般使用者不能訪問的外部資源。當時設計者考慮到幾乎所有使用TCP/IP通訊的應用軟體都使用socket(套接字,實際上是一組應用程式介面)完成底層的資料通訊。為了方便軟體開發者使用該協議,協議設計者就刻意對應了幾組socket程式設計最經典的操作,並且將協議定名為SOCKS。

最先被廣泛使用的SOCKS協議是其第四版本,就是SOCKS4。IE和一些其他應用程式直接用“Socks”表示SOCKS4協議。該版本支援TCP的connect(作為客戶端連線)和listen(開啟一個監聽埠),不支援UDP協議。SOCKS4A對SOCKS4作了一點增強,即允許客戶端將域名傳送給SOCKS伺服器,讓SOCKS伺服器進行域名解析。

SOCKS5是第五版,相對第四版作了大幅度的增強。首先,它增加了對UDP協議的支援;其次,它可以支援多種使用者身份驗證方式和通訊加密方式;最後,修改了SOCKS伺服器進行域名解析的方法,使其更加優雅。經過這次脫胎換骨的升級,SOCKS5於1996年被IETF確認為標準通訊協議,RFC編號為1928。經過10餘年的時間,大量的網路應用程式都支援SOCKS5代理。

SOCKS5雖然可以支援多種使用者身份驗證方式,但是應用程式真正實現的一般也只有兩種:不驗證和使用者名稱密碼驗證。所以大多數應用程式SOCKS5代理設定也只有使用者名稱/密碼這一種可選驗證方法。另外,儘管從SOCKS4開始,就支援開啟TCP監聽埠,但是直到SOCKS5,也只允許這個埠接收一個客戶端連線。因此網路服務提供者(如http伺服器)不能使用SOCKS。實際上,很多SOCKS伺服器的實現也不支援開啟TCP監聽埠。

由於SOCKS5實際上仍然對應了socket的經典操作,所以有人利用這一點編寫了一種通用軟體,可以讓不支援SOCKS5協議的應用軟體也能通過SOCKS5伺服器進行網路通訊,而應用軟體則對此一無所知。這類軟體最著名的莫過於SocksCap32了,它是Permeo公司(其前身是NEC北美公司的一個部門,而SOCKS最初就是NEC北美公司的工程師開發並維護的)早期推出的一款產品。使用者可以免費使用其試用版。試用版和正式版相比,沒有功能上的限制,只有使用時間的限制。但是到目前為止,Permeo總是會在老版本到期之前推出一個延後了期限的“新”版本,所以使用者實際上可以免費使用。SocksCap32是利用API鉤子,截獲應用軟體對socket函式的呼叫來實現對SOCKS5客戶端的模擬。儘管SocksCap32很有名,但是由於推出的時間較早,對很多現代應用軟體時常表現的力不從心,所以Permeo又提供了Permeo Security Driver(以下稱為PSD)。這款產品使用了驅動技術從底層直接截獲應用軟體的socket通訊,因此幾乎可以為所有應用軟體提供SOCKS5客戶端的支援。PSD不提供試用版,但是可以找到其早期版本的註冊碼。

雖然說設計SOCKS協議的初衷是在保證網路隔離的情況下,提高部分人員的網路訪問許可權,但是國內似乎很少有組織機構這樣使用。一般情況下,大家都會使用更新的網路安全技術來達到相同的目的。但是由於SocksCap32和PSD這類軟體,人們找到了SOCKS協議新的用途——突破網路通訊限制,這和該協議的初衷實際上正好相反。比如某些網遊的部分伺服器設定為只接收部分地區的IP地址的連線。為了突破這種限制,可以找一個該地區的SOCKS5代理伺服器,然後用PSD接管網遊客戶端,通過SOCKS5代理伺服器連線遊戲伺服器。這樣遊戲伺服器就會認為該客戶端位於本地區,從而允許進行遊戲。還有一種情況是:防火牆僅允許部分埠(如http的80埠)通訊,那麼可以利用SOCKS5協議和一個開啟80埠監聽的SOCKS5伺服器連線,從而可以連線公網上其他埠的伺服器。利用一些額外的技術手段,甚至可以騙過內部的http代理伺服器,這時在使用內網http代理上網的環境下也可以不受限制的使用網路服務,這稱之為SOCKS over HTTP。通通通([url]www.tongtongtong.com[/url])是老牌SOCKS over HTTP代理提供商,實現了所有的SOCKS5的連線功能,且有多組國內外伺服器。信天游([url]www.xtyproxy.com[/url]),則是最近剛剛出現的代理服務提供商,功能和通通通相比還有差距,但是目前完全免費。當然,使用代理伺服器後,將不可避免的出現通訊延遲,所以應該儘量選擇同網路(指網通/ 電信),距離近的伺服器。

sock5代理的工作程式是:
1.需要向代理方伺服器發出請求資訊。
2.代理方應答
3.需要代理方接到應答後傳送向代理方傳送目的ip和埠
4.代理方與目的連線
5.代理方將需要代理方發出的資訊傳到目的方,將目的方發出的資訊傳到需要代理方。代理完成。
由於網上的資訊傳輸都是運用tcp或udp進行的,所以使用socks5代理可以辦到網上所能辦到的一切,而且不輿目的方會查到你的ip,既安全又方
便 sock5支援UDP和TCP,但兩種代理是有區別的,以下分類說明
如何用代理TCP協議
1.向伺服器的1080埠建立tcp連線。
2.向伺服器傳送 05 01 00 (此為16進位制碼,以下同)
3.如果接到 05 00 則是可以代理
4.傳送 05 01 00 01 + 目的地址(4位元組) + 目的埠(2位元組),目的地址和埠都是16進位制碼(不是字串!!)。 例202.103.190.27 -7201 則傳送的資訊為:05 01 00 01 CA 67 BE 1B 1C 21 (CA=202 67=103 BE=190 1B=27 1C21=7201)
5.接受伺服器返回的自身地址和埠,連線完成
6.以後操作和直接與目的方進行TCP連線相同。
如何用代理UDP連線
1.向伺服器的1080埠建立udp連線
2.向伺服器傳送 05 01 00
3.如果接到 05 00 則是可以代理
4.傳送 05 03 00 01 00 00 00 00 + 本地UDP埠(2位元組)
5.伺服器返回 05 00 00 01 +伺服器地址+埠
6.需要申請方傳送 00 00 00 01 +目的地址IP(4位元組)+目的埠 +所要傳送的資訊
7.當有資料報返回時 向需要代理方發出00 00 00 01 +來源地址IP(4位元組)+來源埠 +接受的資訊
注:此為不需要密碼的代理協議,只是socks5的一部分,完整協議請RFC1928