Debian9 安装 tcpdump 工具
apt-get install tcpdump
使用
不指定任何参数,默认监听第一块网卡上经过的数据包
tcpdump
监听指定网卡经过的数据包
tcpdump -i ens33
监听所有网卡经过的数据包
tcpdump -i any
监听指定的主机
例子:监听本机跟主机 192.168.3.1 之间往来的通信包。
备注:出、入的包都会被监听。
tcpdump host 192.168.3.1
指定来源、目标地址的通信
指定来源
tcpdump src host hostname
指定目标地址
tcpdump dst host hostname
如果不指定src跟dst,那么来源或者目标是 hostname 的通信都会被监听
tcpdump host hostname
监听指定的端口或者端口范围
tcpdump port 80
tcpdump portrange 22-125
监听 TCP/UDP
OSI七层网络模型传输层有TCP、UDP两种协议,假如只想监听TCP协议的数据包
tcpdump tcp
来源主机+端口+TCP
监听来自主机 192.168.3.1 在端口22上的TCP数据包
tcpdump tcp port 22 and src host 192.168.3.1
监听特定主机之间的通信
tcpdump ip host 192.168.3.1 and 192.168.3.129
192.168.3.1 除了和 192.168.3.129 之外的主机之间的通信
tcpdump ip host 192.168.3.1 and ! 192.168.3.129
稍微详细点的例子
tcpdump tcp -i ens33 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.3.0/24 -w ./target.cap
(1)tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型
(2)-i ens33 :只抓经过接口ens33的包
(3)-t :不显示时间戳
(4)-s 0 :抓取数据包时默认抓取长度为68字节。加上-s 0 后可以抓到完整的数据包
(5)-c 100 :只抓取100个数据包
(6)dst port ! 22 :不抓取目标端口是22的数据包
(7)src net 192.168.3.0/24 :数据包的源网络地址为192.168.3.0/24
(8)-w ./target.cap :将所有捕获的包写入cap文件,方便用ethereal(即wireshark)分析
从使用 -w 选项写入的 ./target.cap 文件中读取内容
tcpdump -r ./target.cap
限制抓包的数量
如下,抓到1000个包后,自动退出
tcpdump -c 1000
保存到本地
备注:tcpdump默认会将输出写到缓冲区,只有缓冲区内容达到一定的大小,或者tcpdump退出时,才会将输出写到本地磁盘
tcpdump -n -vvv -c 1000 -w /tmp/tcpdump_save.cap
也可以加上-U强制立即写到本地磁盘(一般不建议,性能相对较差)
src 和 dst 选项连用来捕获指定源端口或指定目的端口的报文
使用“与”(and,&&)、“或”(or,|| ) 和“非”(not,!)来将两个条件组合起来,基于某些条件来分析网络报文是非常有用
使用 and 或者符号 && 来将两个或多个条件组合起来
tcpdump src 192.168.3.1 and port 22
“或”会检查是否匹配命令所列条件中的其中一条
tcpdump src 192.168.3.1 or dst 192.168.3.130 && port 22
tcpdump port 443 or 80
不想匹配某项条件时可以使用“非”
监听 ens33 网卡上除了 22 号端口的所有通讯
tcpdump -i ens33 src port not 22
本文参考自:
(1)https://www.cnblogs.com/chyingp/p/linux-command-tcpdump.html