抓包工具除了wireshark还有什么 抓包工具可以干什么

「干货」常见网络抓包工具和抓包分析


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、常用抓包工具


、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 ″与” src or dst host ″是一样的。

Host(s):

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

如果没有指定此值,则默认使用”host”关键字。 例如,” src ″与” src host ″相同。


Logical Operations (逻辑运算):


可能的值: not, and, or.

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

例如,

“not tcp port and tcp port ″与” (not tcp port ) and tcp port ″相同。 “not tcp port and tcp port ″与” not (tcp port and tcp port ) ”不同。

例子:

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

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

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

ether host e0--c5--b1-3c // 捕捉目的或来源MAC 地址为e0--c5--b1-3c 的封包。如果 你想抓本机与所有外网通讯的数据包时,可以将这里的mac 地址换成路由的mac 地址即可。

src portrange // 捕捉来源为UDP 或 TCP ,并且端口号在 至 范围内的封包。

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

src host and not dst net / //显示来源IP 地址为,但目的地不是/ 的封包。

(src host orsrc net /)and tcp dst portrange200-10000and dst net

/8 // 捕捉来源IP 为 或者来源网络为/ ,目的地TCP端口号在至 之间,并且目的位于网络/8 内的所有封包。

src net /

src net mask //捕捉源地址为 网络内的所有封包。 显示过滤器

例子:

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

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

ip.src != or ip.dst != //显示来源不为 或者目的不为 的封包。 换句话说,显示的封包将会为:

来源 IP:除了 以外任意;

目的IP:任意

来源 IP:任意;

目的IP:除了 以外任意

ip.src != and ip.dst != //显示来源不为 并且目的IP 不为 的 封包。

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

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

tcp.port == // 显示来源或目的TCP 端口号为 的封包。 tcp.dstport == // 显示目的TCP 端口号为 的封包。 tcp.flags // 显示包含TCP 标志的封包。

tcp.flags.syn == 0× // 显示包含TCP SYN 标志的封包。 如果过滤器的语法是正确的,表达式的背景呈绿色。如果呈红色,说明表达式有误。


、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 ,指明 是一台主机,net 指明 是一个网络地址,port 指明端口号是。如果没有指定类型,缺省的类型是host。

第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,这些关键字指明了传输的方向。举例说明,src , 指明 ip 包中源地址是 , dst net 指明目的网络地址是 。如果没有指明方向关键字,则缺省是src or dst 关键字。

第三种是协议的关键字,主要包括fddi,ip ,arp,rarp,tcp,udp等类型。 Fddi指明是在FDDI( 分布式光纤数据接口网络)上的特定的网络协议,实际上它是"ether" 的别名, fddi 和 ether具有类似的源地址和目的地址,所以可以将fddi协议包当作ether 的包进行处理和分析。 其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump 将会监听所有协议的信息包。

除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less, greater,还有三种逻辑运算,取非运算是'not ' '! ',与运算是 'and','&&'; 或运算是'or' ,'||';

说明。

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

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

#tcpdump host

(2) 想要截获主机 和主机 或 的通信,使用命令:(在命令行中适用括号时,一定要#tcpdump host and \ ( or \)

(3) 如果想要获取主机 除了和主机 之外所有主机通信的ip包,使用命令:

#tcpdump ip host and !

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

#tcpdump tcp port host

3、tcpdump 的输出结果介绍

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

(1) 数据链路层头信息

使用命令 #tcpdump --e host ice

ice 是一台装有linux 的主机,她的MAC 地址是0:: : : AF : 1AH219 是一台装有SOLARIC的 SUN 工作站,它的MAC 地址是8: 0: :: 5B:;

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

:: eth0 < 8:0:::5b:::::af:1a ip : h219. > ice. telnet 0:0(0) ack win (DF)

分析: ::是显示的时间, 是 ID 号,eth0 <表示从网络接口eth0 接受该数据包, eth0 > 表示从网络接口设备发送数据包, 8:0:::5b: 是主机H219 的 MAC地址它表明是从源地址H219 发来的数据包. 0::::af:1a 是主机ICE 的 MAC 地址 ,表示该数据包的目的地址是ICE . ip是表明该数据包是IP 数据包 , 是数据包的长度, h219. > ice. telnet 表明该数据包是从主机H219 的 端口发往主机ICE 的 TELNET() 端口 . ack22535

表明对序列号是 的包进行响应. win 表明发送窗口的大小是.:1a)

(2) ARP 包的 TCPDUMP 输出信息

使用命令 #tcpdump arp

得到的输出结果是:

:: eth0 > arp who-has route tell ice (0::::af:1a)

:: eth0 < arp reply route is-at 0::::: (0::::af

分析 : :: 是时间戳 , 是 ID 号 , eth0 >表明从主机发出该数据包, arp 表明是ARP 请求包 , who-has route tell ice 表明是主机ICE 请求主机ROUTE的MAC地址。 0:::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 包的一般输出信息是:

route.port1 > ice.port2: udp lenth

UDP 十分简单,上面的输出行表明从主机ROUTE 的 port1 端口发出的一个UDP 数据 包到主机ICE 的 port2 端口,类型是UDP ,包的长度是lenth


3、抓包场景及步骤


机顶盒抓包

如果有需要抓机顶盒交互的报文,则可以通过HUB 和机顶盒连接进行抓包,可以通过windows的 wireshark 进行抓包,可以把所有交互的包抓下来,然后进行过滤分析,也可以通过过滤规则抓下来已经过滤后的包。

Linux下抓包

软终端在通过SS5代理服务器进行接入IPTV 环境时,可能需要到 SS5所在的代理服务器上去抓包,抓包方式就是通过TCPDUMP命令来抓取,一般我们把与IPTV网口相关的所有包都抓下来存为PCAP文件进行分析。

抓包命令为tcpdump -i eth1 -wxx.pcap,这样可以把抓过来的包保存到linux 服务器的用户登录当前文件夹下,然后通过SSH 传到本地进行分析,当然了也可以通过过滤规则抓包,详见TCPDUMP的常用命令。

原文链接:,转发请注明来源!