Netcat 或者叫 nc 是(shì) Linux 下(xià)的(deγ↔π)一(yī)個(gè)用(yòng)于調試和(hé)檢查網絡工(gōnεg)具包。可(kě)用(yòng)于創建 TCP/IP 連β©±σ接,最大(dà)的(de)用(yòng)途就(jiù)是(↕α§&shì)用(yòng)來(lái)處理(lǐ) T♠±←CP/UDP 套接字。
這(zhè)裡(lǐ)我們将通(tōng)過一(♠yī)些(xiē)實例來(lái)學習(↔¥♠xí) netcat 命令。
netcat 工(gōng)具可(kě)運行(xíng)于服務器(q £ì)模式,偵聽(tīng)指定端口
$ nc -l 2389
netcat 工(gōng)具還(háiφ )可(kě)用(yòng)來(lái)傳輸文(wén)件(jiàn),在客₽'戶端,假設我們有(yǒu)一(yī)個(gè) testfile 文(wé•λn)件(jiàn):
$ cat testfilehello oschina
而在服務器(qì)端有(yǒu)一(yī)個(gè)空(↕≤$✔kōng)文(wén)件(jiàn)名為(wèγ i) test
然後我們使用(yòng)如(rú)下(xià)命令來(lái)啓用(yòng↑ )服務器(qì)端:
$ nc -l 2389 > test
緊接著(zhe)運行(xíng)客戶端:
cat testfile | nc localhost 2389
然後你(nǐ)停止服務器(qì)端,你(nǐ)♥δδ可(kě)以查看(kàn) test 內(nèi)容就(jiù ≠Ωε)是(shì)剛才客戶端傳過來(lái)的(de) testfil♠¶e 文(wén)件(jiàn)的(de)內(nèi)容:
$ cat testhello oschina
多(duō)數(shù)情況我們不(bù)希÷★望連接一(yī)直保持,那(nà)麽我們可(kě)以使用(yò$£ng) -w 參數(shù)來(lái)指定連接的(deφ<φ)空(kōng)閑超時(shí)時(shí) ♥間(jiān),該參數(shù)緊接一(yī)個(gè)數(sh∑×π✔ù)值,代表秒(miǎo)數(shù),如(rú)果連接超過指 γ定時(shí)間(jiān)則連接會(huì)被終止。
服務器(qì):
nc -l 2389
客戶端:
$ nc -w 10 localhost 2389
該連接将在 10 秒(miǎo)後中斷。
注意: 不(bù)要(yào)在服務器(qì)端同時(s< ♠↓hí)使用(yòng) -w 和(hé) -l 參數ε↔←≠(shù),因為(wèi) -w 參數(>↕₽shù)将在服務器(qì)端無效果。
然後你(nǐ)可(kě)以使用(yòng)客戶端模式來(lá∏♠λi)連接到(dào) 2389 端口:
$ nc localhost 2389
現(xiàn)在如(rú)果你(nǐ)輸入一₩λ•∞(yī)些(xiē)文(wén)本,它将被發送到(dào)服務器(q∞♠♠ì)端:
$ nc localhost 2389HI, oschina
在服務器(qì)的(de)終端窗(chuā×♠<€ng)口将會(huì)顯示下(xià)面內(nèi)容:
$ nc -l 2389HI, oschina
netcat 的(de) -4 和(hé) -6 參數(shù)用(yòng♦∑)來(lái)指定 IP 地(dì)址類型,分(fēn)别是(shì) IPv↔↔♥4 和(hé) IPv6:
服務器(qì)端:
$ nc -4 -l 2389
客戶端:
$ nc -4 localhost 2389
然後我們可(kě)以使用(yòng) netstat β₹命令來(lái)查看(kàn)網絡的(de)情況:
$ netstat | grep 2389tcp 0 λφ® 0 localhost:2389 π•∑₹ localhost:50851 ESTABLISHED tεcp 0 0 localhost:50851 ←™α localhost:238•★ 9 ESTABLISHED
接下(xià)來(lái)我們看(kàn)看(kàn)IPv↑ σ6 的(de)情況:
服務器(qì)端:
$ nc -6 -l 2389
客戶端:
$ nc -6 localhost 238£9
再次運行(xíng) netstat 命令:
$ netstat | grep 2389tcp6 0 €↑ 0 localhost:2389 ≈↔ localhost:33234 ©↑♣ ESTABLISHED tcp6 0 £✘✘← 0 localhost:33234 l< ocalhost:2389 ESTABLISHED
前綴是(shì) tcp6 表示使用(y€→✔òng)的(de)是(shì) IPv6 的(de)地(dì)址。∑λ
該功能(néng)使用(yòng) -d 參數(sh∏ βù),請(qǐng)看(kàn)下(xià)面例子(zǐ£∏>→):
服務器(qì)端:
$ nc -l 2389
客戶端:
$ nc -d localhost 2389Hi
你(nǐ)輸入的(de) Hi 文(wén)本并不(bù)會 ∏δ(huì)送到(dào)服務器(qì)端。
如(rú)果連接到(dào)服務器(qì)的(deε≤€)客戶端斷開(kāi)連接,那(nà)麽服務器(qì)端也(®✘yě)會(huì)跟著(zhe)退出。
服務器(qì)端:
$ nc -l 2389
客戶端:
$ nc localhost 2389^C
服務器(qì)端:
$ nc -l 2389$
上(shàng)述例子(zǐ)中,但(dàn)客戶端斷開(kāiσ>£)時(shí)服務器(qì)端也(yě)立即退出。
我們可(kě)以通(tōng)過 -k 參數(shù)來(lái)∏£δ 控制(zhì)讓服務器(qì)不(bù)會♥(huì)因為(wèi)客戶端的(de)斷開(kāi)連接而退出π $↕。
服務器(qì)端:
$ nc -k -l 2389
客戶端:
$ nc localhost 2389^C
服務器(qì)端:
$ nc -k -l 2389
Netcat 客戶端可(kě)以通(tōng)過 -q 參✘¶ 數(shù)來(lái)控制(zhì)接收到(d≤ε€λào) EOF 後隔多(duō)長(chán©&→₩g)時(shí)間(jiān)才退出,該參數(↓λδshù)的(de)單位是(shì)秒(miǎo):
客戶端使用(yòng)如(rú)下(xià)方式啓動:
nc -q 5 localhost 2389
現(xiàn)在如(rú)果客戶端接收到(dào) EOF ,它将等待 5γ♥ 秒(miǎo)後退出。
8. 使用(yòng) Netcat 來(lái)處理(&≤lǐ) UDP 協議(yì)
netcat 默認是(shì)使用(yòng) TCP 協λ ₩↑議(yì),但(dàn)也(yě)支持 UDP,可(kě)使用(yòn₹₽g) -u 參數(shù)來(lái)啓用α&☆♣(yòng) UDP 協議(yì)通(tōng)訊。
服務器(qì)端:
$ nc -4 -u -l 2389
客戶端:
$ nc -4 -u localhost 2389
這(zhè)樣客戶端和(hé)服務器(qì)端都(dōu)使用₽₹(yòng)了(le) UDP 協議(yì),可(kě)通(tōn↕€'¶g)過 netstat 命令來(lái)查看(kàn):
$ netstat | grep 2389udp 0 σ∏>$ 0 localhost:42634 localhost&≈π:2389 ESTABLISHλ ≈ED
英文(wén)原文(wén):8 Practi≠≈ cal Linux Netcat NC Com♦ε¶¶mand Examples
原文(wén):https://www.oschina.net/tra•Ωnslate/nc-command-examples
來(lái)源:開(kāi)源中國(guó♠)
譯者:王振威