最近在學習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
參考文檔鏈接: