1. 程式人生 > >一款功能強大的TCP/UDP工具---flynet

一款功能強大的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, 還望大家多多支援!