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详解及实例