简介
tcpdump是一个强大的网络抓包Sniffer类工具,通常用在Linux系统中,Windows操作系统中也会使用,可以看作是WireShark的命令行版本。
tcdpump命令最初设计用于观察TCP/IP性能问题,它是一个用于截取网络分组,并输出分组内容的工具。tcpdump可以将网络中传送的数据包的报文头完全截获下来提供分析,它支持针对网络层、协议、主机、网络或端口的过滤,并提供and,or,not等逻辑语句来帮助用户去掉无用的信息。
语法
1 | tcpdump [-adeflnNOpqStvx][-c<数据包数目>][-dd][-ddd][-F<表达文件>][-i<网络界面>][-r<数据包文件>][-s<数据包大小>][-tt][-T<数据包类型>][-vv][-w<数据包文件>][输出数据栏位] |
操作命令
tcpdump -i wlan0 -s 0 -w a.cap
//监听wlan0网卡上的全部流量,-s代表抓取包的大小,默认为抓取64,设置为0, 表示包有多大,抓多大。-w,表示抓取下来保存为,a.cap
tcpdump -r a.cpa
tcpdump -A -r a.cap
//以Ascall显示包文件
tcpdump -x -r a.cap
//以十六进制显示包文件
tcpdump -i eth0 tcp port 22
//监听tcp协议的,22端口
tcpdump—筛选
tcpdump -n -r http.cap | awk '{print $3}' |sort -u
// -n 表示只以ip地址的形式显示出来,不显示域名。awk 参数表示只显示第三列信息; sort表示去掉重复的
tcpdump -n src host 145.254.160.237 -r http.cap //source
tcpdump -n dst host 145.254.160.237 -r http.cap //destination
tcpdump -n udp port 53 -r http.cap
//使用udp 53端口就可以把所有的域名查询包显示出来
tcpdump -nX port 80 -r http.cap
//十六进制
tcpdump -A -n 'tcp[13] = 24' -r http.cap
//筛选tcp包里面的ack和psh包
Linux tcpdump命令用于倾倒网络传输数据。
执行tcpdump指令可列出经过指定网络界面的数据包文件头,在Linux操作系统中,你必须是系统管理员。
参数说明
- -a 尝试将网络和广播地址转换成名称。
- -c<数据包数目> 收到指定的数据包数目后,就停止进行倾倒操作。
- -d 把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出。
- -dd 把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出。
- -ddd 把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出。
- -e 在每列倾倒资料上显示连接层级的文件头。
- -f 用数字显示网际网络地址。
- -F<表达文件> 指定内含表达方式的文件。
- -i<网络界面> 使用指定的网络截面送出数据包。
- -l 使用标准输出列的缓冲区。
- -n 不把主机的网络地址转换成名字。
- -N 不列出域名。
- -O 不将数据包编码最佳化。
- -p 不让网络界面进入混杂模式。
- -q 快速输出,仅列出少数的传输协议信息。
- -r<数据包文件> 从指定的文件读取数据包数据。
- -s<数据包大小> 设置每个数据包的大小。
- -S 用绝对而非相对数值列出TCP关联数。
- -t 在每列倾倒资料上不显示时间戳记。
- -tt 在每列倾倒资料上显示未经格式化的时间戳记。
- -T<数据包类型> 强制将表达方式所指定的数据包转译成设置的数据包类型。
- -v 详细显示指令执行过程。
- -vv 更详细显示指令执行过程。
- -x 用十六进制字码列出数据包资料。
- -w<数据包文件> 把数据包数据写入指定的文件。
常用命令
抓取所有的包
tcpdump -i any -n -w xxx.cap