tcpdump是一个最基本重要的网络分析工具, 掌握好这, 对于学习tcp/ip协议也是很有帮助的. 理解了tcp/ip协议栈的知识, 分析调优网络的能力才会更高. 所以使用tcpdump相比其它的工具, 更能帮我们理解协议.
我们抓包时, 一般是有针对性的去关注感兴趣的东西, 不然太多的信息会对我们分析数据造成干扰, tcpdump支持过滤语法.
host指定主机, 可以是ip或者域名.
tcpdump -s0 -i wlan0 host www.baidu.com上面的功能是抓取本机网卡wlan0上和www.baidu.com这个主机打交道的数据. 其中-s0指定抓取所有数据, 查考前面选项介绍.
有时候我们只关心数据流其中一个方向上的数据, 可以通过src: 源端, dst:目的端来指定过滤.
tcpdump -i wlan0 dst www.baidu.com指定端口
tcpdump -i wlan0 port 6379抓取redis的数据.
指定协议数据, 比如: tcp, udp, icmp
tcpdump -i wlan0 tcp and udp抓取所有的tcp和udp数据包.
tcpdump表达式可以支持逻辑组合运算, 提供更强大的功能.
andornot这些和所有开发语言中的语义是一样的. 下面看一些例子:
# 源主机是192.168.1.34, 并且目标端口是80 tcpdump -i eth0 src 192.168.1.34 and dst port 80 # 所有tcp协议并且端口不是22 tcpdump -i eth0 tcp and not port 22有时候表达式太复杂了, 我们要进行分组, 即用()把一些表达式组合在一起.
# 源主机是192.168.1.34并且目标端口是22或者3389 tcpdump -i eth0 'src 192.168.1.34 and (dst port 22 or 3389)'我们还可以通过分析数据包其中的部分数据计算过滤:
# 抓取带有SYN标志的数据, tcp[13]的意思是从tcp数据包头中取第14个byte数据, 详细参考tcp协议头 sudo tcpdump -i wlan0 'host www.baidu.com and tcp[13]&2!=0'一般在服务器上截取到数据包后, 用于之后的分析, 比如传到本地机器后用wireshark分析. 可以通过-w选项保存:
tcpdump -i eth0 src www.baidu.com -w file.cap上面把数据保存到了file.cap文件中
参考: https://danielmiessler.com/study/tcpdump/
原文 : http://www.cnblogs.com/jcli/p/4248145.html