Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5644518
  • 博文数量: 291
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 7924
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-06 14:28
个人简介

阿里巴巴是个快乐的青年

文章分类

全部博文(291)

文章存档

2018年(21)

2017年(4)

2016年(5)

2015年(17)

2014年(68)

2013年(174)

2012年(2)

分类: 服务器与存储

2014-07-23 16:58:55

        可以用tcpdump + wireshark的完美组合,来实现在 Linux 里抓包,然后在Windows 里分析包。
一、tcpdump
1、基本语法
        tcpdump功能非常强大,详细可以参看这里,但这里只介绍常用功能。
        tcpdump的基本语法格式是:
        tcpdump+参数+关键字
        参数和关键字都可以指定多个,关键字之间可以用关系运算符来组合。
        (1)常用参数
        -s:指定要监听数据包的长度,默认是68个字节,设置为0意味着让tcpdump自动选择合适的长度来抓取数据包,比如:-s 0
        -w:指定将监听到的数据包写入文件中保存,比如:-w a.cap
        -A:指定将每个监听到的数据包以ACSII可见字符打印
        -r:指定从某个文件中读取数据包,比如:-r a.cap
        ------------------------------------------------------------------------------------------------------------------------------------------------------
        -i:指定tcpdump监听的网络接口
        -c:指定要监听的数据包数量,达到指定数量后自动停止抓包
        -C:file-size (nt: 此选项用于配合-w file 选项使用),该选项使得tcpdump 在把原始数据包直接保存到文件中之前,检查此文件大小是否超过file-size,如果超过了,将关闭此文件,另创一个文件继续用于原始数据包的记录,新创建的文件名与-w 选项指定的文件名一致,但文件名后多了一个数字,该数字会从1开始随着新创建文件的增多而增加,file-size的单位是百万字节(这里指1,000,000个字节,并非1,048,576个字节, 后者是以1024字节为1K, 1024K字节为1M计算所得, 即1M=1024*1024=1,048,576)
        -n:指定将每个监听到数据包中的域名转换成IP地址后显示
        -nn:指定将每个监听到的数据包中的域名转换成IP、端口从应用名称转换成端口号后显示
        -e:指定将监听到的数据包链路层的信息打印出来,包括源mac和目的mac,以及网络层的协议
        -p:将网卡设置为非混杂模式,不能与host或broadcast一起使用
        -S:指定打印每个监听到的数据包的TCP绝对序列号而非相对序列号
        (2)关键字
        tcpdump支持的关键字很多,但从功能上来分主要包括三种类型:
        第一种是关于类型的关键字,主要包括host、net、port。
        第二种是确定传输方向的关键字,主要包括src、dst、src or dst、src and dst,这些关键字指明了传输的方向。
        第三种是协议关键字,包括fddi、ip、arp、rarp、tcp、udp、imcp等。
        (3)关系运算符
        支持的关系运算如下:
        否 (`!' 或 `not')
        与(`&&' 或 `and')
        或(`||' 或 `or')
        否运算符的优先级最高,与和或运算符的优先级相同, 并且二者的结合顺序是从左到右。
2、应用举例
        (1)抓包
        执行如下命令开始抓包:
        #tcpdump -s 0 -w a.cap host 8.8.8.8
        上面例子表示抓取到主机8.8.8.8的网络数据包,并写入a.cap,每条数据的抓取长度由tcpdump来自动选择。
        Ctrl+C可以结束抓取,此时在指定目录下会产生a.cap文件,这里是当前目录下。
        (2)解析
        执行如下命令解析抓取的数据包:
        #tcpdump -s 0 -A -r a.cap
        上面例子表示从文件a.cap读取数据并以ACSII格式解析数据,解析出来的数据显示格式如下:
        src > dst: flags data-seqno ack window urgent options
        src和dst是源和目的IP地址以及相应的端口。
        flags标志由S(SYN)、F(FIN)、P(PUSH)、R(RST)等组成,单独一个'.'表示没有flags标志。
        数据段顺序号(data-seqno)描述了此包中数据所对应序列号空间中的一个位置(整个数据被分段,
        每段有一个顺序号, 所有的顺序号构成一个序列号空间).
        ack描述的是同一个连接,同一个方向,下一个本端应该接收的(对方应该发送的)数据片段的顺序号。
        window是本端可用的数据接收缓冲区的大小(也是对方发送数据时需根据这个大小来组织数据)。
        urg(urgent)表示数据包中有紧急的数据。
        options描述了tcp的一些选项, 这些选项都用尖括号来表示(如)。

二、wireshark
1、解析数据
        用wireshark选择File-->Open打开a.cap就可以看到如下界面了:
        
        非常简单,剩下的事情就是wireshark自己的功能了。
2、过滤规则
        因为你抓取到的数据可能非常大,所以用好wireshark的关键是灵活使用各种过滤条件和Flow Graph。
        过滤规则无非是对IP、Port、Mac、协议结合关系运算符进行组合操作来实现的。
        (1)过滤IP
        ip.src eq 8.8.8.8 or ip.dst eq 8.8.8.8
        ip.addr eq 8.8.8.8
        ip.addr == 8.8.8.8
        上面显示来源IP或者目标IP等于8.8.8.8的所有数据
        (2)过滤端口
        tcp.port eq 80
        udp.port == 80
        tcp.srcport == 21
        tcp.dstport eq 21
        上面表示端口相等过滤
        tcp.port >= 1 and tcp.port <= 80
        上面表示端口范围过滤
        (3)MAC过滤
        eth.dst == A0:00:00:00:B0:11
        上面表示过滤目标MAC
        eth.src eq A0:00:00:00:B0:11
        上面表示过滤来源MAC
        eth.addr eq A0:00:00:00:B0:11
        上面表示过滤来源和目标MAC
        (4)包长过滤
        udp.length == 26
        表示UDP数据包长
        tcp.len >= 47
        表示TCP数据包长
        ip.len == 94
        表示IP数据包长
        frame.len == 119
        表示整个数据包长
        (5)协议过滤
        1)HTTP过滤:
        http.request.method == "GET"
        http.request.method == "POST"
        http.request.uri == "/img/logo.gif"
        http contains "GET"
        http contains "HTTP/1.1"
        http.request.method == "GET" && http contains "Host:"
        http.request.method == "POST" && http contains "User-Agent:"
        http contains "HTTP/1.1 200 OK" && http contains "Content-Type:"
        2)TCP过滤
        tcp.flags.syn == 0x02
        显示包含TCP SYN标志的包
        tcp.window_size == 0 && tcp.flags.reset != 1
3、图形显示
        选择Statistics-->Flow Graph,保持默认选项即可:
        
        上图显示完整的数据流程图,包括TCP和HTTP。


阅读(885) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~