您的位置:首页 > 理论基础 > 计算机网络

tcpdump 命令简单使用

2016-03-07 10:55 459 查看

常用命令

tcpdump -i eth1 #监视指定网络接口的数据包,不指定则默认监视第一个网络接口,一般是eth0

hostname 可为主机名或者IP

tcpdump host 192.168.1.1 #获取所有对此 IP 的主机接收和发出的所有的数据包

tcpdump src host hostname #获取主机hostname发送给本机的所有数据包 (src是source的缩写)

tcpdump dst host hostname #获取本机发送给主机hostname的所有数据包 (dst是destination的缩写)

tcpdump 与 wireshark

Wireshark(以前是ethereal)是Windows下非常简单易用的抓包工具。但在Linux下很难找到一个好用的图形化抓包工具。还好有Tcpdump。我们可以用Tcpdump + Wireshark 的完美组合实现:在 Linux 里抓包,然后在 Windows 里分析包。

tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap

tcp:ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型

-i eth1:只抓经过接口eth1的包

-t:不显示时间戳

-s 0:抓取数据包时默认抓取长度为68字节。加上-s 0 后可以抓到完整的数据包

-c 100:只抓取100个数据包,不填默认持续不断的监听

dst port ! 22:不抓取目标端口是22的数据包

src net 192.168.1.0/24:数据包的源网络地址为192.168.1.0/24

-w ./target.cap:保存成cap文件,方便用 wireshark分析

输出信息含义

首先我们注意一下,基本上tcpdump总的的输出格式为:系统时间 来源主机.端口 > 目标主机.端口 数据包参数

TCP 数据包

通常tcpdump对tcp数据包的显示格式如下:

src > dst: flags data-seqno ack window urgent options

src 和 dst 是源和目的IP地址以及相应的端口.

flags 标志由S(SYN), F(FIN), P(PUSH, R(RST),W(ECN CWT(未知, 需补充))或者 E(ECN-Echo(未知, 需补充))组成, 单独一个
'.'
表示没有flags标识.

数据段顺序号(Data-seqno)描述了此包中数据所对应序列号空间中的一个位置(整个数据被分段, 每段有一个顺序号, 所有的顺序号构成一个序列号空间).

Ack 描述的是同一个连接,同一个方向,下一个本端应该接收的(对方应该发送的)数据片段的顺序号.

Window是本端可用的数据接收缓冲区的大小(也是对方发送数据时需根据这个大小来组织数据).

Urg(urgent) 表示数据包中有紧急的数据.

options 描述了tcp的一些选项, 这些选项都用尖括号来表示(如
<mss 1024>
).

典型的三次握手流程

1. 连接发起方 发送SYN标志的数据包

2. 接收方 用带有SYN和ACK标志的数据包进行回应

3. 发起方收到接收方回应后再发送带有ACK标志的数据包进行回应

UDP 数据包

UDP 数据包的显示格式,可通过rwho这个具体应用所产生的数据包来说明:

src.port > dst.port: udp 84

其含义为:src主机上的端口port向dst主机上的端口port发送了一个udp数据包(src和dst都是指Internet地址).

这个数据包承载的用户数据为84个字节.

名称服务请求有如下的格式:

src > dst: id op? flags qtype qclass name (len)

比如有一个实际显示为:

h2opolo.1538 > helios.domain: 3+ A? ucbvax.berkeley.edu. (37)

主机h2opolo 向helios 上运行的名称服务器查询ucbvax.berkeley.edu 的地址记录(qtype等于A).

此查询本身的id号为
'3'
.

符号
'+'
意味着递归查询标志被设置(dns服务器可向更高层dns服务器查询本服务器不包含的地址记录).

这个最终通过IP包发送的查询请求数据长度为37字节, 其中不包括UDP和IP协议的头数据. 因为此查询操作为默认值(normal one的理解), op字段被省略.

如果op字段没被省略, 会被显示在
'3'
'+'
之间. 同样, qclass也是默认值, C_IN, 从而也没被显示, 如果没被忽略, 她会被显示在
'A'
之后.

此处省略各种包各种格式,详情请参考本文底部文章链接。

tcpdump条件表达式

表达式由一个或多个
'表达元'
组成(primitive, 表达元, 可理解为组成表达式的基本元素).

一个表达元通常由一个或多个修饰符(qualifiers)后跟一个名字或数字表示的id组成(qualifiers id).

有三种不同类型的修饰符: type, dir以及 proto.

由于括号是shell的特殊字符, 所以在shell脚本或终端中使用时必须对括号进行转义, 即
'('
')'
需要分别表达成
'\('
'\)'


常用的操作符

否定操作 (
'!'
'not'
)

与操作(
'&&'
'and'
)

或操作(
'||'
'or'
)

例如:

获取 helios 与 hot 或者与 ace 之间通信的数据包

tcpdump host helios and \( hot or ace \)


获取主机 210.27.48.1 除了和主机 210.27.48.2 之外所有主机通信的ip包

tcpdump ip host 210.27.48.1 and ! 210.27.48.2

打印所有通过网关snup的ftp数据包 (注意, 表达式被单引号括起来了, 这可以防止shell对其中的括号进行错误解析)

tcpdump 'gateway snup and (port ftp or ftp-data)'


参考文章地址:http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  tcpdump