//系统
# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
# uname -r
3.10.0-862.el7.x86_64
//如果没有安装tcpdump命令,可以yum安装
# yum -y install tcpdump
//命令格式:
# traceroute [参数] [选项]
//使用示例
//监听来自ens33网卡且通信协议为ssh(缺省22端口)来源于172.16.30.90的数据包数据
# tcpdump -i ens33 -nn 'port 22 and src host 172.16.30.90'
//截获主机172.16.30.72和主机172.16.30.90或172.16.30.55的通信
//centos7版本需指定-i参数
# tcpdump -i ens33 host 172.16.30.72 and \(172.16.30.90 or 192.168.1.2\)
//截取本机的udp协议的ntp(缺省123端口)
# tcpdump -i ens33 udp port 123
//使用示例2
//-i 指定网卡名称 -c指定抓包数量 -nn指定以数字形式显示ip和port
# tcpdump -nn -i ens33 -c 100
//-w 把tcpdump抓到的数据存储到/tmp/text.cap文件内(文件为二进制文件,可以用wireshark查看)
# tcpdump -nn -i ens33 -c 100 -w /tmp/text.cap
//使用tcpdump查看的命令为
# tcpdump -r /tmp/text.cap
tcpdump 常用选项参数如下:
-A 数据包内容以ASCII显示,通常用来抓取网页的数据包数据.
-a 试着 把 网络和广播地址转换成名称.
-c 监听数据包数,如果没有带这个参数tcpdump会不断的监听,当收到count报文后退出.
-d 把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出.
-dd 把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出.
-ddd 把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出.
-e 显示数据链路层的数据包.
-f 用数字显示网际网络地址.
-F 指定内含表达方式的文件.
-i 监听的网络接口.
-l 使用标准输出列的缓冲区.
-n 不把主机的网络地址转换成ip
-N 不列出域名.
-O 不将数据包编码最佳化,这个选项只有当你怀疑优化器有bug时才有用.
-p 不让网络界面进入混杂模式.
-q 快速输出,仅列出少数的传输协议信息.
-r 从指定的文件读取数据包数据.
-s 设置每个数据包的大小.
-T 强制将表达方式所指定的数据包转译成设置的数据包类型.目前已知的类型有: rpc (远程过程调用 Remote Procedure Call), rtp
(实时应用协议 Real-Time Applications protocol), rtcp (实时应用控制协议 Real-Time Applications control protocol), vat (可视音频工具
Visual Audio Tool), 和 wb (分布式白板 distributed White Board).
-S 用绝对而非相对数值列出TCP关联数.
-t 禁止显示时戳标志.
-tt 显示未格式化的时戳标志.
-v 详细显示指令执行过程. 例如, 显示IP数据报中的生存周期和服务类型.
-vv 更详细显示指令执行过程. 例如,显示NFS应答报文的附加域.
-w 把数据包数据写入指定的文件.
-x 以 16进制数形式显示每一个报文(去掉链路层报头后).可以显示较小的完整报文,否则只显示snaplen个字节.
expression表达式:
用来选择要转储的数据报.如果没有指定expression , 就转储网络的全部报文.否则, 只转储相对expression为逻辑为真的数据包报文.
expression 由一个或多个原语(primitive)组成.原语通常由一个标识(id,名称或数字),和标识前面的一个或多个修饰子(qualifier)组成.修饰子有三种不同的类型:
type 类型修饰子指出标识名称或标识数字代表什么类型的东西.可以使用的类型有host,net和port.例如,`host foo', `net128.3', `port 20'.如果不指定类型修饰子, 就使用缺省的host .
dir 方向修饰子 指出 相对于 标识 的 传输方向 (数据是 传入还是传出 标识). 可以使用的 方向 有 src, dst, src or dst 和 src and dst.
例如, `src foo', `dst net 128.3', `src or dst port ftp-data'. 如果 不指定 方向修饰子, 就使用 缺省的 src or dst . 对于 `null'
链路层 (就是说 象 slip 之类的 点到点 协议), 用 inbound 和 outbound 修饰子 指定 所需的 传输方向.
proto 协议修饰子 要求 匹配 指定的协议. 可以使用的 协议 有: ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp 和 udp.
例如, `ether src foo', `arp net 128.3', `tcp port 21'. 如果 不指定 协议修饰子, 就使用 所有 符合 类型 的 协议. 例如, `src foo'
指 `(ip 或 arp 或 rarp) src foo' (注意后者不符合语法), `net bar' 指 `(ip 或 arp 或 rarp) net bar', `port 53' 指 `(tcp 或 udp)
port 53'.
更复杂的过滤器表达式可以通过 and, or 和 not 连接原语来组建. 例如, `host foo and not port ftp and not port ftp-data'.
允许的 原语 有:
dst host host
如果报文中IP的目的地址域是host, 则逻辑为真.host既可以是地址,也可以是主机名.
src host host
如果报文中IP的源地址域是host,则逻辑为真.
host host
如果报文中IP的源地址域或者目的地址域是host,则逻辑为真.上面所有的host表达式都可以加上ip,arp,或rarp关键字做前缀,就象:ip host host
它等价于:
ether proto \ip and host host
如果host是拥有多个IP地址的主机名,它的每个地址都会被查验.
ether dst ehost
如果报文的以太目的地址是ehost,则逻辑为真. Ehost既可以是名字 (/etc/ethers 里有), 也可以是数字
ether src ehost
如果报文的以太源地址是ehost,则逻辑为真.
ether host ehost
如果报文的以太源地址或以太目的地址是ehost,则逻辑为真.
gateway host
如果报文把host当做网关, 则逻辑为真.
dst net net
如果报文的IP目的地址属于网络号net,则逻辑为真.
src net net
如果报文的IP源地址属于网络号net,则逻辑为真.
net net
如果报文的IP源地址或目的地址属于网络号net, 则逻辑为真.
net net mask mask
如果IP地址匹配指定网络掩码(netmask)的net,则逻辑为真.本原语可以用src或dst修饰.
net net/len
如果IP地址匹配指定网络掩码的net, 则逻辑为真.
dst port port
如果报文是ip/tcp或ip/udp, 并且目的端口是port, 则逻辑为真.
src port port
如果报文的源端口号是port,则逻辑为真.
port port
如果报文的源端口或目的端口是port,则逻辑为真.
less length
如果报文的长度小于等于length,则逻辑为真. 它等同于:len <= length.
greater length
如果报文的长度大于等于length,则逻辑为真. 它等同于:len >= length.
ip proto protocol
如果报文是IP数据报, 其内容的协议类型是protocol,则逻辑为真.
ether broadcast
如果报文是以太广播报文,则逻辑为真.关键字ether是可选的.
ip broadcast
如果报文是IP广播报文,则逻辑为真.Tcpdump检查全0和全1广播约定,并且检查本地的子网掩码.
ether multicast
如果报文是以太多目传送报文(multicast),则逻辑为真. 关键字ether是可选的.
ip multicast
如果报文是IP多目传送报文,则逻辑为真.
☞转载来源