netcat 常用的幾個命令,可用於建立TCP/UDP連線

lcz393537415發表於2016-10-25

Netcat 或者叫 nc 是 Linux 下的一個用於除錯和檢查網路工具包。可用於建立 TCP/IP 連線,最大的用途就是用來處理 TCP/UDP 套接字。

這裡我們將透過一些例項來學習 netcat 命令。

1. 在伺服器-客戶端架構上使用 Netcat

netcat 工具可執行於伺服器模式,偵聽指定埠

1
$ nc -l 2389

然後你可以使用客戶端模式來連線到 2389 埠:

1
$ nc localhost 2389

現在如果你輸入一些文字,它將被髮送到伺服器端:

1
2
$ nc localhost 2389
HI, oschina

在伺服器的終端視窗將會顯示下面內容:

1
2
$ nc -l 2389
HI, oschina

 

2. 使用 Netcat 來傳輸檔案

netcat 工具還可用來傳輸檔案,在客戶端,假設我們有一個 testfile 檔案:

1
2
$ cat testfile
hello oschina

而在伺服器端有一個空檔名為 test

然後我們使用如下命令來啟用伺服器端:

1
$ nc -l 2389 > test

緊接著執行客戶端:

1
cat testfile | nc localhost 2389

然後你停止伺服器端,你可以檢視 test 內容就是剛才客戶端傳過來的 testfile 檔案的內容:

1
2
$ cat test
hello oschina

 

3. Netcat 支援超時控制

多數情況我們不希望連線一直保持,那麼我們可以使用 -w 引數來指定連線的空閒超時時間,該引數緊接一個數值,代表秒數,如果連線超過指定時間則連線會被終止。

伺服器:

1
nc -l 2389

客戶端:

1
$ nc -w 10 localhost 2389

該連線將在 10 秒後中斷。

注意: 不要在伺服器端同時使用 -w 和 -l 引數,因為 -w 引數將在伺服器端無效果。

4. Netcat 支援 IPv6

netcat 的 -4 和 -6 引數用來指定 IP 地址型別,分別是 IPv4 和 IPv6:

伺服器端:

1
$ nc -4 -l 2389

客戶端:

1
$ nc -4 localhost 2389

然後我們可以使用 netstat 命令來檢視網路的情況:

1
2
3
$ netstat | grep 2389
tcp        0      0 localhost:2389          localhost:50851         ESTABLISHED
tcp        0      0 localhost:50851         localhost:2389          ESTABLISHED

接下來我們看看IPv6 的情況:

伺服器端:

1
$ nc -6 -l 2389

客戶端:

1
$ nc -6 localhost 2389

再次執行 netstat 命令:

1
2
3
$ netstat | grep 2389
tcp6       0      0 localhost:2389          localhost:33234         ESTABLISHED
tcp6       0      0 localhost:33234         localhost:2389          ESTABLISHED

字首是 tcp6 表示使用的是 IPv6 的地址。

 

5. 在 Netcat 中禁止從標準輸入中讀取資料

該功能使用 -d 引數,請看下面例子:

伺服器端:

1
$ nc -l 2389

客戶端:

1
2
$ nc -d localhost 2389
Hi

你輸入的 Hi 文字並不會送到伺服器端。

 

6. 強制 Netcat 伺服器端保持啟動狀態

如果連線到伺服器的客戶端斷開連線,那麼伺服器端也會跟著退出。

伺服器端:

1
$ nc -l 2389

客戶端:

1
2
$ nc localhost 2389
^C

伺服器端:

1
2
$ nc -l 2389
$

上述例子中,但客戶端斷開時伺服器端也立即退出。

我們可以透過 -k 引數來控制讓伺服器不會因為客戶端的斷開連線而退出。

伺服器端:

1
$ nc -k -l 2389

客戶端:

1
2
$ nc localhost 2389
^C

伺服器端:

1
$ nc -k -l 2389

 

7. 配置 Netcat 客戶端不會因為 EOF 而退出

Netcat 客戶端可以透過 -q 引數來控制接收到 EOF 後隔多長時間才退出,該引數的單位是秒:

客戶端使用如下方式啟動:

1
nc  -q 5  localhost 2389

現在如果客戶端接收到 EOF ,它將等待 5 秒後退出。

 

8. 使用 Netcat 來處理 UDP 協議

netcat 預設是使用 TCP 協議,但也支援 UDP,可使用 -u 引數來啟用 UDP 協議通訊。

伺服器端:

1
$ nc -4 -u -l 2389

客戶端:

1
$ nc -4 -u localhost 2389

這樣客戶端和伺服器端都使用了 UDP 協議,可透過 netstat 命令來檢視:

1
2
$ netstat | grep 2389
udp        0      0 localhost:42634         localhost:2389          ESTABLISHED


另外,還有一種方式也可傳送tcp資料:echo "7090909099999993*" > /dev/tcp/10.0.15.218/50000
參考連結:
3

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31347383/viewspace-2127072/,如需轉載,請註明出處,否則將追究法律責任。

相關文章