tcpdump使用教程

一、说明

在分析了wireshark使用方法后,其表达式书写基本没什么问题,但在linux上使用的更多是tcpdump。

tcpdump自大学就开始在用了,但一直没搞懂其表达式的书写规律,基本每次使用都得查、每次用后都会忘。

 

二、安装

yum install tcpdump -y

 

三、使用

tcpdump命令用法如下,可概括为“tcpdump + 选项 + 表达式”;表达式用于指示过滤哪些数据包,选项用于指示如何处理表达式过滤出来的这些数据包。

tcpdump [ -AbdDefhHIJKlLnNOpqRStuUvxX ] [ -B buffer_size ] [ -c count ]
           [ -C file_size ] [ -G rotate_seconds ] [ -F file ]
           [ -i interface ] [ -j tstamp_type ] [ -m module ] [ -M secret ]
           [ -P in|out|inout ]
           [ -r file ] [ -V file ] [ -s snaplen ] [ -T type ] [ -w file ]
           [ -W filecount ]
           [ -E spi@ipaddr algo:secret,...  ]
           [ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]
           [ expression ]

 

3.1 选项

选项也没什么说的,看上边的写法也大概能猜出选项的意思,如果不能那就“man tcpdump”看一下具体的意思。提一下最常用的三个参数

-A----以可打印字符形式打印包的所有内容。在想查看应用层(如http)内容这个选项很有用。

-i----用于指定要捕获数据包的网卡。如eth1。

-r----可以从指定的文件中读入数据包。

-w----将捕获的数据包存入到文件。一般保存成.pcap方便使用wireshark打开。

 

3.2 表达式

tcpdump使用pcap-filter语法,详情可以查看"man pcap-filter",下边是对man手册的一些总结。当然另外还要说明,tcpdump有一些高级的用法,不一定都符合下边的规律。

与wireshark表达式相较而言,虽然tcpdump也不叫难,但总体还是wireshark表达式更简单明了一些。

 

3.2.1 基本表达式

一条基本的表达式写法如下:

[proto] [dir] [type] [value]

proto----protocol,流量协议。可以为ether(数据链路层), ip,  ip6,  arp,  rarp, decnet, tcp 及 udp。另外也可以是fddi, tr, wlan但这三个都是数据链路层在不同数据链路层协议的叫法,与ether相互之间等价。tcpdump不支持应用层协议,只能借助端口实现某种应用层协议的过滤。

dir----direction,流量方向。可以为src, dst, src or dst 及 src and dst。另外也可以是ra,  ta, addr1, addr2, addr3 及 addr4但这几个只适用于wlan数据链路层。

type----过滤项的值的类型。可以为host(ip或可解析的域名/主机名), net(网段) , port(端口或/etc/services可解析的服务) 及 portrange(端口范围)。

# 示例一
# 过滤ip协议(proto)----目的(dir)----ip(type-host)----为192.168.220.128(value)的数据包
tcpdump ip dst host 192.168.220.128
# 当然我们前边用了中括号,意味着在没有歧义情下况某些字段是可以省略的,如这里proto字段可省略,等价于
# tcpdump dst host 192.168.220.128

# 示例二
# 过滤ip协议(proto)----目的(dir)----网段(type-net)----为192.168.220(value)的数据包
tcpdump ip dst net 192.168.220

# 示例三
# 过滤tcp协议(proto)----目的(dir)----端口(type-port)----为3306(value)的数据包
tcpdump tcp dst port 3306
# port支持/etc/services可解析的服务,3306对应mysql,所以等价于
# tcpdump tcp dst port mysql

# 示例四
# 过滤tcp协议(proto)----目的(dir)----端口范围(type-portrange)----为3306-3308(value)的数据包
tcpdump tcp dst portrange 3306-3308

 

3.2.2 复合表达式

非----!或not。最高优先级。

与----&&或and。次优先级。

或----||或or。最低优先级。

改变运算优先级----大括号。

# 过滤ip协议(proto)----目的(dir)----ip(type-host)----为192.168.220.128(value)且
# tcp协议(proto)----目的(dir)----端口(type-port)----为3306(value)的数据包
tcpdump ip dst host 192.168.220.128 and tcp dst port 3306

# 过滤tcp协议(proto)----目的(dir)----端口(type-port)----为3306或3308(value)的数据包
tcpdump tcp dst port 3306 or tcp dst port 3308
# 另外也支持以下单引号写法
# tcpdump tcp dst port '(3306 or 3308)'

 

posted on 2020-12-04 13:00  诸子流  阅读(1086)  评论(0编辑  收藏  举报