一款功能強大的TCP/UDP工具---flynet
前言
前段時間做某個專案,由於涉及到tcp/udp方面的知識比較多,於是就索性趁熱打鐵,寫個工具來強化相關知識。另外由於並非十分擅長Golang,所以也順便再瞭解下Golang吧。
簡介
flynet 是一款Golang語言編寫的命令列工具,目前支援的功能包括:
- Http代理
- 本地Socks5代理
- C/S模式的Socks5代理,支援TCP/UDP方式
- 內網穿透
- ...
專案目前分為clien端和sever端,除http、本地socks5代理兩端都支援外,其餘功能需要兩端配合使用。
使用方式
安裝
Windows、linux使用者可以直接在Releases頁面下載對應的版本即可,其他平臺可自行下載原始碼編譯。
Windows中命令列進入到相應目錄,.\win-client.exe ...
或 .\win-server.exe ...
Linux中同樣的, ./linux-server ...
或./linux-client ...
在下文中皆以server ...
或client ...
表示。
嘗試執行後,如果輸出如下資訊表示成功:
Usage: flynet [options] -M, --mode choose which mode to run. the mode must be one of['http', 'socks5', 'socks5-tcp', 'socks5-udp', 'forward'] -L, --listen choose which port(s) to listen or forward -S, --server the server address client connect to -V, --verbose output detail info -l, --log output detail info to log file -H, --help show detail usage Mail bug reports and suggestions to <[email protected]> or github: https://github.com/asche910/flynet
Http代理
http代理直接在本機上開啟Http代理,client和server都支援,命令如下:
server -M http -L 8848
或
client -M http -L 8848
表示在本機8848埠上開啟了Http代理服務,如果沒有任何資訊輸出則表示啟動成功,畢竟linux的一大哲學就是:
沒有訊息就是好訊息
當然如果還是想看到訊息的話,可以在後面加上 -V
或--verbose
引數,這樣的話就會輸出很多訊息了。或者也可以加上-l
或--log
引數來啟動日誌檔案,會在執行目錄下生成一個 flynet.log
檔案。
本地Socks5代理
本機上開啟socks5代理的話,也是非常簡單的,client和server都支援,命令如下:
server -M socks5 -L 8848
或
client -M socks5 -L 8848
這就表示在本機8848埠上開啟了socks5代理,然後Chrome配合SwitchyOmega就可以很好的上網了。
C/S模式的Socks5代理-TCP
前面的那個是在本地上的socks5代理,這個則是client和server相互配合的socks5代理,並且中間是以tcp協議傳輸。用途的話,自由發揮吧。使用方法如下:
服務端
server -M socks5-tcp -L 8888
客戶端
client -M socks5-tcp -L 8848 -S asche.top:8888
這裡的例子是假設我伺服器域名為 asche.top,然後客戶端在8848埠開啟了socks5代理,然後流量是以TCP的方式轉發到了伺服器的8888埠上,交由伺服器去請求相應的目標網站,再把請求結果返回給客戶端。如果可以,中間流量再進行加密,保證了傳輸的安全性。
C/S模式的Socks5代理-UDP
這個和上面tcp那個非常相似,不同的是這個使用UDP報文進行傳輸。畢竟UDP在某些方面有它自身的優勢,而且某些重要的協議主要使用udp傳輸,比如DNS協議。下面來介紹具體用法:
服務端
server -M socks5-udp -L 53
客戶端
client -M socks5-udp -L 8848 -S asche.top:53
這裡同樣以域名asche.top、埠53為例,客戶端在8848埠開啟了socks5代理,然後所有流量通過udp方式傳輸到服務端的53埠上,服務端收到後解析請求,然後將所有請求發至目標網站,再將結果以udp方式返回到客戶端。同樣的是中間傳輸也進行了加密。
內網穿透
內網穿透,即NAT穿透,網路連線時術語,計算機是區域網內時,外網與內網的計算機節點需要連線通訊,有時就會出現不支援內網穿透。就是說對映埠,能讓外網的電腦找到處於內網的電腦,提高下載速度
簡單點說就是讓外網能夠訪問到內網中的機器。這裡該工具所做的就是將內網的某個埠對映到伺服器的某個埠中去,這樣通過訪問伺服器的某個埠就可以間接的訪問到內網中的埠了。方法如下:
服務端
server -M forward -L 8888 8080
客戶端
server -M forward -L 80 -S asche.top:8888
同樣假設伺服器域名為asche.top, 這樣所完成的就是將客戶端的80埠對映到了服務端的8080埠上,中間的資料傳輸是通過服務端監聽8888來完成的。然後我們訪問asche.top:8080看到的內容應該就是客戶端80埠上的內容了。
結語
專案目前功能也比較侷限,日後應該會加上更多功能。另外地址位於 flynet, 還望大家多多支援!