Linux 命令(138) nc 命令

2021-10-04 10:09:10 字數 4196 閱讀 4629

nc(netcat)是乙個短小精悍、功能實用、簡單可靠的網路工具,主要有如下作用:

(1)埠偵聽,nc 可以作為 server 以 tcp 或 udp 方式偵聽指定埠;

(2)埠掃瞄,nc 可以作為 client 發起 tcp 或 udp 請求;

(3)機器之間傳輸檔案;

(4)機器之間網路測速。

nmap 是

nc [-46ddhklnrstuuvzc] [-i interval] [-p source_port] [-s source_ip_address] [-t tos] [-w timeout] [-x proxy_protocol] [-x proxy_address[:port]] [hostname] [port[s]]
-4/6

強制只使用 ipv4/ipv6 位址

-d 在套接字上啟用除錯

-d 不從 stdin 讀取

-h 列印出幫助資訊

-k 強制 nc 在當前連線完成後繼續偵聽另乙個連線。注意如果不使用 -l 選項,則使用此選項是錯誤的

-l 指定 nc 應該偵聽傳入的連線,而不是啟動到遠端主機的連線。將此選項與 -p、-s 或 -z 選項結合使用是錯誤的。此外,使用 -w 選項指定的超時將被忽略

-n 不要在任何指定的位址、主機名或埠上執行任何 dns 或服務查詢

-r 隨機選擇源埠和目標埠,而不是按照系統分配的順序或範圍內的順序選擇它們

-s 啟用 rfc 2385 tcp md5 簽名選項

-t 使 nc 傳送 rfc 854 don't 和 won't 響應 rfc 854 的 do 和 will 請求。這使得使用 nc 編寫 telnet 會話指令碼成為可能

-u 指定使用 unix 域套接字

-u 使用 udp 代替預設選項 tcp

-v 顯示命令執行過程

-z 表示 zero,只掃瞄偵聽守護程序,而不向它們傳送任何資料。此選項與 -l 選項結合使用是錯誤的

-c 傳送 crlf 作為換行符

-i interval

指定傳送和接收的文字之間的延遲時間間隔。還可指定連線到多個埠之間的延遲時間

-p source_port

指定 nc 應使用的源埠,但須受特權限制和可用性限制。將此選項與 -l 選項結合使用是錯誤的

-s source_ip_address

設定本地主機送出資料報的 ip 位址。注意將此選項與 -l 選項結合使用是錯誤的

-t tos

指定連線的 ip 服務型別(tos)。有效值是標記 ''lowdelay'', ''throughput'', ''reliability'',或以 0x 開頭的 8 位十六進製制值

-w timeout

如果連線和 stdin 空閒超過指定秒數,則連線將被關閉。-w 標誌對 -l 選項沒有影響。預設不超時

-x proxy_protocol

請求 nc 在與**伺服器對話時使用指定的協議。支援的協議是 「4」(socksv.4)、「5」(sockv.5) 和 「connect」(https proxy)。如果未指定協議,則使用 socks v.5

-x proxy_address[:port]

使用指定**伺服器位址和埠連線到主機。如果未指定埠,則使用**協議的已知埠(socks為1080,https為3128)

nc 的控制引數不少,常用的幾個引數如下所列:

-l

指定 nc 將處於偵聽模式。指定該引數,則意味著 nc 被當作 server,偵聽並接受連線,而非向其它位址發起連線

-p port

指定 nc 使用的源埠

-s 指定傳送資料的源 ip 位址,適用於多網絡卡機器

-u 指定 nc 使用 udp 協議,預設為 tcp

-v 輸出互動或出錯資訊,新手除錯時尤為有用

-w 超時秒數,後面跟數字

-z 表示 zero,掃瞄時不傳送任何資料

(1)通過 ll 命令檢視 nc 命令。

lrwxrwxrwx 1 root root 4 aug 30 22:33 /usr/bin/nc -> ncat
(2)監聽本地埠。

假設在當前命令列終端 a 進行監聽。

nc -vl 8888

ncat: version 6.40 ( )

ncat: listening on :::8888

ncat: listening on 0.0.0.0:8888

開啟另外乙個命令列終端 b,同樣使用 nc 發起連線。

nc -v 127.0.0.1 8888
另乙個終端 a 將會收到請求並列印連線資訊:

ncat: connection from 127.0.0.1.

ncat: connection from 127.0.0.1:37229.

如果在終端 b 輸入內容,那麼終端 a 將收到終端 b 傳送的內容並列印到標準輸出。

(3)利用 nc 之間的連線進行檔案傳輸。

使用 nc 傳輸檔案還是比較方便的,因為不用 scp 和 rsync 那種輸入密碼的操作了。把 a 機器上的乙個文字檔案傳送到 b 機器上

需注意操作次序,receiver 先偵聽埠,sender 向 receiver 所在機器的該埠傳送資料。

receiver:

nc -l 8888 > received.txt
sender:

nc 127.0.0.1 8888 < file.txt
receiver 接收完畢,會自動退出監聽。接收檔案與原檔案 md5 值相同,表示檔案接收成功。

md5sum file.txt

8f6aab448ec32637b84c3484a1a44e0b file.txt

md5sum received.txt

8f6aab448ec32637b84c3484a1a44e0b received.txt

(4)利用 nc 傳輸目錄。

傳送目錄與傳送檔案類似,只不過是利用 tar 先將目錄打包成乙個檔案,然後傳送。接收方再利用 tar 進行解壓縮還原為目錄。

receiver:

nc -l 8888 | tar -xzvf -
sender:

tar -czvf - dir_name | nc 127.0.0.1 8888
注意,tar -f 選項後跟橫槓 - 表示從標準輸入讀取或將結果輸出到標準輸出。

(5)測試網速。

測試網速其實利用了傳輸檔案的原理,就是把來自一台機器的 /dev/zero 傳送給另一台機器的 /dev/null

就是把一台機器的無限個 0,傳輸給另乙個機器的空裝置上,然後新開乙個視窗使用 dstat 命令監測網速

在這之前需要保證機器先安裝 dstat 工具。

yum install -y dstat
第 1 步,在 a 機器先啟動接收資料的命令,監聽自己的 8888 埠,把來自這個埠的資料都輸出給空裝置(這樣不寫磁碟,測試網速更準確)。

nc -l 8888 > /dev/null
第 2 步,在 b 機器傳送資料,把無限個 0 傳送給 a 機器的 8888 埠。

nc 10.0.1.161 8888 < /dev/zero
在 a 機器新的視窗上使用 dstat 命令檢視當前網速。dstat 命令比較直觀,它可以檢視當前 cpu,磁碟,網路,記憶體頁和系統的一些當前狀態指標。我們只需要關注 recv 和 send 兩列,分別表示接收和傳送的資料,另外注意數字後面的單位 b,kb,mb。

使用 nc 測試網速時,如果是在同一臺機器傳送資料,即:

nc 127.0.0.1 8888 < /dev/zero
[1] nc(1) manual

[2] .nc命令用法舉例

[3] .nc 命令使用詳解

Linux命令手冊 nc

nc 任意tcp和udp連線和監聽 nc 46ddhklnrstuuvzc i interval p source port s source ip address t tos w timeout x proxy protocol x proxy address port hostname port...

Linux基礎程式設計 nc命令

5.7 使用nc傳輸檔案 5.8 設定本地埠連線伺服器 5.9 模擬http協議首部 5.10 掃瞄80埠 5.11 掃瞄udp埠 5.12 掃瞄tcp埠 5.13 傳輸目錄 06.命令總結 nc是netcat的簡寫,有著網路界的瑞士軍刀美譽。因為它短小精悍 功能實用,被設計為乙個簡單 可靠的網路工...

nc 監聽資料 linux包之nc之nc命令

nc 1.84 22.el6.x86 64 不用系統上提供的nc版本會有所不同,其提供的引數使用方法也略有差異 nc v w 1 192.168.2.10 z 1 65535 grep succeeded 埠掃瞄 1.4 強制使用ipv4 2.6 強制使用ipv6 3.d 允許socket通訊返回d...