一篇就弄懂Linux netstat和tcpdump的常見(jiàn)用法

1. Netstat

Netstat是一款CLI工具,它可以列出系統(tǒng)上所有的網(wǎng)絡(luò)連接情況,包括tcp、udp和其他unix網(wǎng)絡(luò)socket,另外它還能列出處于監(jiān)聽(tīng)狀態(tài)的socket。當(dāng)Linux網(wǎng)絡(luò)或系統(tǒng)排查問(wèn)題時(shí),netstat基本上是必用的工具之一,下面開(kāi)始對(duì)netstat的常見(jiàn)用法加以說(shuō)明。

netstat -a

用途:列出tcp、udp和其他unix套接字下所有的連接,往往信息提供的不夠直觀和詳細(xì),因此也常通過(guò)搭配其他參數(shù)一起使用。

  • 比如僅列出tcp或者udp協(xié)議下連接:netstat -at 或者 netstat -au,如下圖所示列出了所有的tcp連接:

禁用反向域名解析

相信很多用戶已經(jīng)發(fā)現(xiàn),在執(zhí)行上述命令的時(shí)候結(jié)果查詢的不是很快,這是因?yàn)閚etstat默認(rèn)會(huì)使用反向域名解析,會(huì)把對(duì)應(yīng)的IPv4地址解析對(duì)應(yīng)到IPv6或者主機(jī)名,如果IP地址信息足夠滿足需求時(shí),大可以禁用反向域名解析,加上-n參數(shù)。

  • 比如netstat -ant查詢所有tcp協(xié)議下的連接:

查看處于監(jiān)聽(tīng)狀態(tài)的連接

  • 比如查看處于監(jiān)聽(tīng)狀態(tài)的所有tcp連接:netstat -nlt

如果是查看udp協(xié)議下的連接,則用netstat -nlu。

查看連接對(duì)應(yīng)的程序信息

常常會(huì)遇到如下場(chǎng)景:我們提前預(yù)知某服務(wù)程序開(kāi)放某監(jiān)聽(tīng)端口,于是想查看對(duì)應(yīng)連接的信息,包括進(jìn)程名、進(jìn)程ID甚至執(zhí)行owner信息等,可加入-p,-e參數(shù)來(lái)實(shí)現(xiàn)。

  • 比如查看端口3307對(duì)應(yīng)的服務(wù)進(jìn)程信息:


其它

netstat -s可以打印出網(wǎng)絡(luò)統(tǒng)計(jì)數(shù)據(jù),包括某個(gè)協(xié)議下的收發(fā)包數(shù)量;
netstat -rn可查看路由信息,效果等同于route -n
netstat -i或者netstat -ie可查看網(wǎng)絡(luò)接口信息,且后一條命令效果等同于ifconfig -a;

2. TCPDump

用簡(jiǎn)單的話來(lái)定義tcpdump,就是:dump the traffic on a network,根據(jù)使用者的定義對(duì)網(wǎng)絡(luò)上的數(shù)據(jù)包進(jìn)行截獲的包分析工具。 tcpdump可以將網(wǎng)絡(luò)中傳送的數(shù)據(jù)包的“頭”完全截獲下來(lái)提供分析。它支持針對(duì)網(wǎng)絡(luò)層、協(xié)議、主機(jī)、網(wǎng)絡(luò)或端口的過(guò)濾,并提供and、or、not等邏輯語(yǔ)句來(lái)幫助你去掉無(wú)用的信息,是一個(gè)十分常用的Linux抓包工具。

在介紹tcpdump常用命令之前先提一個(gè)小建議,每個(gè)tcpdump命令的末尾加上-s 0 -nvvvtttt參數(shù),簡(jiǎn)單解釋一下參數(shù)的含義:

  • -s 0:-s參數(shù)是設(shè)置tcpdump抓取數(shù)據(jù)包的長(zhǎng)度,如果不設(shè)置則默認(rèn)是68字節(jié),而設(shè)置為0 意味著讓tcpdump自動(dòng)選擇合適的長(zhǎng)度來(lái)抓取數(shù)據(jù)包;
  • -n:不對(duì)地址(比如, 主機(jī)地址, 端口號(hào))進(jìn)行數(shù)字表示到名字表示的轉(zhuǎn)換;
  • -vvv:輸出詳細(xì)的最高級(jí)別;
  • -tttt:每行打印數(shù)據(jù)的開(kāi)頭添加日期樣式(Y-M-D h:m:s);

另外還可以結(jié)合自己的需要選擇要不要加上-x -xx -X -XX(輸出會(huì)打印每個(gè)包的頭部數(shù)據(jù),且會(huì)以16進(jìn)制或者ASCII碼形式打印每個(gè)包的數(shù)據(jù))等參數(shù)

抓取指定網(wǎng)絡(luò)接口的數(shù)據(jù)包

# 綁定網(wǎng)卡,命令中br-mgmt是對(duì)應(yīng)的網(wǎng)絡(luò)接口
tcpdump -i br-mgmt -nvvvtttt

抓取指定主機(jī)的數(shù)據(jù)包

  • 抓取主機(jī)名是node-6.domain.tld收到或發(fā)出的數(shù)據(jù)包
tcpdump host node-6.domain.tld -nvvvtttt
# 也可以把主機(jī)名換成ip地址,比如:
tcpdump host 10.20.0.9 -nvvvtttt
  • 抓取主機(jī)間通信的數(shù)據(jù)包
# 抓取主機(jī)node-1與node-2之間的通信的數(shù)據(jù)包
tcpdump host node-1 and node-2 -nvvvtttt
# 抓取主機(jī)node-1與node-2或node-3之間的通信的數(shù)據(jù)包
tcpdump host node-1 and \(node-2 or node-3\) -nvvvtttt
# 抓取主機(jī)node-1的所有的收到或者發(fā)出數(shù)據(jù)通信包,除了與node-2間的通信
tcpdump host node-1 and not node-2 -nvvvtttt
# 以上命令主機(jī)名都可以換成ip地址,但注意在非條件下,not -->!
  • 另外還可以指定源主機(jī)(ip地址)和目標(biāo)主機(jī)(ip地址)
# 截獲主機(jī)node-1發(fā)出的數(shù)據(jù)包
tcpdump -i br-mgmt src host node-1 -nvvvtttt
# 截獲主機(jī)node-1收到的數(shù)據(jù)包
tcpdump -i br-mgmt dst host node-1 -nvvvtttt

抓取指定主機(jī)和指定端口的數(shù)據(jù)包

  • 抓取主機(jī)node-1:5673所有發(fā)出或收到的TCP數(shù)據(jù)包:
tcpdump tcp -i br-mgmt port 5673 and host node-1 -nvvvtttt 
  • 抓取主機(jī)node-1:4953所有發(fā)出或收到的UDP數(shù)據(jù)包:
tcpdump udp -i br-mgmt port 4953 and host node-1 -nvvvtttt

一個(gè)比較詳細(xì)的例子

tcpdump tcp -i br-mgmt -s 0 -c 100 and dst port ! 22 and src host 192.168.0.6 -nvvvtttt -X -w ./mgnt.cap

如下僅簡(jiǎn)單說(shuō)明一下上文沒(méi)提到的用法:

  • -c 100:抓取100個(gè)符合過(guò)濾條件的數(shù)據(jù)包;
  • -w ./mgmt.cap:將抓取的數(shù)據(jù)包保存到mgmt.cap文件,可以配合Windows Wireshark分析抓取的數(shù)據(jù)包;

抓取HTTP數(shù)據(jù)包

  • tcpdump過(guò)濾HTTP的GET請(qǐng)求:
tcpdump -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420' -Xnvvvtttt
  • tcpdump過(guò)濾HTTP的POST請(qǐng)求:
tcpdump -s 0 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)' -Xnvvvtttt
  • 一個(gè)很用戶友好的抓HTTP包的命令
# 實(shí)際使用中把綁定的網(wǎng)卡設(shè)備及監(jiān)聽(tīng)端口替換一下
tcpdump -ni br-mgmt -A -s 10240 'tcp port 3000 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' | egrep --line-buffered "^........(GET |HTTP\/|POST |HEAD )|^[A-Za-z0-9-]+: " | sed -r 's/^........(GET |HTTP\/|POST |HEAD )/\n\1/g'
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 個(gè)人認(rèn)為,Goodboy1881先生的TCP /IP 協(xié)議詳解學(xué)習(xí)博客系列博客是一部非常精彩的學(xué)習(xí)筆記,這雖然只是...
    貳零壹柒_fc10閱讀 5,195評(píng)論 0 8
  • https://nodejs.org/api/documentation.html 工具模塊 Assert 測(cè)試 ...
    KeKeMars閱讀 6,608評(píng)論 0 6
  • Netstat 簡(jiǎn)介 Netstat 是一款命令行工具,可用于列出系統(tǒng)上所有的網(wǎng)絡(luò)套接字連接情況,包括 tcp, ...
    Ddaidai閱讀 1,231評(píng)論 0 0
  • 簡(jiǎn)介 用簡(jiǎn)單的話來(lái)定義tcpdump,就是:dump the traffic on a network,根據(jù)使用者...
    JasonShi6306421閱讀 1,352評(píng)論 0 1
  • 簡(jiǎn)介 用簡(jiǎn)單的話來(lái)定義tcpdump,就是:dump the traffic on a network,根據(jù)使用者...
    保川閱讀 6,086評(píng)論 1 13

友情鏈接更多精彩內(nèi)容