admin管理员组

文章数量:1531256

2024年3月26日发(作者:)

抓包工具和抓包分析

1 概述

在处理 IP网络的故障时,经常使用以太网抓包工具来查看和抓取 IP网络上某些

端口或某些网段的数据包,并对这些数据包进行分析,定位问题。

在IMON项目里,使用抓包工具抓包进行分析的场景在EPG采集、引流模块和软终

端监看模块,一般情况下EPG采集和引流模块比较稳定,软终端监看还涉及SS5代理,这

部分出问题的几率比较大,这是就有可能要现场维护人员抓包进行分析、排查、定位问题,

确定是网络问题还是软件问题,如果是软件问题则要将抓回的包发给研发解决。

EPG抓包可分为对鉴权过程、采集过程抓包验证,主要是通过通过抓包分析与IPTV

鉴权服务器之间的TCP交互。

流媒体交互抓包可分为对组播、点播进行抓包,一般交互的协议分为IGMP、RTSP、

RTMP等,组播一般是基于UDP的IGMP流,点播是基于RTP的RTSP流或基于TCP的

RTMP流。

软终端抓包主要是抓取软终端与IPTV服务器交互、SS5与IPTV服务器交互的数据包,

一般跟流媒体交互的报文协议差不多,也是分为组播IGMP、点播RTSP等协议,不过经

过测试发现江苏的部分组播(可能是用户不同所致)发送的是RTSP的包。

2 常用抓包工具

2.1 WireShark

Wireshark是一个非常好用的抓包工具,当我们遇到一些和网络相关的问题时,可以

通过这个工具进行分析,不过要说明的是,这只是一个工具,用法是非常灵活的。

过滤器的区别

捕捉过滤器(CaptureFilters):用于决定将什么样的信息记录在捕捉结果中。需要在

开始捕捉前设置。

显示过滤器(DisplayFilters):在捕捉结果中进行详细查找。他们可以在得到捕捉结

果后随意修改。

捕捉过滤器

Protocol(协议):

可能的值: ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp and udp.

如果没有特别指明是什么协议,则默认使用所有支持的协议。

Direction(方向):

可能的值: src, dst, src and dst, src or dst

如果没有特别指明来源或目的地,则默认使用 “src or dst” 作为关键字。

例如,”host 10.2.2.2″与”src or dst host 10.2.2.2″是一样的。

Host(s):

可能的值: net, port, host, portrange.

如果没有指定此值,则默认使用”host”关键字。

例如,”src 10.1.1.1″与”src host 10.1.1.1″相同。

Logical Operations(逻辑运算):

可能的值:not, and, or.

否(“not”)具有最高的优先级。或(“or”)和与(“and”)具有相同的优先级,运算时

从左至右进行。

例如,

“not tcp port 3128 and tcp port 23″与”(not tcp port 3128) and tcp port 23″

相同。

“not tcp port 3128 and tcp port 23″与”not (tcp port 3128 and tcp port 23)”

不同。

例子:

tcp dst port 3128 //捕捉目的TCP端口为3128的封包。

ip src host 10.1.1.1 //捕捉来源IP地址为10.1.1.1的封包。

host 10.1.2.3 //捕捉目的或来源IP地址为10.1.2.3的封包。

ether host e0-05-c5-44-b1-3c //捕捉目的或来源MAC地址为

e0-05-c5-44-b1-3c的封包。如果你想抓本机与所有外网通讯的数据包时,可以将这里的

mac地址换成路由的mac地址即可。

src portrange 2000-2500 //捕捉来源为UDP或TCP,并且端口号在2000至2500

范围内的封包。

not imcp //显示除了icmp以外的所有封包。(icmp通常被ping工具使用)

src host 10.7.2.12 and not dst net 10.200.0.0/16 //显示来源IP地址为

10.7.2.12,但目的地不是10.200.0.0/16的封包。

(src host 10.4.1.12 or src net 10.6.0.0/16) and tcp dst portrange 200-10000

and dst net 10.0.0.0/8 //捕捉来源IP为10.4.1.12或者来源网络为10.6.0.0/16,目的

地TCP端口号在200至10000之间,并且目的位于网络 10.0.0.0/8内的所有封包。

src net 192.168.0.0/24

src net 192.168.0.0 mask 255.255.255.0 //捕捉源地址为192.168.0.0网络内的

所有封包。

显示过滤器

例子:

snmp || dns || icmp //显示SNMP或DNS或ICMP封包。

== 10.1.1.1 //显示来源或目的IP地址为10.1.1.1的封包。

!= 10.1.2.3 or != 10.4.5.6 //显示来源不为10.1.2.3或者目的不为

10.4.5.6的封包。

换句话说,显示的封包将会为:

来源IP:除了10.1.2.3以外任意;目的IP:任意

以及

来源IP:任意;目的IP:除了10.4.5.6以外任意

!= 10.1.2.3 and != 10.4.5.6 //显示来源不为10.1.2.3并且目的IP不

为10.4.5.6的封包。

换句话说,显示的封包将会为:

来源IP:除了10.1.2.3以外任意;同时须满足,目的IP:除了10.4.5.6以外任意

== 25 //显示来源或目的TCP端口号为25的封包。

t == 25 //显示目的TCP端口号为25的封包。

//显示包含TCP标志的封包。

== 0×02 //显示包含TCP SYN标志的封包。

如果过滤器的语法是正确的,表达式的背景呈绿色。如果呈红色,说明表达式有误。

2.2 TCPDUMP

tcpdump 是一个运行在命令行下的嗅探工具。它允许用户拦截和显示发送或收到过

网络连接到该计算机的TCP/IP和其他数据包。

tcpdump采用命令行方式,它的命令格式为:

tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ]

[ -i 网络接口 ] [ -r 文件名] [ -s snaplen ]

[ -T 类型 ] [ -w 文件名 ] [表达式 ]

1. tcpdump的选项介绍

-a 将网络地址和广播地址转变成名字;

-d 将匹配信息包的代码以人们能够理解的汇编格式给出;

-dd 将匹配信息包的代码以c语言程序段的格式给出;

-ddd 将匹配信息包的代码以十进制的形式给出;

-e 在输出行打印出数据链路层的头部信息;

-f 将外部的Internet地址以数字的形式打印出来;

-l 使标准输出变为缓冲行形式;

-n 不把网络地址转换成名字;

-t 在输出的每一行不打印时间戳;

-v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;

-vv 输出详细的报文信息;

-c 在收到指定的包的数目后,tcpdump就会停止;

-F 从指定的文件中读取表达式,忽略其它的表达式;

-i 指定监听的网络接口;

-r 从指定的文件中读取包(这些包一般通过-w选项产生);

-w 直接将包写入文件中,并不分析和打印出来;

-T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过

调用)和snmp(简单 网络管理协议;)

2. tcpdump的表达式介绍

表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足

达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息

包将会

被截获。

在表达式中一般如下几种类型的关键字,一种是关于类型的关键字,主要包括host,

net,port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指

202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的

类型是

host.

第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,

这些关键字指明了传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是

210.27.

48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字,

缺省是src or dst关键字。

第三种是协议的关键字,主要包括fddi,ip ,arp,rarp,tcp,udp等类型。Fddi指明是在

FDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它是"ether"的别名,

fddi和e

ther具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理

和分析。

其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则

tcpdump将会

监听所有协议的信息包。

除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,

greater,还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算 是'o

r' ,'||';

这些关键字可以组合起来构成强大的组合条件来满足人们的需要,下面举几个例子来

说明。

(1)想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包:

#tcpdump host 210.27.48.1

(2) 想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,使用命

:(在命令行中适用 括号时,一定要

#tcpdump host 210.27.48.1 and (210.27.48.2 or 210.27.48.3 )

(3) 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip

,使用命令:

#tcpdump ip host 210.27.48.1 and ! 210.27.48.2

(4)如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:

#tcpdump tcp port 23 host 210.27.48.1

3. tcpdump 的输出结果介绍

下面我们介绍几种典型的tcpdump命令的输出信息

(1) 数据链路层头信息

使用命令#tcpdump --e host ice

ice 是一台装有linux的主机,她的MAC地址是0:90:27:58:AF:1A

H219是一台装有SOLARIC的SUN工作站,它的MAC地址是8:0:20:79:5B:

46;上一条

命令的输出结果如下所示:

21:50:12.847509 eth0 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h219.33357 >

ice.

telne

t 0:0(0) ack 22535 win 8760 (DF)

分析:21:50:12是显示的时间, 847509是ID号,eth0 <表示从网络接口eth0 接

受该

数据包,eth0 >表示从网络接口设备发送数据包, 8:0:20:79:5b:46是主机H219的

MAC地址,它

表明是从源地址H219发来的数据包. 0:90:27:58:af:1a是主机ICE的MAC地址,表示

该数据包的

目的地址是ICE . ip 是表明该数据包是IP数据包,60 是数据包的长度, h219.33357 >

ice.

telnet 表明该数据包是从主机H219的33357端口发往主机ICE的TELNET(23)端口.

ack 22535

表明对序列号是222535的包进行响应. win 8760表明发送窗口的大小是8760.

(2) ARP包的TCPDUMP输出信息

使用命令#tcpdump arp

得到的输出结果是:

22:32:42.802509 eth0 > arp who-has route tell ice (0:90:27:58:af:1a)

22:32:42.802902 eth0 < arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af

:1a)

分析: 22:32:42是时间戳, 802509是ID号, eth0 >表明从主机发出该数据包, arp表

明是

ARP请求包, who-has route tell ice表明是主机ICE请求主机ROUTE的MAC地址。

0:90:27:5

8:af:1a是主机ICE的MAC地址。

(3) TCP包的输出信息

用TCPDUMP捕获的TCP包的一般输出信息是:

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

src > dst:表明从源地址到目的地址, flags是TCP包中的标志信息,S 是SYN标志, F (F

IN), P (PUSH) , R (RST) "." (没有标记); data-seqno是数据包中的数据的顺序号, ack

下次期望的顺序号, window是接收缓存的窗口大小, urgent表明数据包中是否有紧急

指针.

Options是选项.

(4) UDP包的输出信息

用TCPDUMP捕获的UDP包的一般输出信息是:

1 > 2: udp lenth

UDP十分简单,上面的输出行表明从主机ROUTE的port1端口发出的一个UDP数

据包到主机

ICE的port2端口,类型是UDP, 包的长度是lenth

3 抓包场景及步骤

3.1 机顶盒抓包

如果有需要抓机顶盒交互的报文,则可以通过HUB和机顶盒连接进行抓包,可以通过

windows的wireshark进行抓包,可以把所有交互的包抓下来,然后进行过滤分析,也可

以通过过滤规则抓下来已经过滤后的包。

3.2 Linux下抓包

软终端在通过SS5代理服务器进行接入IPTV环境时,可能需要到SS5所在的代理服

务器上去抓包,抓包方式就是通过TCPDUMP命令来抓取,一般我们把与IPTV网口相关

的所有包都抓下来存为PCAP文件进行分析。

抓包命令为tcpdump -i eth1 -w ,这样可以把抓过来的包保存到linux服

务器的用户登录当前文件夹下,然后通过SSH传到本地进行分析,当然了也可以通过过滤

规则抓包,详见TCPDUMP的常用命令。

本文标签: 进行信息目的分析