前言
前段時間做某個項目,由於涉及到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 <asche910@gmail.com>
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, 還望大家多多支持!
