偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

運(yùn)維,請(qǐng)收好網(wǎng)絡(luò)工具中的瑞士軍刀,從此故障診斷不用愁!

新聞 系統(tǒng)運(yùn)維
Netcat 號(hào)稱 TCP/IP 的瑞士軍刀并非浪得虛名,以體積?。蓤?zhí)行 200KB)功能靈活而著稱,在各大發(fā)行版中都默認(rèn)安裝,你可以用它來(lái)做很多網(wǎng)絡(luò)相關(guān)的工作,熟練使用它可以不依靠其他工具做一些很有用的事情。

[[318561]]

Netcat 號(hào)稱 TCP/IP 的瑞士軍刀并非浪得虛名,以體積?。蓤?zhí)行 200KB)功能靈活而著稱,在各大發(fā)行版中都默認(rèn)安裝,你可以用它來(lái)做很多網(wǎng)絡(luò)相關(guān)的工作,熟練使用它可以不依靠其他工具做一些很有用的事情。

最初作者是叫做“霍比特人”的網(wǎng)友 Hobbit hobbit@avian.org 于 1995 年在 UNIX 上以源代碼的形式發(fā)布,Posix 版本的 netcat 主要有 GNU 版本的 netcat 和 OpenBSD 的 netcat 兩者都可以在 debian/ubuntu 下面安裝,但是 Windows 下面只有 GNU 版本的 port。

不管是程序員還是運(yùn)維,熟悉這個(gè)命令都可以讓很多工作事半功倍,然而網(wǎng)上基本 90% 的 netcat 文章說(shuō)的都是老版本的 OpenBSD 的 netcat,已經(jīng)沒(méi)法在主流 linux 上使用了,所以我們先要檢查版本:

在 debian/ubuntu 下面:

  1. readlink -f $(which nc) 

看看,結(jié)果會(huì)有兩種:

  • /bin/nc.traditional: 默認(rèn) GNU 基礎(chǔ)版本,一般系統(tǒng)自帶。
  • /bin/nc.openbsd: openbsd 版本,強(qiáng)大很多。

都可以用 apt-get install nc-traditional 或者 apt-get install nc-openbsd 來(lái)選擇安裝。不管是 GNU 版本還是 OpenBSD 版本,都有新老的區(qū)別,主要是傳送文件時(shí) stdin 發(fā)生 EOF 了,老版本會(huì)自動(dòng)斷開(kāi),而新的 gnu/openbsd 還會(huì)一直連著,兩年前 debian jessie 時(shí)統(tǒng)一升過(guò)級(jí),導(dǎo)致網(wǎng)上的所有教程幾乎同時(shí)失效。

下面主要以最新的 GNU 版本為主同時(shí)對(duì)照更強(qiáng)大的 openbsd 版本進(jìn)行說(shuō)明。

端口測(cè)試

你在服務(wù)器 A主機(jī)(192.168.1.2) 上面 8080 端口啟動(dòng)了一個(gè)服務(wù),有沒(méi)有通用的方法檢測(cè)服務(wù)的 TCP 端口是否啟動(dòng)成功?或者在 B 主機(jī)上能不能正常訪問(wèn)該端口?

進(jìn)一步,如果而 A 主機(jī)上用 netstat -an 發(fā)現(xiàn)端口成功監(jiān)聽(tīng)了,你在 B 主機(jī)上的客戶端卻無(wú)法訪問(wèn),那么到底是服務(wù)錯(cuò)誤還是網(wǎng)絡(luò)無(wú)法到達(dá)呢?我們當(dāng)然可以在 B 主機(jī)上用 telnet 探測(cè)一下:

  1. telnet 192.168.1.2 8080 

但 telnet 并不是專門做這事情的,還需要額外安裝,所以我們?cè)?B 主機(jī)上用 netcat:

  1. nc -vz 192.168.1.2 8080 

即可,v 的意思是顯示多點(diǎn)信息(verbose),z 代表不發(fā)送數(shù)據(jù)。那么如果 B 主機(jī)連不上 A 主機(jī)的 8080 端口,此時(shí)你就該檢查網(wǎng)絡(luò)和安全設(shè)置了,如果連的上那么再去查服務(wù)日志去。

nc 命令后面的 8080 可以寫(xiě)成一個(gè)范圍進(jìn)行掃描:

  1. nc -v -v -w3 -z 192.168.1.2 8080-8083 

兩次 -v 是讓它報(bào)告更詳細(xì)的內(nèi)容,-w3 是設(shè)置掃描超時(shí)時(shí)間為 3 秒。

傳輸測(cè)試

你在配置 iptable 或者安全組策略,禁止了所有端口,但是僅僅開(kāi)放了 8080 端口,你想測(cè)試一下該設(shè)置成功與否怎么測(cè)試?安裝個(gè) nginx 改下端口,外面再用 chrome 訪問(wèn)下或者 telnet/curl 測(cè)試下??還是 python -m 啟動(dòng)簡(jiǎn)單 http 服務(wù) ?其實(shí)不用那么麻煩,在需要測(cè)試的 A 主機(jī)上:

  1. nc -l -p 8080 

這樣就監(jiān)聽(tīng)了 8080 端口,然后在 B 主機(jī)上連接過(guò)去:

  1. nc 192.168.1.2 8080 

兩邊就可以會(huì)話了,隨便輸入點(diǎn)什么按回車,另外一邊應(yīng)該會(huì)顯示出來(lái),注意,openbsd 版本 netcat 用了 -l 以后可以省略 -p 參數(shù),寫(xiě)做:nc -l 8080 ,但在 GNU netcat 下面無(wú)法運(yùn)行,所以既然推薦寫(xiě)法是加上 -p 參數(shù),兩個(gè)版本都通用。

老版本的 nc 只要 CTRL+D 發(fā)送 EOF 就會(huì)斷開(kāi),新版本一律要 CTRL+C 結(jié)束,不管是服務(wù)端還是客戶端只要任意一邊斷開(kāi)了,另一端也就結(jié)束了,但是 openbsd 版本的 nc 可以加一個(gè) -k 參數(shù)讓服務(wù)端持續(xù)工作。

那么你就可以先用 nc 監(jiān)聽(tīng) 8080 端口,再遠(yuǎn)端檢查可用,然后又再次隨便監(jiān)聽(tīng)個(gè) 8081 端口,遠(yuǎn)端檢測(cè)不可用,說(shuō)明你的安全策略配置成功了,完全不用安裝任何累贅的服務(wù)。

測(cè)試 UDP 會(huì)話

兩臺(tái)主機(jī) UDP 數(shù)據(jù)發(fā)送不過(guò)去,問(wèn)題在哪呢?你得先確認(rèn)一下兩臺(tái)主機(jī)之間 UDP 可以到達(dá),這時(shí)候沒(méi)有 nginx 給你用了,怎么測(cè)試呢?用 python 寫(xiě)個(gè) udp 的 echo 服務(wù)??運(yùn)維不會(huì)認(rèn)你寫(xiě)的工具的,即使連不通他也會(huì)認(rèn)為你的程序有 bug,于是 netcat 又登場(chǎng)了,在 A 主機(jī)上:

  1. nc -u -l -p 8080 

監(jiān)聽(tīng) udp 的 8080 端口,然后 B 主機(jī)上連上去:

  1. nc -u 192.168.1.2 8080 

然后像前面測(cè)試 tcp 的方法進(jìn)行檢測(cè),結(jié)束了 CTRL+C 退出,看看一邊輸入消息另外一邊能否收到,收得到的話可能是你自己的服務(wù)原因,收不到的話把 nc 測(cè)試結(jié)果扔給運(yùn)維/系統(tǒng)管理員,讓他們趕快檢查網(wǎng)關(guān)和防火墻配置,系統(tǒng)自帶的工具測(cè)試的結(jié)果,既簡(jiǎn)單又權(quán)威。

文件傳輸

你在一臺(tái) B 主機(jī)上想往 A 主機(jī)上發(fā)送一個(gè)文件怎么辦?不能用 scp / szrz 的話?繼續(xù) python 寫(xiě)個(gè) http 上傳?裝個(gè) ftpd 服務(wù)?不用那么麻煩,在 A 主機(jī)上監(jiān)聽(tīng)端口:

  1. nc -l -p 8080 > image.jpg 

然后在 B 主機(jī)上:

  1. nc 192.168.1.2 8080 < image.jpg 

netcat 嘛,就是用于通過(guò)網(wǎng)絡(luò)把東西 cat 過(guò)去,注意,老版本 GNU / OpenBSD 的 netcat 再文件結(jié)束(標(biāo)準(zhǔn)輸入碰到 EOF),發(fā)送文件一端就會(huì)關(guān)閉連接,而新版本不會(huì),你需要再開(kāi)個(gè)窗口到 A 主機(jī)上看看接收下來(lái)的文件尺寸和源文件比較一下判斷傳輸是否結(jié)束。

當(dāng)傳輸完成后,你再任意一端 CTRL+C 結(jié)束它。對(duì)于新版 OpenBSD 的 netcat 有一個(gè) -N 參數(shù),可以指明 stdin 碰到 EOF 就關(guān)閉連接(和老版本一致),我們寫(xiě)作:

  1. /bin/nc.openbsd -N 192.168.1.2 8080 < image.jpg 

你機(jī)器上的 nc 命令有可能指向 /bin/nc.traditional 或者 /bin/nc.openbsd 任意一個(gè),這里顯示指明調(diào)用 openbsd 版本的 netcat。

這樣在 openbsd 新版本的 netcat 中使用 -N參數(shù),就不需要再開(kāi)個(gè)終端去手工檢查傳輸是否完成,傳輸結(jié)束了就會(huì)自動(dòng)退出。其實(shí) GNU 版本的 netcat 也有可以加個(gè) -q0 參數(shù),達(dá)到和 openbsd 版本 -N 的效果:

/bin/nc.traditional -q0 192.168.1.2 8080 < image.jpg

只不過(guò)是 Linux 下面最新的 GNU netcat,對(duì)應(yīng) Windows 版本 沒(méi)有該參數(shù),所以從 Windows 傳文件過(guò)去時(shí),少不了再開(kāi)個(gè)終端看一下進(jìn)度,如果是 Linux 端發(fā)送就沒(méi)問(wèn)題了。通過(guò)管道協(xié)作,搭配 tar 命令,還可以方便的傳一整個(gè)目錄過(guò)去,有興趣可以自己研究。

使用 netcat 這個(gè)系統(tǒng)默認(rèn)安裝的工具進(jìn)行文件傳輸,可以算作你保底的手段,當(dāng) scp/ftp 都沒(méi)法使用的情況下,你的一個(gè)殺手锏。

網(wǎng)速吞吐量測(cè)試

最簡(jiǎn)單的方法,GNU 版本的 netcat 加上 -v -v 參數(shù)后,結(jié)束時(shí)會(huì)統(tǒng)計(jì)接收和發(fā)送多少字節(jié),那么此時(shí) A 主機(jī)上顯示運(yùn)行 GNU 版本的 nc 監(jiān)聽(tīng)端口:

  1. /bin/nc.traditional -v -v -n -l -p 8080 > /dev/null 

加 n 的意思是不要解析域名,避免解析域名浪費(fèi)時(shí)間造成統(tǒng)計(jì)誤差,然后 B 主機(jī)上:

  1. time nc -n 192.168.1.2 8080 < /dev/zero 

回車后執(zhí)行十秒鐘按 CTRL+C 結(jié)束,然后在 A 主機(jī)那里就可以看到接收了多少字節(jié)了,此時(shí)根據(jù) time 的時(shí)間自己做一下除法即可得知,注意 GNU 的 netcat 統(tǒng)計(jì)的數(shù)值是 32 位 int,如果傳輸太多就回環(huán)溢出成負(fù)數(shù)了。

對(duì)于 OpenBSD 版本的 nc 我們可以用管道搭配 dd 命令進(jìn)行統(tǒng)計(jì),服務(wù)端運(yùn)行:

  1. nc -l -p 8080 > /dev/null 

客戶端運(yùn)行 dd 搭配 nc:

  1. dd if=/dev/zero bs=1MB count=100 | /bin/nc.openbsd -n -N 192.168.1.2 8080 

結(jié)束以后會(huì)有結(jié)果出來(lái),注意這里使用了 -N 代表 stdin 碰到 EOF 后就關(guān)閉連接,這里凡是寫(xiě) nc 命令的地方,代表 GNU/OpenBSD 任意版本的 netcat 都可以,顯示的指明路徑,就代表必須使用特定版本的 netcat,上條命令等效的 GNU 版本是:

  1. dd if=/dev/zero bs=1MB count=100 | /bin/nc.traditional -n -q0 192.168.1.2 8080 

其實(shí)上面兩種方法都把建立連接的握手時(shí)間以及 TCP 窗口慢啟動(dòng)的時(shí)間給計(jì)算進(jìn)去了,不是特別精確,最精確的方式是搭配 pv 命令(監(jiān)控統(tǒng)計(jì)管道數(shù)據(jù)的速度),在 A 主機(jī)運(yùn)行:

  1. nc -l -p 8080 | pv 

然后再 B 主機(jī)運(yùn)行:

  1. nc 192.168.1.2 8080 < /dev/zero 

此時(shí) A 主機(jī)那端持續(xù)收到 B 主機(jī)發(fā)送過(guò)來(lái)的數(shù)據(jù)并通過(guò)管道投遞給 pv 命令后,你就能看到實(shí)時(shí)的帶寬統(tǒng)計(jì)了,pv 會(huì)輸出一個(gè)實(shí)時(shí)狀態(tài):

  1. 353MiB 0:00:15 [22.4MiB/s] [ <=> ] 

讓你看到最新的帶寬吞吐量,這是最準(zhǔn)確的吞吐量測(cè)試方法,在不需要 iperf 的情況下,直接使用 nc 就能得到一個(gè)準(zhǔn)確的數(shù)據(jù)。

系統(tǒng)后門

假設(shè)你用串口登錄到 A 主機(jī),上面十分原始,包管理系統(tǒng)都沒(méi)有,sshd/telnetd 都跑不起來(lái),這時(shí)候你想用 B 主機(jī)通過(guò)網(wǎng)絡(luò)登錄 A 主機(jī)有沒(méi)有辦法?

GNU 版本的 netcat 有一個(gè) -e 參數(shù),可以在連接建立的時(shí)候執(zhí)行一個(gè)程序,并把它的標(biāo)準(zhǔn)輸入輸出重定向到網(wǎng)絡(luò)連接上來(lái),于是我們可以在 A 主機(jī)上 -e 一下 bash:

  1. /bin/nc.traditional -l -p 8080 -e /bin/bash 

按回車打開(kāi)系統(tǒng)后門,然后再 B 主機(jī)那里照常:

  1. nc 192.168.1.2 8080 

你就可以在 B 主機(jī)上登錄 A 主機(jī)的 shell 了,操作完成 CTRL+C 結(jié)束。

對(duì)于 openbsd 版本的 netcat,-e 命令被刪除了,沒(méi)關(guān)系,我們可以用管道來(lái)完成,和剛才一樣,在 A 主機(jī)上:

  1. mkfifo /tmp/f 
  2.  
  3. cat /tmp/f | /bin/bash 2>&1 | /bin/nc.openbsd -l -p 8080 > /tmp/f 

然后 B 主機(jī)和剛才一樣:

  1. nc 192.168.1.2 8080 

即可訪問(wèn),用完注意將 /tmp/f 這個(gè) fifo 文件刪除。

結(jié)束

netcat 就是可以在命令行直接的方式操作 tcp/udp 進(jìn)行原始的:監(jiān)聽(tīng),連接,數(shù)據(jù)傳輸?shù)裙ぷ?。然后搭配管道,?shí)現(xiàn)靈活多樣的功能,或者進(jìn)行各種網(wǎng)絡(luò)測(cè)試。

其實(shí)上面幾個(gè)例子,并不是說(shuō)明 “netcat 可以干這些事情”而是通過(guò)舉例開(kāi)一下腦洞,看看搭配管道的 netcat 究竟有多強(qiáng)。

還有很多其他用法,比如你可以用 netcat + shell script 寫(xiě)一個(gè) http 服務(wù)器,使用 fifo 搭配兩層 nc 可以實(shí)現(xiàn) tcp 端口轉(zhuǎn)發(fā),搭配 openssl 命令行工具和 nc 加管道可以把 ssl 的套接字解碼并映射成裸的 socket 端口供沒(méi)有 ssl 功能的工具訪問(wèn)。

當(dāng)然你要說(shuō),這么多復(fù)雜的用法你記不住,大部分你都可以用專業(yè)軟件來(lái)代替,那至少你可以先嘗試使用 nc 來(lái)做 tcp/udp 端口測(cè)試,不要再用 telnet/chrome 來(lái)測(cè)試端口是否可用了,后者太過(guò)業(yè)余。其他功能可作為備份手段,在極端惡劣的環(huán)境下使用一下,也許能幫助到你很多;再你有心情的情況下可以研究下如何使用管道搭配其他工具進(jìn)行一些高階操作就行。

 

責(zé)任編輯:張燕妮 來(lái)源: 高效運(yùn)維
相關(guān)推薦

2013-04-11 10:51:27

2019-06-24 09:57:39

網(wǎng)絡(luò)工具調(diào)試

2019-06-27 17:00:09

nc命令 Linux

2010-12-01 12:31:23

NetCat掃描端口

2014-09-26 14:30:41

2022-02-15 10:15:13

Web網(wǎng)絡(luò)程序員

2009-07-21 14:16:18

Scalafor表達(dá)式

2020-07-02 09:21:40

Java 緩存開(kāi)發(fā)

2013-06-08 10:36:47

Linux命令行

2017-05-03 14:45:45

MySQL數(shù)據(jù)恢復(fù)

2014-05-29 14:44:06

瑞士軍刀綜合征開(kāi)發(fā)者

2019-06-28 11:26:31

LinuxWindowsTcping

2023-05-08 07:19:07

2013-05-22 17:18:13

2021-07-21 16:22:40

運(yùn)維架構(gòu)技術(shù)

2011-10-18 14:11:17

Web開(kāi)發(fā)

2009-11-17 18:44:44

2021-09-05 18:30:59

Alpine容器Busybox

2009-05-19 16:40:41

TTL網(wǎng)絡(luò)故障科來(lái)軟件

2009-11-24 18:34:23

網(wǎng)絡(luò)故障診斷路由器
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)