Linux Tcpdump

tcpdump 是linux系统中提供的一个命令行工具,可以将网络中传送的数据包完全截获下来,提供网络数据分析。Windows端可以使用Wireshark达到同样效果。
官方网站:​​​http://www.tcpdump.org/​​​
最新版本:​​​http://www.tcpdump.org/#latest-release​

常用命令

学习任何软件,任何情况下我都建议去官网查看使用手册,详细而准确,清楚而明白
只介绍常用命令,详细命令请查看​​​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 in|out|inout ]
[ -r file ] [ -V file ] [ -s snaplen ] [ -T type ] [ -w file ]

[ -W filecount ]

[ -E spi@ipaddr algo:secret,... ]

[ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]
[ --time-stamp-precision=tstamp_precision ]
[ --immediate-mode ] [ --version ]
[ expression ]

监视指定的网络接口 -i

​[ -i interface ]​

//Linux 使用 ifconfig 可以查看所有网络设备的接口
//常使用的有 eth0 、lo(本地)
tcpdump -i eth0

捕获数据包的长度 -s

[ -s snaplen ]
//使用 -s 0 可以捕获到完整的数据包,没有此参数会使一个很小的数值。
tcpdump -i eth0 -s 0

保存捕获到的数据

[ -w file ]
//将捕获到的数据保存到文件a.cap中,以.cap或者.pcap结尾的目的是为了,在windows下能够配合wireshark 进行数据分析。两者是个完美的组合。
tcpdump -i lo -s 0 -w a.cap

捕获数据包的数量

[ -c count ]
//抓取100个数据包,保存在文件a.cap中
tcpdump -i eth0 -s 0 -c 100 -w a.cap

限定抓包的地址

//目标地址22端口数据不抓取,并且,抓取网络地址为192.168.1.0/24的数据
tcpdump -i eth0 -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w a.cap

截获主机192.168.0.1 和主机192.168.0.2 或192.168.0.3的通信

​tcpdump host 192.168.0.1 and \ (192.168.0.2 or 192.168.0.3 \)​

如果想要获取主机192.168.0.1除了和主机192.168.0.2之外所有主机通信的ip包,使用命令:

​tcpdump ip host 192.168.0.1 and ! 192.168.0.2​​​
截获主机192.168.0.2发送的所有数据

​tcpdump -i eth0 src host 192.168.0.2​

监视所有送到主机192.168.0.2的数据包

tcpdump -i eth0 dst host 192.168.0.2

监视主机host 192.168.182.110 与 192.168.182.132 或者 192.168.182.131 两个设备间的SSL通信 -s 200,只获取前200字节

tcpdump -i eth1 -s 200 port 443 and host 192.168.182.110 \(192.168.182.132 or 192.168.182.131\) -w a.cap