Linux查看网卡数据包工具tcpdump详解及实例

Linux网卡数据包查看工具tcpdump输出的是网络接口上信息包的包头数据,可以自定义表达式用于匹配所需要的数据。它使用了独立于系统的libpcap接口,而libpcap是linux的网络数据包捕获函数包,大多数网络监控软件都以它为基础。

如果系统提示无此命令,请安装tcpdump工具:

yum -y install tcpdump

参数说明

参数 说明
-a 将网络地址和广播地址转换成名字
-A 以ASCII格式打印出所有分组,并将链路层头最小化,以便捕获web页面内容
-b 在数据链路层上选择协议,包括:ip、arp、rarp、ipx
-B <size> 设置系统捕获缓冲区大小
-c <n> 收到n个分组后停止
-C <size> 配合-w参数,用于指定写入文件的文件大小
-d 将匹配信息包的代码用汇编格式显示
-dd 将匹配信息包的代码用C语言程序段格式显示
-ddd 将匹配信息包的代码用十进制格式显示
-D 列出系统中所有可以用以tcpdump截包的网络接口
-e 在输出行打印数据链路层的头部信息
-f 将外部internet地址以数字形式打印显示
-F 从指定文件中读取表达式,忽略命令行中的表达式
-G <time> 指定进行后面的参数的操作的间隔时间(秒)
-i <device> 指定抓取数据包的接口
-K 跳过TCP校验和验证
-l 使标准输出变成缓冲行形式,可以把数据导出到文件
-L 列出网络接口的已知数据链路
-m <module> 从文件 module 导入 SMI MIB 模块定义
-M <secret> 指定TCP-MD5选项的验证码
-n 不把网络地址换成名字
-nn 直接以ip和端口显示
-N 输出主机名中的域名部分
-O 不允许分组匹配代码优化程序
-p 不将网络接口设置为混杂模式
-Q <direct> 选择捕获的数据包的方向,并非所有平台可用,值为:in或out或inout
-q 只输出较少的信息
-r <file> 从指定文件读取数据包,一般只能是通过-w生成的
-S 用绝对而非相对数值列出TCP关联数
-s <n> 从每个分组中读取前n个字节,默认68,-s 0表示不限
-t 在每一行转储行上省略时间戳显示
-tt 在每一行中输出非格式化的时间戳
-ttt 在每一行输出本行和前面一行之间的时间差
-tttt 在每一行中输出由date处理的默认格式的时间戳
-ttttt 以微秒形式打印时间戳
-T 将监听到的包直接解析为指定的类型的报文,常见类型:rpc、cnfp、snmp
-u 输出未解码的NFS句柄
-v | -vv | -vvv 输出的信息详细度递增
-w 将结果输出到文件中,输出的文件以.pcap作为后缀,可以在其他平台上用wireshark打开
-W <n> 限制文件数量不超过n个
-X | -XX 以十六进制与ASCII输出,抓取http等明文传输协议

案例分享

# 抓取包含10.10.200.1的数据包
tcpdump -i ens33 -vnn host 10.10.200.1

# 抓取包含10.10.200.0/24网段的数据包
tcpdump -i ens33 -vnn net 10.10.200.0/24
tcpdump -i ens33 -vnn net 10.10.200.0 mask 255.255.255.0

# 抓取包含端口22的数据包
tcpdump -i ens33 -vnn port 22

# 抓取udp/tcp/icmp/arp协议的数据包
tcpdump -i ens33 -vnn udp
tcpdump -i ens33 -vnn tcp
tcpdump -i ens33 -vnn icmp
tcpdump -i ens33 -vnn igmp
tcpdump -i ens33 -vnn arp

# 抓取ip协议的数据包
tcpdump -i ens33 -vnn ip proto ip
tcpdump -i ens33 -vnn ip

# 抓取源ip是8.8.8.8的数据包
tcpdump -i ens33 -vnn src host 8.8.8.8

# 抓取目标ip是8.8.8.8的数据包
tcpdump -i ens33 -vnn dst host 8.8.8.8

# 抓取源端口是80的数据包
tcpdump -i ens33 -vnn src port 80

# 抓取源ip是8.8.8.8且目的端口是80的数据包
tcpdump -i ens33 -vnn src host 8.8.8.8 and dst port 80

# 抓取源ip是8.8.8.8或者端口是80的数据包
tcpdump -i ens33 -vnn src host 8.8.8.8 or port 80

# 抓取源ip是8.8.8.8且端口不是22的数据包
tcpdump -i ens33 -vnn src host 8.8.8.8 and not port 22

# 抓取源ip是8.8.8.8且端口是80,或源ip是10.10.10.10且目的端口是443的数据包
tcpdump -i ens33 -vnn \(src host 8.8.8.8 and port 80 \) or \(src host 10.10.10.10 and dst prot 443\)

# 把抓取的数据包记录存到/opt/ipfile文件中,当抓取100个数据包后就退出程序
tcpdump -i ens33 -c 100 -w /opt/capfile

# 从/opt/ipfile记录中读取tcp协议的数据包。
tcpdump -i ens33 -r /opt/ipfile tcp

# 从/opt/ipfile记录中读取包含10.10.10.58的数据包。
tcpdump -i ens33 -r /opt/ipfile host 10.10.10.58

# 过滤数据包类型是多播并且端口既不是22也不是icmp协议的数据包
tcpdump -i ens33 ether multicast and not port 22 and 'not icmp'

# 过滤协议类型是ip并且目标端口是22的数据包
tcpdump -i ens33 -n ip and dst prot 22

# 过滤抓取指定mac地址、指定协议类型是arp的数据包
tcpdump -i ens33 ether src host 00:0c:29:9a:1f:4e and arp

# 过滤抓取协议类型是ospf的数据包
tcpdump -i ens33 ip proto ospf

# 过滤长度大于200字节的报文
tcpdump -i ens33 greater 200


# 查看TCP报文里面更详细的数据
tcpdump tcp[字节偏移:字节长度]

# 指定ip包头第10个字节(协议值)为6(TCP协议)
tcpdump -i ens33 -c 1 -vnn ip[9]=6

# 指定保存文件的间隔
tcpdump -i ens33 -vnn -G 5 -w /opt/capfile-%Y_%m%d_%H%M_%S

原创文章禁止转载:技术学堂 » Linux查看网卡数据包工具tcpdump详解及实例

精彩评论

8+2=

感谢您的支持与鼓励

支付宝扫一扫打赏

微信扫一扫打赏