Linux网络抓包工具tcpdump
一、tcpdump介紹
tcpdump 是一個Linux的網(wǎng)絡(luò)抓包工具。它允許用戶攔截和顯示發(fā)送或收到過網(wǎng)絡(luò)連接到該計算機(jī)的TCP/IP和其他數(shù)據(jù)包。tcpdump 適用于大多數(shù)的類Unix系統(tǒng)操作系統(tǒng)(如linux,BSD等)。
二、安裝&用法說明
2.1、安裝
$ yum -y install tcpdump2.2、用法說明
tcpdump采用命令行方式,它的命令格式為
tcpdump [ -DenNqvX ] [ -c count ] [ -F file ] [ -i interface ] [ -r file ] [ -s snaplen ] [ -w file ] [ expression ]
抓包選項:
- -c:指定要抓取的包數(shù)量。注意,是最終要獲取這么多個包。例如,指定"-c 10"將獲取10個包,但可能已經(jīng)處理了100個包,只不過只有10個包是滿足條件的包。
- -i interface:指定tcpdump需要監(jiān)聽的接口。若未指定該選項,將從系統(tǒng)接口列表中搜尋編號最小的已配置好的接口(不包括loopback接口,要抓取loopback接口使用tcpdump -i lo),一旦找到第一個符合條件的接口,搜尋馬上結(jié)束。可以使用’any’關(guān)鍵字表示所有網(wǎng)絡(luò)接口。
- -n:對地址以數(shù)字方式顯式,否則顯式為主機(jī)名,也就是說-n選項不做主機(jī)名解析。
- -nn:除了-n的作用外,還把端口顯示為數(shù)值,否則顯示端口服務(wù)名。
- -N:不打印出host的域名部分。例如tcpdump將會打印’nic’而不是’nic.ddn.mil’。
- -P:指定要抓取的包是流入還是流出的包。可以給定的值為"in"、“out"和"inout”,默認(rèn)為"inout"。
- -s len:設(shè)置tcpdump的數(shù)據(jù)包抓取長度為len,如果不設(shè)置默認(rèn)將會是65535字節(jié)。對于要抓取的數(shù)據(jù)包較大時,長度設(shè)置不夠可能會產(chǎn)生包截斷,若出現(xiàn)包截斷,輸出行中會出現(xiàn)"[|proto]"的標(biāo)志(proto實際會顯示為協(xié)議名)。但是抓取len越長,包的處理時間越長,并且會減少tcpdump可緩存的數(shù)據(jù)包的數(shù)量,從而會導(dǎo)致數(shù)據(jù)包的丟失,所以在能抓取我們想要的包的前提下,抓取長度越小越好。-s0:防止包截斷。
輸出選項:
- -e:輸出的每行中都將包括數(shù)據(jù)鏈路層頭部信息。例如源MAC和目標(biāo)MAC。
- -q:快速打印輸出。即打印很少的協(xié)議相關(guān)信息,從而輸出行都比較簡短。
- -X:輸出包的頭部數(shù)據(jù),會以16進(jìn)制和ASCII兩種方式同時輸出。
- -A :打印數(shù)據(jù)報文的 ASCII 值
- -XX:輸出包的頭部數(shù)據(jù),會以16進(jìn)制和ASCII兩種方式同時輸出,更詳細(xì)。
- -v:當(dāng)分析和打印的時候,產(chǎn)生詳細(xì)的輸出。
- -vv:產(chǎn)生比-v更詳細(xì)的輸出。
- -vvv:產(chǎn)生比-vv更詳細(xì)的輸出。
其他功能性選項:
- -D:列出可用于抓包的接口。將會列出接口的數(shù)值編號和接口名,它們都可以用于"-i"后。
- -F:從文件中讀取抓包的表達(dá)式。若使用該選項,則命令行中給定的其他表達(dá)式都將失效。
- -w:將抓包數(shù)據(jù)輸出到文件中而不是標(biāo)準(zhǔn)輸出。可以同時配合"-G time"選項使得輸出文件每time秒就自動切換到另一個文件。可通過"-r"選項載入這些文件以進(jìn)行分析和打印。
- -r:從給定的數(shù)據(jù)包文件中讀取數(shù)據(jù)。使用"-"表示從標(biāo)準(zhǔn)輸入中讀取。
三種修飾符:
- type:指定ID的類型。
可以給定的值有host/net/port/portrange。例如"host foo",“net 128.3”,“port 20”,“portrange 6000-6008”。默認(rèn)的type為host。
- dir:指定ID的方向。
可以給定的值包括src/dst/src or dst/src and dst,默認(rèn)為src or dst。例如,"src foo"表示源主機(jī)為foo的數(shù)據(jù)包,"dst net 128.3"表示目標(biāo)網(wǎng)絡(luò)為128.3的數(shù)據(jù)包,"src or dst port 22"表示源或目的端口為22的數(shù)據(jù)包。
- proto:通過給定協(xié)議限定匹配的數(shù)據(jù)包類型。
常用的協(xié)議有tcp/udp/arp/ip/ether/icmp等,若未給定協(xié)議類型,則匹配所有可能的類型。例如"tcp port 21",“udp portrange 7000-7009”。
三、tcpdump示例
3.1、默認(rèn)啟動,不帶參數(shù)
$ tcpdump默認(rèn)情況下,直接啟動tcpdump將監(jiān)視第一個網(wǎng)絡(luò)接口(非lo口)上所有流通的數(shù)據(jù)包。這樣抓取的結(jié)果會非常多,滾動非常快。
3.2、tcpdump -D 命令列出可以抓包的網(wǎng)絡(luò)接口
$ tcpdump -D
3.4、監(jiān)視指定網(wǎng)絡(luò)接口的數(shù)據(jù)包
如果不指定網(wǎng)卡,默認(rèn)tcpdump只會監(jiān)視第一個網(wǎng)絡(luò)接口,如ens33。
3.5、對本機(jī)的udp 123端口進(jìn)行監(jiān)視(123為ntp的服務(wù)端口)
$ tcpdump udp port 1233.6、監(jiān)視指定網(wǎng)絡(luò)的數(shù)據(jù)包,如本機(jī)與192.168網(wǎng)段通信的數(shù)據(jù)包,"-c 10"表示只抓取10個包
$ tcpdump -c 10 net 192.1683.7、抓取ping包
$ tcpdump -c 5 -nn -i ens33 icmp如果明確要抓取主機(jī)為192.168.182.130對本機(jī)的ping,則使用and操作符。
$ tcpdump -c 5 -nn -i ens33 icmp and src 192.168.182.130
注意不能直接寫icmp src 192.168.182.130,因為icmp協(xié)議不支持直接應(yīng)用host這個type。
3.9、抓取到本機(jī)22端口包
$ tcpdump -c 10 -nn -i bond0 tcp dst port 224.0、解析包數(shù)據(jù)
$ tcpdump -c 2 -q -XX -vvv -nn -i bond0 tcp dst port 22
4.1、參數(shù)只抓取和特定主機(jī)相關(guān)的數(shù)據(jù)包
4.2、保存抓包數(shù)據(jù)
tcpdump 提供了保存抓包數(shù)據(jù)的功能以便后續(xù)分析數(shù)據(jù)包,也可以利用wireshark等圖形化工具進(jìn)行分析。
1)使用 -w 選項來保存數(shù)據(jù)包而不是在屏幕上顯示出抓取的數(shù)據(jù)包
$ tcpdump -i any -c10 -nn -w webserver.pcap port 22該命令將抓取的數(shù)據(jù)包保存到文件 webserver.pcap。后綴名 pcap 表示文件是抓取的數(shù)據(jù)包格式。
2)tcpdump 將數(shù)據(jù)包保存在二進(jìn)制文件中,所以不能簡單的用文本編輯器去打開它。使用 -r 選項參數(shù)來閱讀該文件中的報文內(nèi)容
$ tcpdump -nn -r webserver.pcap總結(jié)
以上是生活随笔為你收集整理的Linux网络抓包工具tcpdump的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(2744):重读vue电商网站
- 下一篇: Linux下网络抓包工具(ngrep)