tcpdump命令使用总结
命令說(shuō)明
tcpdump命令是linux系統(tǒng)中分析網(wǎng)絡(luò)問(wèn)題的重要抓包工具,為了方便分析問(wèn)題,我們還需要借助Wireshark工具進(jìn)行分析;
命令安裝
yum install tcpdump命令選項(xiàng)說(shuō)明
抓包 -c 指定要抓取的包數(shù)量(滿足條件的) -i interface 指定監(jiān)聽(tīng)的網(wǎng)卡lo 環(huán)回口any 所有接口 -n 不反解主機(jī)名 -nn 不反解主機(jī)名和端口號(hào) -P 指定要抓取流入還是流出的包 in、out、inout 默認(rèn)inout 輸出 -e 輸出的每行都將包括數(shù)據(jù)鏈路層頭部信息 -q 快速打印 -x 輸出包的頭部數(shù)據(jù) 16進(jìn)制ASCII同時(shí)輸出 -xx 更詳細(xì) -v 詳細(xì)的輸出 -vv -vvv 其他 -D 列出可用于抓包的接口 -F 從文件中讀取抓包的表達(dá)式 -w 將抓包數(shù)據(jù)輸出到文件中 -r 從指定的數(shù)據(jù)包中讀取數(shù)據(jù) -s number tcpdump默認(rèn)只會(huì)截取前96字節(jié)的內(nèi)容,要想截取所有的報(bào)文內(nèi)容,就需要使用這個(gè)選項(xiàng)其中number是需要截取的報(bào)文字節(jié)數(shù),如果是0的話,表示截取報(bào)文全部?jī)?nèi)容過(guò)濾器
在服務(wù)器上的網(wǎng)絡(luò)報(bào)文是異常的多,很多時(shí)候我們只關(guān)注和具體問(wèn)題有關(guān)的數(shù)據(jù)報(bào)文,而這些有用的報(bào)文只占到很小的一部分,為了不讓我們?cè)趫?bào)文的海洋里迷失自己,我們就非常有必要學(xué)習(xí)一下tcpdump提供的靈活而且功能強(qiáng)大的過(guò)濾器。
過(guò)濾器也可以簡(jiǎn)單地分為三類:type,dir和proto。
- type
主要用來(lái)區(qū)分過(guò)濾報(bào)文源類型,主要由host主機(jī)報(bào)文,net網(wǎng)段報(bào)文和port指定端口的報(bào)文組成; - dir
只過(guò)濾報(bào)文的源地址和目的地址,主要包括src源地址和dst目的地址; - proto
只過(guò)濾報(bào)文的協(xié)議類型,支持tcp、udp、arp、ip、ether、icmp;使用的時(shí)候可以省略proto關(guān)鍵字,例如:tcpdump -i eth1 icmp
組合條件
在茫茫網(wǎng)絡(luò)中,想要找到那個(gè)你想要的網(wǎng)絡(luò)包,還是有一定難度的。為了抓住那個(gè)我們想要的網(wǎng)絡(luò)包,在我們抓包命令中,包含越多的限制條件,抓的無(wú)關(guān)包就會(huì)越少,所以在進(jìn)行抓包時(shí),可以使用以下操作:
- 與 and、&&
- 或 or、||
- 非 not、!
使用實(shí)例
-
命令:tcpdump -i eth0
說(shuō)明:監(jiān)視指定網(wǎng)絡(luò)接口的數(shù)據(jù)包 -
命令:tcpdump host 210.27.48.3
說(shuō)明:截獲210.27.48.3主機(jī)收到的和發(fā)出的所有數(shù)據(jù)包 -
命令:tcpdump host 210.27.48.4 and (210.27.48.5 or 210.27.48.6)
說(shuō)明:截獲210.27.48.3主機(jī)和210.27.48.5或者210.27.48.6主機(jī)進(jìn)行通信的所有數(shù)據(jù)包 -
命令:tcpdump -i eth0 src host 210.27.48.3
說(shuō)明:監(jiān)視eth0網(wǎng)卡上源地址是210.27.48.3的所有網(wǎng)絡(luò)包 -
命令:tcpdump -i eth0 dst host 210.27.48.3
說(shuō)明:監(jiān)視eth0網(wǎng)卡上目的地址是210.27.48.3的所有網(wǎng)絡(luò)包 -
命令:tcpdump tcp port 23 and host 210.27.48.3
說(shuō)明:獲取主機(jī)210.27.48.3上端口為23的應(yīng)用發(fā)出和接收的所有TCP協(xié)議包 -
命令:tcpdump udp port 123
說(shuō)明:獲取本機(jī)123端口發(fā)出和接收的所有UDP協(xié)議包
為了便于分析,我們需要將抓到的包保存到pcap文件,用Wireshark軟件進(jìn)行進(jìn)一步分析,保存到文件的參數(shù)為-w,用法如下:
-
命令:tcpdump -i eth0 -s0 -G 60 -Z root -w %Y_%m%d_%H%M_%S.pcap
說(shuō)明:抓取報(bào)文后按照指定時(shí)間間隔保存;-G選項(xiàng)后面接時(shí)間,單位為秒;上述命令就是每隔60秒生存一個(gè)文件 -
命令:tcpdump -i eth0 -s0 -C 1 -Z root -w eth0Packet.pcap
說(shuō)明:抓取報(bào)文后按照指定報(bào)文大小保存;-C選項(xiàng)后接文件大小,單位為MB;上述命令就是每抓包文件達(dá)到1MB時(shí)就使用一個(gè)新的文件保存新抓的報(bào)文
man pcap-filter
高級(jí)過(guò)濾方式
了解如何從包頭過(guò)濾信息
proto[x:y] : 過(guò)濾從x字節(jié)開(kāi)始的y字節(jié)數(shù)。比如ip[2:2]過(guò)濾出3、4字節(jié)(第一字節(jié)從0開(kāi)始排) proto[x:y] & z = 0 : proto[x:y]和z的與操作為0 proto[x:y] & z !=0 : proto[x:y]和z的與操作不為0 proto[x:y] & z = z : proto[x:y]和z的與操作為z proto[x:y] = z : proto[x:y]等于z支持的操作符
>, <, >=, <=, =, !=IP頭(IPV4)
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Version| IHL |Type of Service| Total Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Identification |Flags| Fragment Offset | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Time to Live | Protocol | Header Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Destination Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options | Padding | <-- optional +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | DATA ... | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ /*IP頭定義,共20個(gè)字節(jié)*/ typedef struct _IP_HEADER {char m_cVersionAndHeaderLen; //版本信息(前4位),頭長(zhǎng)度(后4位)char m_cTypeOfService; // 服務(wù)類型8位short m_sTotalLenOfPacket; //數(shù)據(jù)包長(zhǎng)度short m_sPacketID; //數(shù)據(jù)包標(biāo)識(shí)short m_sSliceinfo; //分片使用char m_cTTL; //存活時(shí)間char m_cTypeOfProtocol; //協(xié)議類型short m_sCheckSum; //校驗(yàn)和unsigned int m_uiSourIp; //源ipunsigned int m_uiDestIp; //目的ip } __attribute__((packed))IP_HEADER, *PIP_HEADER ;抓取特定包頭實(shí)例
-
抓取源端口大于1024的TCP數(shù)據(jù)包
tcpdump -i eth1 'tcp[0:2] > 1024' -
只抓SYN包,第十四字節(jié)是二進(jìn)制的00000010,也就是十進(jìn)制的2
tcpdump -i eth1 'tcp[13] = 2' -
抓SYN, ACK (00010010 or 18)
tcpdump -i eth1 'tcp[13] = 18' -
抓所有包含F(xiàn)IN標(biāo)記的包(FIN通常和ACK一起,表示幽會(huì)完了,回見(jiàn))
tcpdump -i eth1 'tcp[13] & 1 = 1' -
抓RST
tcpdump -i eth1 'tcp[13] & 4 = 4'
常用的字段偏移名字
tcpdump考慮了一些數(shù)字恐懼癥者的需求,提供了部分常用的字段偏移名字:
-
icmptype (ICMP類型字段)
-
icmpcode (ICMP符號(hào)字段)
-
tcpflags (TCP標(biāo)記字段)
TCP標(biāo)記值:
tcp-fin, tcp-syn, tcp-rst, tcp-push, tcp-push, tcp-ack, tcp-urg
這樣上面按照TCP標(biāo)記位抓包的就可以寫(xiě)直觀的表達(dá)式了:
-
只抓SYN包
tcpdump -i eth1 'tcp[tcpflags] = tcp-syn' -
使用tcpdump抓取HTTP包
tcpdump -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854
0x4745 為"GET"前兩個(gè)字母"GE",0x4854 為"HTTP"前兩個(gè)字母"HT"。
更多用法請(qǐng)使用以下命令查閱:
man pcap-filter //查看過(guò)濾器相關(guān)資料 tcpdump --help //tcpdump命令用法總結(jié)
以上是生活随笔為你收集整理的tcpdump命令使用总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: git太慢用码云
- 下一篇: 生成对抗网络入门详解及TensorFlo