1 Wireshark
Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark可支持windows和linux平台,界面简洁、大方,功能强大、实用,是目前全世界使用最广泛的网络分组分析软件之一。 网络管理员能用Wireshark来检测网络问题,网络安全工程师使用Wireshark来检查信息安全相关问题,开发者可以用Wireshark来为新的通信协议除错,普通用户更用Wireshark来学习网络协议的相关知识。所以掌握使用Wireshark,能为我们定位故障、排除问题起到事半功倍的效果。
1.1 Wireshark抓包流程介绍
1.1.1 指定接口:
选择左上角指定接口列表图标包的接口:
,在接口列表图标中选中需要抓
表中所列出的每一项对应为系统中的某一块具体的物理网卡,start、options、details分别表示开始抓包、参数设定、接口具体信息。
1.1.2 设定参数:
在接口界面选择options:
该界面可以设定过滤参数,呈现参数等;过滤参数可指定需要抓包的主机地址、端口、协议类型等。上图表示只抓源或目标端口80并且是60.191.109.197主机相关的包,并且实时呈现,自动滚屏,不做端口、主机名称和MAC地址的名称解析。
1.1.3 开始抓包:
设定好参数后,就可以开始抓包了:
程序主界面会实时的呈现当前抓到的包,呈现的列可以通过参数设置。
键表示停止。第二个窗格表示选中的包的具体分析出来的
内容,协议分析可以进一步指定协议分析。第三级窗格表示选中包对应的二进制内容。
1.1.4 结果过滤:
抓包结果可以通过指定过滤器设置;该过滤参数表达式语法和之前的过滤语法有所区别,不过功能更加强大,可指定源IP,目标端口等。
也可以右键选择 follow 具体某一路流查看报文交互过程:
1.1.5 分组分析:
在获取到需要的报文后,右键选择“decode as …”可指定链路层、网络层、传输层的各种协议栈对具体的报文进行分析。
1.2 封包分析
Follow具体的某一路流后,会弹出去掉IP头后的报文,如果是TCP的明文传输,就会显示出具体的内容,否则就会显示出二进制对应的ASCII码。继续对该路码流decode,以RTP为例,会按照RTP协议栈解析UDP的报文内容,正确的解析会呈现出,RTP头各字段对应的值:
1.3 流量分析
如果进一步对某一路流进行分析,根据协议栈所以定义的内容,可得出此次交互所有的传输质量和内容大小等,也可对具体的报文做进一步处理,如保存报文内容等。
上图统计了此次RTP交互的丢包率、负载类型、源标识、目标地址和源地址等信息。 更进一步的分析内容:
1.4 故障分析
通过查看分析报文,可以发现网络中存在的问题,和服务端、客户端连接故障等。
1.5 使用实例
如要在抓获的所有网络包中,筛选出RTP包,并对其进行丢包率的分析,可现在decode as中选择network标签,先选出所有UDP的包,然后在transport标签中选择RTP,然后点选Telephony--RT--Show All Stream,通过点选显示窗口中某一地址发过来的包,可以列出改地址所发RTP包的流量状况。
2 Tcpdump 截取网络上的数据流
Tcpdump可以打印出在某个网络接口上,匹配指定正则表达式的报文。Tcpdump也可以通过-w选项把截取到的网络数据保存到指定的文件,同样也能通过-r参数读取和分析指定文件中的数据流。 作为互联网上经典的的系统管理员必备工具,tcpdump以其强大的功能,灵活的截取策略,成为每个系统管理员分析网络,排查问题等所必备的东东之一。
2.1 快速抓包
Tcpdump需要通过-i参数指定接口,可以通过ifconfig –a查看当前系统所有接口。如果不指定该参数,则默认为截取eth0上的网络数据数据。另:如需要抓取本机到本机的包,在linux系统下请用-i lo
选项。
直接运行tcpdump,表示抓取eth0上所有的数据。每行代表一个截取到的数据报。呈现的信息包括:包到达时间、协议类型、源/目标地址信息、传输协议类型、报文长度、总包数等信息。如需要完整的协议解析,可采用–v 模式抓包
2.2 正则表达式
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和ether具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。其他的几个关键字就是指明了监听的包的协议内容。
除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,greater,还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算是'or' ,'||';
(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 (5)日常用例:
tcpdump -i bond0 des 42.18.187.61 and port 34592 –s 2000 –w abc.cap抓取从bond0网卡上发往目的地址42.18.187.61的34592端口的包,允许单个包最大字节为2000,并写入abc.cap的抓包文档中 tcpdump -i eth2 udp and src 10.119.255.53 –c 10000 –w abc.cap –v抓取从eth2口接收到的从10.119.255.53发来的udp包,数量为10000个,写入abc.cap的抓包文档中,且实时显示抓包数量。
因篇幅问题不能全部显示,请点此查看更多更全内容