tcpdump 命令简单使用

常用命令

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

  1. tcp:ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型
  2. -i eth1:只抓经过接口eth1的包
  3. -t:不显示时间戳
  4. -s 0:抓取数据包时默认抓取长度为68字节。加上-s 0 后可以抓到完整的数据包
  5. -c 100:只抓取100个数据包,不填默认持续不断的监听
  6. dst port ! 22:不抓取目标端口是22的数据包
  7. src net 192.168.1.0/24:数据包的源网络地址为192.168.1.0/24
  8. -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




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值