计算机 · 2021年11月21日 0

tcpdump

tcpdump,wireshark是常用抓包工具。这里总结下tcpdump用法。

packet filter syntax

通过阅读tcpdump的manual可以知道tcpdump用来过滤包的表达式使用的语法来自于pcap-filter。通过阅读pcap-filter的manual,我们可以了解到这个用于过滤要抓的包的表达式的语法。简单来说,一个过滤表达式由一个或几个primitive(子句或者原语?理解意思就行)按照逻辑关系组合在一起,满足这个组合条件的包才会被tcpdump记录下来。每个primitive通常是对要抓的包的某个层次协议的某个字段的限制,比如端口、地址之类。为了描述清楚到底是对哪个字段做限制,可以使用三种不同的修饰词(qualifier):type(指明字段), dir(指明网络传输方向), proto(指明协议)。下面列举几个例子就明白了:

dst host host
抓取IPv4/v6目标地址是host的包,这个host可以是ip地址,也可以是域名或者主机名

src host host
抓取IPv4/v6源地址为host的包

host host
抓取IPv4/v6源地址或者目标地址是host的包

说明:

  1. 上述例子中的dst,src即为方向(dir),如果不指明那么就是默认两个方向的包都抓;
  2. 上述例子中的host可以同时填多个域名或者主机名,只要包的地址和其中任一个符合都会被tcpdump抓到;
  3. 上述例子中没有写proto,默认为ip协议;按照manual,上面的第三个例子可以等同于ip host host,也可以等同于ether proto ip and host host,这个ether proto ip and host host可以这样理解:该过滤表达式有两个子句,第一个是说这个包是ether协议包并且ether协议里的proto字段的值指的是ip协议,第二个子句是说这个包的ip地址必须是host

ether dst ehost
抓取ether协议目的地址为ehost的包

ether src ehost
抓取ether协议源地址为ehost的包

ether host ehost
抓取ether协议目的地址或者源地址为ethos的包

gateway host
抓取ether协议目的地址或源地址是host,但是ip协议目的地址和源地址不能是host的包,这个host必须是名字。等价表达式:ether host ehost and not host host,这个等价表达式中的ehosthost是把gateway host中的host分别按arp映射关系和主机名与ip地址映射关系转换得到的真正的ether协议地址和ip地址。

dst net net

tcpdump命令行选项说明