linux tcpdump的使用详解
Tcpdump是linux下的网络数据包分析工具,
TcpDump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。tcpdump就是一种免费的网络分析工具,尤其其提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具。tcpdump存在于基本的FreeBSD系统中,由于它需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息。因此系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他计算机的安全存在威胁。
上次在做一个kv的java客户端,连接到kv c++ server端的时候老是没有返回数据,也不清楚是否已经连接上,于是通过tcpdump诊断是否已经收到连接,并且诊断tcp包的内容是否跟c++ client连接到c++ server端的包内容是否一致。
常用选项:
-w 写到文件,-r 从文件读取 通过表达式来过虑
-c 指定多少包之后中止
-F 从文件中读取表达式
-i 多个网卡时,可以用于指定什么网卡
-l 输出时行缓冲
-n 不会将ip地址转成hostname,也就是不会进行dns查询
-nn 不会将已知的协议转换成名称
-s length 表明每个包的需要记录下来的大小,一般设置为0表示全记录
-v 输出包的详细信息,比如ttl,长度等
三种限定方式进行过滤
type : host net port portrange
比如: host foo, net 10.0.0.0 ?
dir: 传输方向,src dst and or
proto: 协议类型,ether, fddi, tr, wlan, ip, ip6, ?arp, ?rarp, ?decnet, tcp ?and ?udp.?
其它可用
less length: 包的长度要小于length
greater length: 包的长度要大于length
组合子表达式
通过or[||]、and[&&]与not[!]
有括号,需要转义
?tcpdump host helios and \( hot or ace \)
tcpdump src 10.20.150.206查看源地址为该ip的包