Tcpdump使用总结
1 介绍
1.1 一些闲话
Tcpdump是一个历史悠久的报文分析工具。目前主要由www.tcpdump.org维护,底层是libpcap库。libpcap使用非常广泛,原始的版本是利用raw socket实现,性能有限,新的版本在Linux上开始支持PF_RING。windows的移植版本是winpcap,目前在Wireshark底层抓包驱动就是winpcap。
另外,如果需要高性能报文抓取功能,可以考虑netsniff-ng,这是一个工具集,直接利用PF_RING实现零拷贝抓包,很强悍。
2 使用说明
2.1 命令格式
tcpdump [ -adeflnNOpqStvx ]
[ -c pkt_num ] [ -F filename ]
[ -i ifname ] [ -r filename] [ -s snaplen ]
[-T type] [ -w filename ] [ expression ]
-a 将网络地址和广播地址转变成名字
-d 将匹配信息包的代码以人们能够理解的汇编格式给出
-dd 将匹配信息包的代码以c语言程序段的格式给出
-ddd 将匹配信息包的代码以十进制的形式给出
-e 在输出行打印出数据链路层的头部信息
-f 将外部的Internet地址以数字的形式打印出来
-l 使标准输出变为缓冲行形式
-n 不把网络地址转换成名字
-nn 不实现IP和Port的名称
-t 在输出的每一行不打印时间戳
-v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息
-vv 输出详细的报文信息
-c 在收到指定的包的数目后,tcpdump就会停止
-F 从指定的文件中读取表达式,忽略其它的表达式
-i 指定监听的网络接口
-r 从指定的文件中读取包(这些包一般通过-w选项产生)
-w 已pcap格式,写入文件中。
-T 将监听到的包直接解释为指定的类型的报文,常见的类型有RPC和snmp
-x 输出报文的内容(IP报文),-X还会额外打印ASCII信息。
-xx 输出完整的报文,-XX还会额外打印ASCII信息。
默认行为:
如果不指定接口,默认使用第一个接口。
默认截取报文的长度是96字节(老版本是60),可用-s修改。
使用ether,host,net,port等类型,host是默认类型。
默认进行域名解析,可以用-n或-nn取消。
2.2 2个要知道的参数
-c pkt_num
以前让用服抓包的时候,经常会说网络流量太大,抓包的笔记本直接跪了。这个时候,这个参数就可以登场了,用-c可以指定抓取的报文的个数,完成之后自动退出。(Wireshark上也有相同选项)
-w file_name
将抓取的报文,写入到指定文件(使用.pcap后缀)。可以将文件拖过来后,用Wireshark来分析。
2.3 过滤主机
tcpdump -i eth1 host 192.168.1.1
tcpdump -i eth1 src host 192.168.1.1
tcpdump -i eth1 dst host 192.168.1.1
2.4 协议
tcpdump -i eth1 arp
tcpdump -i eth1 ip
tcpdump -i eth1 tcp
tcpdump -i eth1 udp
tcpdump -i eth1 icmp
2.5 几个综合例子
抓取所有经过 eth1,目标 MAC 地址是 00:01:02:03:04:05 的 ICMP 数据
tcpdump -i eth1 '((icmp) and ((ether dst host 00:01:02:03:04:05)))'
抓取所有经过 eth1,目的IP是192.168.1.254或192.168.1.200,端口为80的TCP数据
tcpdump -i eth1 ' ((tcp) && (port 80) and ((dst host 192.168.1.254) or (dst host
192.168.1.200))) '
抓取所有经过 eth1,目的网络是 192.168,但目的IP不是 192.168.1.200 的 TCP 数据
tcpdump -i eth1 '((tcp) and ((dst net 192.168) and (not dst host 192.168.1.200)))'
- 点赞
- 收藏
- 关注作者
评论(0)