Netcat 或者叫 nc 是 Linux 下(xià)的(de)一個(gè)用(yòng)于調試和(hé)檢查網絡工具包。可(kě)用(yòng)于創建 TCP/IP 連接,最大(dà)的(de)用(yòng)途就是用(yòng)來(lái)處理(lǐ) TCP/UDP 套接字。
這(zhè)裏我們将通(tōng)過一些實例來(lái)學習(xí) netcat 命令。
netcat 工具可(kě)運行于服務器模式,偵聽(tīng)指定端口
$ nc -l 2389
netcat 工具還(hái)可(kě)用(yòng)來(lái)傳輸文件,在客戶端,假設我們有一個(gè) testfile 文件:
$ cat testfilehello oschina
而在服務器端有一個(gè)空文件名爲 test
然後我們使用(yòng)如下(xià)命令來(lái)啓用(yòng)服務器端:
$ nc -l 2389 > test
緊接著(zhe)運行客戶端:
cat testfile | nc localhost 2389
然後你停止服務器端,你可(kě)以查看 test 内容就是剛才客戶端傳過來(lái)的(de) testfile 文件的(de)内容:
$ cat testhello oschina
多(duō)數情況我們不希望連接一直保持,那麽我們可(kě)以使用(yòng) -w 參數來(lái)指定連接的(de)空閑超時(shí)時(shí)間,該參數緊接一個(gè)數值,代表秒數,如果連接超過指定時(shí)間則連接會被終止。
服務器:
nc -l 2389
客戶端:
$ nc -w 10 localhost 2389
該連接将在 10 秒後中斷。
注意: 不要在服務器端同時(shí)使用(yòng) -w 和(hé) -l 參數,因爲 -w 參數将在服務器端無效果。
然後你可(kě)以使用(yòng)客戶端模式來(lái)連接到 2389 端口:
$ nc localhost 2389
現在如果你輸入一些文本,它将被發送到服務器端:
$ nc localhost 2389HI, oschina
在服務器的(de)終端窗(chuāng)口将會顯示下(xià)面内容:
$ nc -l 2389HI, oschina
netcat 的(de) -4 和(hé) -6 參數用(yòng)來(lái)指定 IP 地址類型,分(fēn)别是 IPv4 和(hé) IPv6:
服務器端:
$ nc -4 -l 2389
客戶端:
$ nc -4 localhost 2389
然後我們可(kě)以使用(yòng) netstat 命令來(lái)查看網絡的(de)情況:
$ netstat | grep 2389tcp 0 0 localhost:2389 localhost:50851 ESTABLISHED tcp 0 0 localhost:50851 localhost:2389 ESTABLISHED
接下(xià)來(lái)我們看看IPv6 的(de)情況:
服務器端:
$ nc -6 -l 2389
客戶端:
$ nc -6 localhost 2389
再次運行 netstat 命令:
$ netstat | grep 2389tcp6 0 0 localhost:2389 localhost:33234 ESTABLISHED tcp6 0 0 localhost:33234 localhost:2389 ESTABLISHED
前綴是 tcp6 表示使用(yòng)的(de)是 IPv6 的(de)地址。
該功能使用(yòng) -d 參數,請看下(xià)面例子:
服務器端:
$ nc -l 2389
客戶端:
$ nc -d localhost 2389Hi
你輸入的(de) Hi 文本并不會送到服務器端。
如果連接到服務器的(de)客戶端斷開連接,那麽服務器端也(yě)會跟著(zhe)退出。
服務器端:
$ nc -l 2389
客戶端:
$ nc localhost 2389^C
服務器端:
$ nc -l 2389$
上述例子中,但客戶端斷開時(shí)服務器端也(yě)立即退出。
我們可(kě)以通(tōng)過 -k 參數來(lái)控制讓服務器不會因爲客戶端的(de)斷開連接而退出。
服務器端:
$ nc -k -l 2389
客戶端:
$ nc localhost 2389^C
服務器端:
$ nc -k -l 2389
Netcat 客戶端可(kě)以通(tōng)過 -q 參數來(lái)控制接收到 EOF 後隔多(duō)長(cháng)時(shí)間才退出,該參數的(de)單位是秒:
客戶端使用(yòng)如下(xià)方式啓動:
nc -q 5 localhost 2389
現在如果客戶端接收到 EOF ,它将等待 5 秒後退出。
8. 使用(yòng) Netcat 來(lái)處理(lǐ) UDP 協議(yì)
netcat 默認是使用(yòng) TCP 協議(yì),但也(yě)支持 UDP,可(kě)使用(yòng) -u 參數來(lái)啓用(yòng) UDP 協議(yì)通(tōng)訊。
服務器端:
$ nc -4 -u -l 2389
客戶端:
$ nc -4 -u localhost 2389
這(zhè)樣客戶端和(hé)服務器端都使用(yòng)了(le) UDP 協議(yì),可(kě)通(tōng)過 netstat 命令來(lái)查看:
$ netstat | grep 2389udp 0 0 localhost:42634 localhost:2389 ESTABLISHED
英文原文:8 Practical Linux Netcat NC Command Examples
原文:https://www.oschina.net/translate/nc-command-examples
來(lái)源:開源中國
譯者:王振威