Linux tcpdump

tcpdump 根据用户自定义的规则截取网络数据包,并输出内容的工具。
它支持针对网络层、协议、主机、网络或端口的过滤,并提供 andornot 等逻辑语句来帮助你去掉无用的信息。

一、tcpdump 抓包常用参数

参数 说明
-c count 指定要抓取的包数量,将在接受到 count 个数据包后退出
-i interface 指定 tcpdump 需要监听的接口。默认会抓取第一个网络接口(接口编号最小的配置可用的)
-F file 使用 file 文件中的抓包规则进行抓包。此时命令行的规则失效
-s snaplen 设置 tcpdump 抓数据包的长度, 如果不设置默认将会是68字节
-T type 指定 tcpdump 抓取某种协议的包。aodvcnfprtprtcpsnmptftpvatwb
-y datalinktype 设置 tcpdump 只捕获数据链路层协议类型是 datalinktype 的数据包

二、tcpdump 输出常用参数

参数 说明
-D 打印系统中所有 tcpdump 可进行抓包的网络接口
-q 快速输出,只输出较少的信息
-n 用 ip 的方式显示主机地址
-e 每行的输出中将包括数据包的数据链路层头部信息
-L 列出指定网络接口所支持的数据链路层的类型后退出
-O 禁用包匹配时的优化代码。当怀疑某些 bug 是由优化代码引起时可以使用
-w file 把数据写入文件。 这些包数据可在随后通过 -r 命令来进行分析和打印
-W filecount -C file_size 一起使用,限制打开的文件数量, 并且当文件数超过 filecount 设置的限制时,次循环替代之前的文件
-C file_size 将 tcpdump 抓取的数据保存到文件中。当文件大于 file_size 时,创建新的记录文件。与 -w file 一起使用
-r file 读取 -w file 中生成的文件。使用 "-" 表示从标准输入中读取。
-t 在每行输出中不打印时间戳
-tt 不对每行输出的时间进行格式处理
-ttt tcpdump 输出时, 每两行打印之间会延迟一个段时间(以毫秒为单位)
-tttt 在每行打印的时间戳之前添加日期的打印
-X tcpdump 会打印每个包的头部数据, 同时会以16进制和ASCII码形式打印出每个包的数据
-XX -X 的基础上增加数据链路层的头部信息
-v 产生详细的输出,如:生存时间、标识、总长度等。-vv-vvv 一个比一个内容多
-d 将匹配信息包的代码用汇编格式显示
-dd 将匹配信息包的代码用C语言程序段格式显示
-ddd 将匹配信息包的代码用十进制格式显示

三、表达式

表达式用于筛选输出哪些类型的数据包,如果没有给定表达式,所有的数据包都将输出。
表达式由一个或多个表达元组成(表达元:组成表达式的基本元素)。
一个表达元通常由一个或多个修饰符,后跟一个名字或数字组成。
有三种不同类型的修饰符:typedir 以及 proto

修饰符 说明 示例
type 指定抓取类型。默认为 host
type
          host: 表示主机地址
          net:网络
          port:端口
          portrange:端口范围


host 128.34.1.10
net 128.3
port 20
portrange 5000-6000
dir 指定抓取数据包方向。默认为 src or dst
dir:
          src: 源地址
          dst:目标地址
          src or dst:源地址或目标地址
          src and dst:源地址且目标地址
src 172.12.45.2:表示源主机为 172.12.45.2 的数据包
dst net 128.3:表示目标网络为128.3的数据包
src or dst port 22:表示源或目的端口为22的数据包
src and dst port 22:表示源且目的端口为22的数据包
proto 指定抓取数据包协议类型
proto
          wlan:无线局域网协议
          ip:ipv4 协议
          ip6:ipv6协议
          arp:地址解析协议
          rarp:反向地址解析协议
          decnet:机器互联的网络协议
          tcp
          upd
ether src 145.23.34.33:从以太网地址 145.23.34.33 来的数据包
arp net 128.3:发往或来自128.3 网络的 arp 协议数据包
tcp port 21:发送或接收端口为 21 的 tcp 协议数据包
udp portrange 7000-7009:发送或接收端口范围为 7000-7009 的 udp 协议数据包

四、示例

1. 抓取指定网卡数据包

不指定网卡默认是第一个

root@test-physical:~# tcpdump -i eth2
listening on eth2, link-type EN10MB (Ethernet), capture size 262144 bytes
09:49:32.521925 IP 172.16.245.1 > 172.16.245.153: ICMP echo request, id 62819, seq 0, length 64
09:49:32.521942 IP 172.16.245.153 > 172.16.245.1: ICMP echo reply, id 62819, seq 0, length 64
2. 抓取指定 host 的数据包
root@test-physical:~# tcpdump host 172.16.245.1
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
14:24:39.166981 IP 172.16.245.145.ssh > 172.16.245.1.62592: Flags [P.], seq 2121937010:2121937198, ack 564783646, win 315, options [nop,nop,TS val 297485967 ecr 2044646503], length 188
14:24:39.167281 IP 172.16.245.1.62592 > 172.16.245.145.ssh: Flags [.], ack 188, win 2045, options [nop,nop,TS val 2044646913 ecr 297485967], length 0
3. 抓取 hostA 和 hostB 之间或 hostA 和 hostC 之间的通讯

tcpdump host hostA and \(hostB or hostC \)

root@test-physical:~# tcpdump host 172.16.245.1 and \(172.16.245.145 or 172.16.245.146\)
4. 抓取 hostA 与所有主机之间的通讯,但是不包括 hostB

tcpdump ip host hostA and not hostB

root@test-physical:~# tcpdump ip host 172.16.245.1 and not 172.16.245.145
5. 抓取指定源地址或 IP 的数据包

tcpdump src host hostname
抓取源地址是 baidu.com 的数据包

root@test-physical:~# tcpdump src host baidu.com
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
14:46:33.484762 IP 220.181.38.148 > 172.16.245.153: ICMP echo reply, id 38286, seq 1, length 64
14:46:34.487862 IP 220.181.38.148 > 172.16.245.153: ICMP echo reply, id 38286, seq 2, length 64
14:46:35.491003 IP 220.181.38.148 > 172.16.245.153: ICMP echo reply, id 38286, seq 3, length 64
6. 抓取指定目标地址或 IP 的数据包

tcpdump dst host hostname
抓取目标地址是 baidu.com 的数据包

root@test-physical:~# tcpdump dst host baidu.com
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
14:41:32.028922 IP 172.16.245.153 > 220.181.38.148: ICMP echo request, id 38241, seq 1, length 64
14:41:33.030989 IP 172.16.245.153 > 220.181.38.148: ICMP echo request, id 38241, seq 2, length 64
14:41:34.034075 IP 172.16.245.153 > 220.181.38.148: ICMP echo request, id 38241, seq 3, length 64
7. 抓取指定端口和主机的数据包

tcpdump tcp port portNumber and host hostname

root@test-physical:~# tcpdump -i eth0 port 80 and host www.baidu.com
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
15:00:55.976759 IP 192.168.50.145.51677 > 61.135.169.121.443: Flags [F.], seq 3695524080, ack 157044170, win 4096, length 0
15:00:55.976789 IP 192.168.50.145.51676 > 61.135.169.125.443: Flags [F.], seq 1010083189, ack 1311922281, win 4096, length 0
15:00:55.976822 IP 192.168.50.145.51675 > 61.135.169.121.443: Flags [F.], seq 1355311995, ack 556334558, win 4096, length 0
8. 抓取指定网络的数据包

tcpdump -c count net netIP
抓取本机与 172.16 网段通信的 10 个数据包

root@test-physical:~# tcpdump -c 10 net 172.16
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
15:03:54.887095 IP 172.16.245.145.ssh > 172.16.245.1.62592: Flags [P.], seq 2240238270:2240238458, ack 564887890, win 315, options [nop,nop,TS val 298074897 ecr 2046987344], length 188
15:03:54.887189 IP 172.16.245.1.62592 > 172.16.245.145.ssh: Flags [.], ack 188, win 2045, options [nop,nop,TS val 2046987853 ecr 298074897], length 0
15:03:54.887510 IP 172.16.245.153.42352 > public1.114dns.com.domain: 52224+ PTR? 1.245.16.172.in-addr.arpa. (43)
15:03:55.322557 ARP, Request who-has 172.16.245.153 tell 172.16.245.2, length 46
15:03:55.322578 ARP, Reply 172.16.245.153 is-at 00:0c:29:4b:87:05 (oui Unknown), length 28
15:03:55.322652 IP 118.144.77.165.4506 > 172.16.245.153.54822: Flags [R.], seq 3084328717, ack 449394572, win 64240, length 0
15:03:57.577262 IP 172.16.245.1 > 172.16.245.145: ICMP echo request, id 14029, seq 0, length 64
15:04:14.911573 IP 172.16.245.145.ssh > 172.16.245.1.62592: Flags [P.], seq 188:560, ack 1, win 315, options [nop,nop,TS val 298079903 ecr 2046987853], length 372
15:04:14.911641 IP 172.16.245.153.38782 > public1.114dns.com.domain: 28450+ PTR? 114.114.114.114.in-addr.arpa. (46)
15:04:24.940290 IP 172.16.245.145.ssh > 172.16.245.1.62592: Flags [P.], seq 560:708, ack 1, win 315, options [nop,nop,TS val 298082410 ecr 2047007856], length 148
10 packets captured
37 packets received by filter
25 packets dropped by kernel
9. 抓取 ICMP 包。ping包

tcpdump -i networkCard icmp

root@test-physical:~# tcpdump -i eth0 icmp

指定某主机对本机的 ping 包

root@test-physical:~# tcpdump -i eth0 icmp and src 172.16.245.145
10. 抓包并保存到指定文件

tcpdump -i networkCard -c count -w filePath
抓取的数据包保存到 /var/log/tcpdump.log 文件中,当抓取100个数据包后就退出程序

root@test-physical:~# tcpdump -i eth0 -c 100 -w /var/log/tcpdump.log
11. 读取抓包保存文件

tcpdump -i networkCard -r filePath
/var/log/tcpdump.log 中读取 tcp 协议的数据包

root@test-physical:~# tcpdump -i eth0 -r /var/log/tcpdump.log

读取文件中 host 是 172.16.245.145 的数据包

root@test-physical:~# tcpdump -i eth0 -r /var/log/tcpdump.logl host 172.16.245.145
12. 抓取多播并数据包

tcpdump -i networkCard ether multicast

root@test-physical:~# tcpdump -i ech0 ether multicast
13.解析数据包
root@test-physical:~# tcpdump -c 2 -q -XX -vvv -nn -i eth0 tcp dst port 22
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
15:10:54.514308 IP (tos 0x48, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52)
    172.16.245.1.62592 > 172.16.245.145.22: tcp 0
    0x0000:  000c 294b 8705 0050 56c0 0008 0800 4548  ..)K...PV.....EH
    0x0010:  0034 0000 4000 4006 f7c7 ac10 f501 ac10  .4..@.@.........
    0x0020:  f591 f480 0016 21ab 8aae 8587 68d2 8010  ......!.....h...
    0x0030:  07fe 4049 0000 0101 080a 7a08 f3cc 11c5  ..@I......z.....
    0x0040:  dcdc                                     ..
15:10:54.514643 IP (tos 0x48, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52)
    172.16.245.1.62592 > 172.16.245.145.22: tcp 0
    0x0000:  000c 294b 8705 0050 56c0 0008 0800 4548  ..)K...PV.....EH
    0x0010:  0034 0000 4000 4006 f7c7 ac10 f501 ac10  .4..@.@.........
    0x0020:  f591 f480 0016 21ab 8aae 8587 6ad6 8010  ......!.....j...
    0x0030:  07f7 3e4c 0000 0101 080a 7a08 f3cc 11c5  ..>L......z.....
    0x0040:  dcdc                                     ..
2 packets captured
2 packets received by filter
0 packets dropped by kernel
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容

  • 简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者...
    保川阅读 5,941评论 1 13
  • 简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者...
    JasonShi6306421阅读 1,229评论 0 1
  • tcpdump采用命令行方式对接口的数据包进行筛选抓取,其丰富特性表现在灵活的表达式上。 不带任何选项的tcpdu...
    SkTj阅读 413评论 0 0
  • tcpdump抓包命令 tcpdump是一个用于截取网络分组,并输出分组内容的工具。tcpdump凭借强大的功能和...
    Yihulee阅读 14,020评论 0 3
  • 前言 tcpdump 是一个很常用的网络包分析工具,可以用来显示通过网络传输到本系统的 TCP/IP 以及其他网络...
    王奥OX阅读 39,752评论 0 12