首頁  >  文章  >  運維  >  抓包工具tcpdump用法說明

抓包工具tcpdump用法說明

巴扎黑
巴扎黑原創
2017-06-23 11:13:002210瀏覽

本文目錄:

#1.1 tcpdump選項


1.2 tcpdump表達式

#1.3 tcpdump範例

# tcpdump採用命令列方式對介面的封包進行篩選抓取,其豐富特性表現在靈活的表達式上。

不帶任何選項的tcpdump,預設會抓取第一個網路接口,且只有將tcpdump進程終止才會停止抓包。

例如:

shell> tcpdump -nn -i eth0 icmp
  • 以下是詳細的tcpdump用法。

  • 1.1 tcpdump選項
它的指令格式為:


tcpdump [ -DenNqvX ] [ -c count ] [ -F  ] [ -i interface ] [ -r -s snaplen ] [ - 注意,是最终要获取这么多个包。例如,指定若未指定该选项,将从系统接口列表中搜寻编号最小的已配置好的接口(不包括loopback接口,要抓取loopback接口使用tcpdump -i lo),
            :一旦找到第一个符合条件的接口,搜寻马上结束。可以使用-n:对地址以数字方式显式,否则显式为主机名,也就是说--N:不打印出host的域名部分。例如tcpdump将会打印而不是-P:指定要抓取的包是流入还是流出的包。可以给定的值为、和,默认为-s len:设置tcpdump的数据包抓取长度为len,如果不设置默认将会是65535字节。对于要抓取的数据包较大时,长度设置不够可能会产生包截断,若出现包截断,
      :输出行中会出现-----vv:产生比---:将抓包数据输出到文件中而不是标准输出。可以同时配合选项使得输出文件每time秒就自动切换到另一个文件。可通过-r:从给定的数据包文件中读取数据。使用表示从标准输入中读取。

所以常用的選項也就這幾個:

tcpdump -D

tcpdump -c num -i int -nn -XX -vvv

1.2 tcpdump表達式

表達式用於篩選輸出哪些類型的資料包,如果沒有給定表達式,所有的資料包都會輸出,否則只輸出表達式為true的包。在表達式中出現的shell元字元建議使用單引號包圍。

tcpdump的表達式由一個或多個"單元"組成,每個單元一般包含ID的修飾符和一個ID(數字或名稱)。有三種修飾符:

(1).type:指定ID的型別。

可以給定的值有host/net/port/portrange。例如"host foo","net 128.3","port 20","portrange 6000-6008"。預設的type為host。

(2).dir:指定ID的方向。

可以給定的值包括src/dst/src or dst/src and dst,預設為src or dst。例如,"src foo"表示來源主機為foo的資料包,"dst net 128.3"表示目標網路為128.3的資料包,"src or dst port 22"表示來源或目的連接埠為22的資料包。

(3).proto:透過給定協定限定匹配的資料包類型。


常用的協定有tcp/udp/arp/ip/ether/icmp等,若未給定協定類型,則符合所有可能的類型。例如"tcp port 21","udp portrange 7000-7009"。

所以,

一個基本的表達式單元格式為"proto dir type ID"

除了使用修飾符和ID組成的表達式單元,還有關鍵字表達式單元:gateway,broadcast,less,greater以及算​​術表達式。

表達式單元之間可以使用運算元" and / && / or / || / not / ! "進行連接
,從而組成複雜的條件表達式。如"host foo and not port ftp and not port ftp-data",這表示篩選的封包要滿足"主機為foo且端口不是ftp(端口21)和ftp-data(端口20)的包",常用端口和名字的對應關係可在linux系統中的/etc/service檔案中找到。

另外,同樣的修飾符可省略,如"tcp dst port ftp or ftp-data or domain"與"tcp dst port ftp or tcp dst port ftp-data or tcp dst port domain"意義相同,都表示套件的協定為tcp且目的連接埠為ftp或ftp-data或domain(連接埠53)。

使用括號"()"可以改變表達式的優先權,但要注意的是括號會被shell解釋,所以應該使用反斜線"\"轉義為"\(\)",在需要的時候,還需要包圍在引號中。

1.3 tcpdump範例

#(1).預設啟動

##

tcpdump

#預設情況下,直接啟動tcpdump會監視第一個網路介面(非lo埠)上所有流通的封包。這樣抓取的結果會非常多,滾動非常快。
(2).監視指定網路介面的封包

#
tcpdump -i eth1
如果不指定網路卡,預設tcpdump只會監視第一個網路接口,如eth0。

(3).監視指定主機的封包,例如所有進入或離開longshuai的封包

tcpdump host longshuai
# ####(4).列印helios<-->hot或helios<-->ace之間通訊的資料包############
tcpdump host helios and \( hot or ace \)
################################################# #####(5).列印ace與任何其他主機之間通訊的IP封包,但不包含與helios之間的封包############
tcpdump ip host ace and not helios
#### ##

(6).截获主机hostname发送的所有数据

tcpdump src host hostname

(7).监视所有发送到主机hostname的数据包

tcpdump dst host hostname

(8).监视指定主机和端口的数据包

tcpdump tcp port 22 and host hostname

(9).对本机的udp 123端口进行监视(123为ntp的服务端口)

tcpdump udp port 123

(10).监视指定网络的数据包,如本机与192.168网段通信的数据包,"-c 10"表示只抓取10个包

tcpdump -c 10 net 192.168

(11).打印所有通过网关snup的ftp数据包(注意,表达式被单引号括起来了,这可以防止shell对其中的括号进行错误解析)

shell> tcpdump 'gateway snup and (port ftp or ftp-data)'

(12).抓取ping包

[root@server2 ~]# tcpdump -c 5 -nn -i eth0 icmp 

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes12:11:23.273638 IP 192.168.100.70 > 192.168.100.62: ICMP echo request, id 16422, seq 10, length 6412:11:23.273666 IP 192.168.100.62 > 192.168.100.70: ICMP echo reply, id 16422, seq 10, length 6412:11:24.356915 IP 192.168.100.70 > 192.168.100.62: ICMP echo request, id 16422, seq 11, length 6412:11:24.356936 IP 192.168.100.62 > 192.168.100.70: ICMP echo reply, id 16422, seq 11, length 6412:11:25.440887 IP 192.168.100.70 > 192.168.100.62: ICMP echo request, id 16422, seq 12, length 645 packets captured6 packets received by filter0 packets dropped by kernel

如果明确要抓取主机为192.168.100.70对本机的ping,则使用and操作符。

[root@server2 ~]# tcpdump -c 5 -nn -i eth0 icmp and src 192.168.100.62tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes12:09:29.957132 IP 192.168.100.70 > 192.168.100.62: ICMP echo request, id 16166, seq 1, length 6412:09:31.041035 IP 192.168.100.70 > 192.168.100.62: ICMP echo request, id 16166, seq 2, length 6412:09:32.124562 IP 192.168.100.70 > 192.168.100.62: ICMP echo request, id 16166, seq 3, length 6412:09:33.208514 IP 192.168.100.70 > 192.168.100.62: ICMP echo request, id 16166, seq 4, length 6412:09:34.292222 IP 192.168.100.70 > 192.168.100.62: ICMP echo request, id 16166, seq 5, length 645 packets captured5 packets received by filter0 packets dropped by kernel

注意不能直接写icmp src 192.168.100.70,因为icmp协议不支持直接应用host这个type。

(13).抓取到本机22端口包

[root@server2 ~]# tcpdump -c 10 -nn -i eth0 tcp dst port 22  tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes12:06:57.574293 IP 192.168.100.1.5788 > 192.168.100.62.22: Flags [.], ack 535528834, win 2053, length 012:06:57.629125 IP 192.168.100.1.5788 > 192.168.100.62.22: Flags [.], ack 193, win 2052, length 012:06:57.684688 IP 192.168.100.1.5788 > 192.168.100.62.22: Flags [.], ack 385, win 2051, length 012:06:57.738977 IP 192.168.100.1.5788 > 192.168.100.62.22: Flags [.], ack 577, win 2050, length 012:06:57.794305 IP 192.168.100.1.5788 > 192.168.100.62.22: Flags [.], ack 769, win 2050, length 012:06:57.848720 IP 192.168.100.1.5788 > 192.168.100.62.22: Flags [.], ack 961, win 2049, length 012:06:57.904057 IP 192.168.100.1.5788 > 192.168.100.62.22: Flags [.], ack 1153, win 2048, length 012:06:57.958477 IP 192.168.100.1.5788 > 192.168.100.62.22: Flags [.], ack 1345, win 2047, length 012:06:58.014338 IP 192.168.100.1.5788 > 192.168.100.62.22: Flags [.], ack 1537, win 2053, length 012:06:58.069361 IP 192.168.100.1.5788 > 192.168.100.62.22: Flags [.], ack 1729, win 2052, length 010 packets captured10 packets received by filter0 packets dropped by kernel

(14).解析包数据

[root@server2 ~]# tcpdump -c 2 -q -XX -vvv -nn -i eth0 tcp dst port 22tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes12:15:54.788812 IP (tos 0x0, ttl 64, id 19303, offset 0, flags [DF], proto TCP (6), length 40)192.168.100.1.5788 > 192.168.100.62.22: tcp 00x0000:  000c 2908 9234 0050 56c0 0008 0800 4500  ..)..4.PV.....E.0x0010:  0028 4b67 4000 4006 a5d8 c0a8 6401 c0a8  .(Kg@.@.....d...0x0020:  643e 169c 0016 2426 5fd6 1fec 2b62 5010  d>....$&_...+bP.0x0030:  0803 7844 0000 0000 0000 0000            ..xD........12:15:54.842641 IP (tos 0x0, ttl 64, id 19304, offset 0, flags [DF], proto TCP (6), length 40)192.168.100.1.5788 > 192.168.100.62.22: tcp 00x0000:  000c 2908 9234 0050 56c0 0008 0800 4500  ..)..4.PV.....E.0x0010:  0028 4b68 4000 4006 a5d7 c0a8 6401 c0a8  .(Kh@.@.....d...0x0020:  643e 169c 0016 2426 5fd6 1fec 2d62 5010  d>....$&_...-bP.0x0030:  0801 7646 0000 0000 0000 0000            ..vF........2 packets captured2 packets received by filter0 packets dropped by kernel

总的来说,tcpdump对基本的数据包抓取方法还是较简单的。只要掌握有限的几个选项(-nn -XX -vvv -i -c -q),再组合表达式即可。

 

姊妹篇:网络扫描工具nmap

 

回到系列文章大纲:

转载请注明出处:

以上是抓包工具tcpdump用法說明的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn