目录
概述
- TcpDump是Linux中强大的网络数据采集分析工具之一。
- 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。
- 它支持针对网络层、协议、主机、网络或端口的过滤,并提供not、and、or等逻辑语句来帮助你去掉无用的信息。
- 普通用户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息。
- tcpdump的总的输出格式为:系统时间 来源主机.端口 > 目标主机.端口 数据包参数
tcpdump 语法格式
在centos7中,通过man tcpdump命令查看
tcpdump [ -AbdDefhHIJKlLnNOpqStuUvxX\#] [-B buffer_size ]
[ -c count]
[ -C file_size ] [-G rotate_seconds ] [ -F file ]
[ -i interface ] [ -j tstamp_type ] [-m module ] [-M secret]
[ --number ] [ -Q|-P in|out|inout ]
[ -r file ] [-V file ] [ -s snaplen ] [ -T type ] [ -w file ]
[ -W filecount ]
[ -E spi@ipaddr algo:secret,... ]
[ -y datalinktype ] [ -z postroate-command ] [ -Z user ]
[ --time-stamp-precision=tstamp_precision ]
[ --immediate-mode ] [ --version ]
[ expression ]
相关参数详解
-a 将网络地址和广播地址转变成名字
-A 以ASCII格式打印出所有分组,并将链路层的头最小化
-b 数据链路层上选择协议,包括ip/arp/rarp/ipx都在这一层
-c 指定收取数据包的次数,即在收到指定数量的数据包后退出tcpdump
-d 将匹配信息包的代码以人们能够理解的汇编格式输出
-dd 将匹配信息包的代码以c语言程序段的格式输出
-ddd #将匹配信息包的代码以十进制的形式输出
-D 打印系统中所有可以监控的网络接口
-e 在输出行打印出数据链路层的头部信息
-f 将外部的Internet地址以数字的形式打印出来,即不显示主机名
-F 从指定的文件中读取表达式,忽略其他的表达式
-i 指定监听网络接口
-l 使标准输出变为缓冲形式,可以数据导出到文件
-L 列出网络接口已知的数据链路
-n 不把网络地址转换为名字
-N 不输出主机名中的域名部分,例如www.baidu.com只输出www
-nn 不进行端口名称的转换
-P 不将网络接口设置为混杂模式
-q 快速输出,即只输出较少的协议信息
-r 从指定的文件中读取数据,一般是-w保存的文件
-w 将捕获到的信息保存到文件中,且不分析和打印在屏幕
-s 从每个组中读取在开始的snaplen个字节,而不是默认的68个字节
-S 将tcp的序列号以绝对值形式输出,而不是相对值
-T 将监听到的包直接解析为指定的类型的报文,常见的类型有rpc(远程过程调用)和snmp(简单网络管理协议)
-t 在输出的每一行不打印时间戳
-tt 在每一行中输出非格式化的时间戳
-ttt 输出本行和前面以后之间的时间差
-tttt 在每一行中输出data处理的默认格式的时间戳
-u 输出未解码的NFS句柄
-v 输出稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息
-vv输出相信的保报文信息
过滤类型关键字
tcpdump过滤表达式大体可以分成三种过滤条件,“类型”、“方向”和“协议”
类型
host, net, port, portrange
例如:host 14.110.104.254 , net 128.3, port 20, portrange ‘6000-6008’
方向
src, dst, src or dst, src and dst
例如:src 14.110.104.254 , dst 14.110.104.254
协议
tcp, udp , icmp,ARP 等,若未给定协议类型,则匹配所有可能的类型
使用实例
打印出系统可以监控的网络接口
sudo tcpdump -D
# 在屏幕打印出系统可以监控的网络接口
捕获所有网络接口的数据包
sudo tcpdump -i any
# 该命令将捕获所有网络端口的数据包,并实时显示
按照协议过滤
sudo tcpdump -i enss33 arp
# 监听ens33接口中的arp协议信息
根据IP地址过滤
tcpdump -i ens33 host 39.156.66.10
39.156.66.10是指向baidu.com的IP,通过在另一窗口ping baidu.com得到
根据端口过滤
tcpdump -i ens33 -c 10 port 22
# -c 收到指定数据包后停止,过滤22端口数据
根据源IP和目标IP过滤
前提:另起一个窗口并,ping baidu.com
tcpdump -i ens33 src baidu.com
tcpdump -i ens33 src baidu.com and dst 192.168.59.144
and / or 的用法
tcpdump -i ens33 -c 10 'host 192.168.59.144 and (192.168.59.1 or 192.168.48.1)'
# 抓取主机192.168.59.144和主机192.168.59.1 或者 主机192.168.48.1之间的通信
not关键字
tcpdump -i ens33 -c 10 'host 192.168.59.144 and not port 22'
tcpdump -i ens33 -c 10 'host 192.168.59.144 and ! port 22'
将捕获内容输出到文件
tcpdump -i ens33 src 192.168.59.144 and dst 192.168.59.1 -w tcp.pcap
# -w 将捕获到的信息保存到文件中,且不分析和打印在屏幕
保存的.pcap文件需要使用wireshark工具打开。
安装tcpdump
如果系统中找不到tcpdum命令,可以使用yum install tcpdump命令进行安装;或者在安装系统时选择安装系统调试工具