Netcat 或者叫 nc 是(shì) Linux 下(xià)的(d♦∏e)一(yī)個(gè)用(yòng)于調試和(hé)檢查網φ'絡工(gōng)具包。可(kě)用(yòng)于創建 εTCP/IP 連接,最大(dà)的(de♠"☆)用(yòng)途就(jiù)是(shì)用(yòng)來(lái)¥♦☆處理(lǐ) TCP/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è) tes±↕tfile 文(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 loδ©calhost 2389
然後你(nǐ)停止服務器(qì)端,你(nǐ)可(kě♠λα)以查看(kàn) test 內(nèi)容就(jiù)是(shì)剛才客戶端£$傳過來(lái)的(de) testfile&↔" 文(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ì)端同時(shí)§✘$↔使用(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ì) IPv4 和(hé) IP≈♣v6:
服務器(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☆£σ tcp 0 0 localhost:5085£δ•®1 localhost:2389 ©<≤ ESTABLISHED
接下(xià)來(lái)我們看(kàn)看(kàn)IPv6 £♣α的(de)情況:
服務器(qì)端:
$ nc -6 -l 2389
客戶端:
$ nc -6 localhost 2389
再次運行(xíng) netstat 命令:
$ netstat | grep 2389t ≤±cp6 0 0 localhost:2389 ←₩σ localhost:332ε&34 ESTABLISHED tcp6 &ε♥¥ 0 0 localhost:3₽™₩3234 localhost: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á→♦ng)時(shí)間(jiān)才退出,該參數(shù)的(de$₽©)單位是(shì)秒(miǎo):
客戶端使用(yòng)如(rú)下(xià)方式啓動:
nc -q 5 localhost 23$∑89
現(xiàn)在如(rú)果客戶端接收到 ∏ ≥(dào) EOF ,它将等待 5 秒(miǎo)後退出。
8. 使用(yòng) Netcat 來(lái)處理←(lǐ) UDP 協議(yì)
netcat 默認是(shì)使用(yòn≈"g) TCP 協議(yì),但(dàn)也(yě)支持 UDP,可↕(kě)使用(yòng) -u 參數(shù)來(lái)啓用(yò≠↕π®ng) UDP 協議(yì)通(tōng)訊。
服務器(qì)端:
$ nc -4 -u -l 2389
客戶端:
$ nc -4 -u localhost 2∞¥ 389
這(zhè)樣客戶端和(hé)服務器(qì)端都(dōu)使用' γβ(yòng)了(le) UDP 協議(y δì),可(kě)通(tōng)過 netstat 命令來(lái)查看(kàπγ∏n):
$ netstat | grep 2389udp >♣ 0 0 localhost:42634 l♥ocalhost:2389 ESTABLISHED
英文(wén)原文(wén):8 Practical Li←"nux Netcat NC Command Exampl"→φes
原文(wén):https://www.o✔£₹schina.net/translate/nc-coγ↓mmand-examples
來(lái)源:開(kāi)源中國(guó)
譯者:王振威