简介
tcpdump
是一个运行在命令行下的的数据包分析器,它允许用户拦截和显示发送或接收通过网络连接到该台计算机的 TCP/IP
数据包或者其他协议的数据包。它支持针对网络层、协议、主机、网络或端口的过滤,并提供 and
、 or
、 not
等逻辑语句来帮助用户去掉无用的信息。
还有一些功能相同的工具,类似于 wireshark
,不过它是由图形化界面的,而 tcpdump
只有命令行。
使用规范
1 | tcpdump [option] [proto] [dir] [type] |
关于其中各种参数的含义:
option
: 可选参数。proto
: 协议类过滤器。根据协议进行过滤,可识别的关键词有tcp
、udp
、ip
、icmp
等。dir
: 流向类过滤器。根据数据包的流向进行过滤,可识别的关键词有src
、dst
,同时也可以使用逻辑运算符及逆行组合。type
: 类型类过滤器。可识别的关键词有host
、net
、port
、portrange
等。
可选参数
-a
将网络地址和广播地址转变成名字。
-c
捕获 count
个包 tcpdump
就退出。
-d
打印出易读的包匹配码。-dd
:以C语言的形式打印出包匹配码。-ddd
:以十进制数的形式打印出包匹配码。
-e
每行的打印输出中将包括数据包的数据链路层头部信息。
-f
将外部的 Internet
地址以数字的形式打印出来。
-F
从指定的文件中读取表达式,忽略其它的表达式。
-i
指定要过滤的网卡接口,如果要查看所有网卡可以 -i any
。
-l
使标准输出变为缓冲行形式。
-n
不把 ip
转化成域名。直接显示 ip
,避免执行 DNS lookups
过程,这样解析速度会快很多。-nn
: 不把协议和端口号转化成名字,速度也会快很多。
-N
不打印出 host
的域名部分。如果设置了此选现,tcpdump
将会打印 'nic'
而不是 'nic.ddn.mil'
。
-q
简洁地打印输出。即打印很少的协议相关信息, 从而输出行都比较简短.
-Q
选择是入方向还是出方向的数据包,可选项有:in
、out
、inout
。
-r
使用 -r
是从文件中读取数据。
-t
在每行的输出中不输出时间。-tt
:在每行的输出中会输出时间戳。-ttt
:输出每两行打印的时间间隔(以毫秒为单位)。-tttt
:在每行打印的时间戳之前添加日期的打印(此种选项,输出的时间最直观)。
-T
将监听到的包直接解释为指定的类型的报文,常见的类型有 rpc
(远程过程调用)和 snmp
(简单网络管理协议)。
-v
产生详细的输出。比如包的 TTL
、id
标识,数据包长度,以及 IP
包的一些选项。同时它还会打开一些附加的包完整性检测,比如对 IP
或 ICMP
包头部的校验和。-vv
: 产生比 -v
更详细的输出。比如 NFS
回应包中的附加域将会被打印, SMB
数据包也会被完全解码。-vvv
: 产生比 -vv
更详细的输出。比如 telent
时所使用的 SB
、SE
选项将会被打印,如果 telnet
同时使用的是图形界面,其相应的图形选项将会以 16
进制的方式打印出来。
-w
使用 -w
参数后接一个以 .pcap
后缀命令的文件名,就可以将 tcpdump
抓到的数据保存到文件中。
-x
以 16
进制的形式打印每个包的头部数据(但不包括数据链路层的头部)。-xx
:以 16
进制的形式打印每个包的头部数据(包括数据链路层的头部)。
-X
以 16
进制和 ASCII
码形式打印出每个包的数据(但不包括连接层的头部),这在分析一些新协议的数据包很方便。-XX
:以 16
进制和 ASCII
码形式打印出每个包的数据(包括连接层的头部),这在分析一些新协议的数据包很方便。
输出解析
tcpdump
的输出内容比较多但确是有规律的:
1 | 15:26:22.011621 IP 192.168.5.6.15605 > 192.168.5.10.5920 : Flags [P.], seq 49:97, ack 106048, win 4723, length 48 |
其中输出的内容总共可以分为七个部分:
- 第一列: 时间。
- 第二列: 网络协议。
- 第三列: 发送方的
IP
地址 + 端口号。 - 第四列: 箭头表示数据流向。
- 第五列: 接收方的
IP
地址 + 端口号。 - 第六列: 冒号。
- 第七列: 数据包的内容,其中包含
Flags
标识符、seq
号 、ack
号、win
窗口、length
长度。(关于这里的标识符信息参考TCP
协议解析)
常用 tcpdump 命令
1、基于 IP
地址过滤
1 | tcpdump host 192.168.1.1 |
2、基于网段过滤
1 | tcpdump net 192.168.10.0/24 |
3、基于端口过滤
1 | tcpdump port 8080 |
4、基于协议过滤
1 | tcpdump tcp |
引用
个人备注
此博客内容均为作者学习所做笔记,侵删!
若转作其他用途,请注明来源!