java實現shadowsocks客戶端

最近在學習netty的過程中,突然想到之前翻牆一直用的shadowsocks,能不能用netty實現呢?

本文旨在學習netty使用,借鑑了網上大佬的很多用法,文尾有鏈接。

首先來看看爲什麼shadowsocks爲什麼能訪問404旗下的公司吧。

運行流程

下面是網上找的一張流程圖,覺得描述的非常清晰:

這裏可能有點疑問?

爲什麼shadowsocks要這樣使用?爲什麼不直接連到遠程服務器,讓遠程器訪問404旗下的網站呢? 

以前的代理模式之所以不能用,是因爲我們直接連到代理服務器,將我們的請求直接發給代理服務器,在經過土嗇的時候被識別出來,導致失敗。ss啓動便需要在本機和遠程服務器都安裝,在本機將請求加密,服務器再去解密,發送請求,以此繞過土嗇。

netty實現

1.構建服務

添加的三個handler前兩個是socks5請求編碼解碼,是netty支持的,如果不想使用前兩個handler也可以自己去解析socks5,這個需要自己研究下socks5前幾個子節的規則了。

2.實現socks5握手,和本機連接

此過程完成後,便與現在電腦的1080端口建立連接,握手完成。

3.連接遠程服務端

此過程是核心代碼,實現與遠程連接後,向遠程服務器發送數據,並讀服務數據,寫回本地。

3.1新建bootStrap,連接到遠程代理服務器

3.2使用連接後的channel向遠程服務寫出數據,並添加一個handler向遠程服務寫出數據

3.3接受遠程代理服務器傳入數據,在新的bootStrap的組中添加handler向本地寫回數據

4.接收數據handler、寫出數據handler

接受數據,解密寫回,acceptHandler

加密向服務端寫出數據 ,sendHandler

大功告成。

配上socks5的鉤子,測試連接

chorm使用插件,代理到socks5

連接成功 

代碼github鏈接:

https://github.com/TomCosin/netty-shadowsocks

參考文檔鏈接:

https://blog.csdn.net/codingo2016/article/details/52537095

www.nihao001.com/archives/1181.html 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章