一、Wireshark介绍
1、什么是Wireshark
Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是截取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。
在过去,网络封包分析软件是非常昂贵的,或是专门属于盈利用的软件。Ethereal的出现改变了这一切。
2、Wireshark官网链接
3、Wireshark的一些官方教程
● Wireshark官方维基教程
● 《Wireshark数据包分析实战》第二版 Chris Sanders
● 《Wireshark网络分析》第二版 Laura Chappell
● 《TCP/IP协议栈详解卷一》W.RIchard Stevens
二、Wireshark的基本抓包原理
1、网络原理
哪种网络情况能够抓到包
本节讲解如何才可以让流量进入wireshark主机
1) 本机环境
直接抓包本机网卡进出流量
2)集线器环境 - 物理层
流量防洪,同一冲突域时可以抓。集线器已经是老一代产品,现在基本都会使用交换机进行流量转发。
集线器的特点就是,将所有主机的流量都给其他所有主机进行转发,也就是广播模式进行转发,通过这个原理我们就可以通过集线器环境获得在同一冲突域的主机。
3)交换机环境 - 数据链路层
交换机环境又分为三种
① 端口镜像
交换机的工作原理是通过维护交换机自身的MAC地址表来进行数据交换,也就是说,正常情况下,我们在主机上安装了wireshark,也很难让通过交换机进行连接的其他主机流量流入我们的主机上。
这个时候我们可以在交换机上通过SPAN技术做端口镜像,然后将wireshark主机网卡设置为混杂模式,将其他主机的流量可以流入wireshark主机。进而进行流量分析
② ARP欺骗 - 非正常情况进行
使用ARP攻击软件Cain&Abel 进行欺骗交换机,以获取其他主机的流量信息
比如下图中的PC2 要发送数据信息给到PC3,发送信息之前给交换机发ARP请求(广播),然后PC1由于安装了ARP病毒软件,就会进行回复,骗取交换机,让PC1上的ARP表存储一个错误的信息,IP3对应的是PC1的MAC地址。
这也是常见的局域网ARP劫持,PC1获取局域网内部的所有流量,再由PC1决定是否要转发出去。
③ MAC泛洪 - 非正常情况进行
使用工具在PC1上给交换机发送大量的泛洪垃圾包,产生大量的垃圾地址,让交换机上本来存储正确的MAC表慢慢替换为全是错误的垃圾映射,按照交换机的处理原理,当PC2和PC3收到大量的未知帧流量之后,就会引发交换机进行对外泛洪,PC1就会获得其他主机的流量包。
2、底层原理
抓包的底层架构是什么样的 本节主要讲解
当wireshark主机获取到流量以后是如何进行处理的
● win-\libpcap
Wireshark抓包时依赖的库文件
● Capture
抓包引擎,利用libpcap/WinPcap从底层抓取网络数据宝,libpcap/WinPcap提供了通用的抓包接口,能从不同类型的网络接口(包括以太网,令牌环网,ATM网等)获取数据包
● Wiretap
格式支持,从抓包文件中读取数据包,支持多种文件格式
● Core
核心引擎,通过函数调用将其他模块连接在一起,起到联动调度的作用。
- Span
Wireshark Packetage Analyzing,包分析引擎。- Protocol-Tree:保存数据包的协议信息,wireshark的协议结构采用树形结构,解析协议报文时只需要从根节点通过函数句柄依次调用各层解析函数即可。
- Dissectors:在epan/dissector目录下,各种协议解码器,支持700+种协议解析,对于没种协议,解码器都能识别出协议字段(field),并显示出字段值,由于网络协议种类很多,为了使协议和协议之间的层级关系明显,对数据流的各层次的协议能够逐层处理,wireshark系统采用了协议树的方式
- Plugins:一些解码器以插件形式实现,源码在plugins目录
- Display-FIlters:显示过滤引擎,源码在epan/dfilter目录
● GTK1/2
图像处理工具,处理用户的输入输出显示
三、安装wireshark
按照提示无脑安装
● mac启动报创建文件夹权限不够
sudo chown 当前用户名 文件夹名称
四、Wireshark界面介绍
双击可以打开某一个网卡页面
点击停止之后,才可以保存数据包到本地
● 调整字体大小
工具栏放大镜
● 列设置
默认的包含,什么时候发的?谁给谁发的?用了什么协议?发了什么内容?发了多少数据?
增删改查列,可以通过右键数据包详情栏中的某一个,可以添加到列。右键列表中的表头可以进行删除,修改。
● 设置时间参考格式
默认是将第一个获得的数据包当做参考,后续进行时间递增
如果想修改参考时间,右键某一个数据包,将这个数据包置为时间参考,相当于从当前包开始,后边就开始以这个包的时间=0来进行时间递增。
● 名字解析
○ 将常见的ip地址解析成对应所有者,如阿里的常用ip,解析为阿里巴巴
菜单栏 - capture - 勾选上就可以
也可以设置本机主机地址为其他名称,如qsr-apple等等
当数据量比较大的时候是不建议进行修改的,会损耗主机性能
五、数据流的追踪
1、筛选出http请求
2、右键选中追踪流
3、选择http流
4、查看流信息
六、抓包观察HTTP长链接
1、客户端抓取长链接
1)查看客户端的ip地址
wifi连接处可以直接查看ip地址
2)设置Charles代理
让手机的流量完全由PC代理,设置主机+端口
3)设置过滤器进行信息过滤
通过设置过滤器源头ip地址和目标ip地址,过滤tcp请求,关注建立和断开请求
2、从服务端tcpdump
tcpdump -S -i eth1 -nn -vvv port 80 -w test.pcap
将test.pcap扔进去wireshark进行分析
只要观察到同一个GET/POST请求使用的是同一个HTTP长链接。就以此突破,找到这个HTTP建立和断开的时间。
七、Wireshark过滤器常用语法
1、过滤值比较符号
2、表达式连接符号
3、针对ip地址相关的过滤
- 对源地址进行过滤
ip.src == 192.168.0.1
- 对目的地址进行过滤
ip.dst == 192.168.0.1
- 对源地址或者目的地址进行过滤
ip.addr == 192.168.0.1
- ● 如果想排除以上的数据包,只需要将其用括号囊括,然后使用 “!” 即可
!(ip.addr == 192.168.0.1)
4、针对协议的过滤
● 获某种协议的数据包,表达式很简单仅仅需要把协议的名字输入即可
http
注意:区分大小写
- 捕获多种协议的数据包
http or telnet
- 排除某种协议的数据包
not arp 或者 !tcp
5、针对端口的过滤(视传输协议而定)
- 捕获某一端口的数据包(以tcp协议为例)
tcp.port == 80
- 捕获多端口的数据包,可以使用and来连接,下面是捕获高于某端口的表达式(以udp协议为例)
udp.port >= 2048
6、针对长度和内容的过滤
- 针对长度的过虑(这里的长度指定的是数据段的长度)
udp.length < 20 http.content_length <=30
- 针对uri 内容的过滤
http.request.uri matches "user" (请求的uri中包含“user”关键字的)
注意:matches 后的关键字是不区分大小写的!
http.request.uri contains "User" (请求的uri中包含“user”关键字的)
注意:contains 后的关键字是区分大小写的!
7、针对http请求的一些过滤实例
- 过滤出请求地址中包含“user”的请求,不包括域名;
http.request.uri contains "User"
- 精确过滤域名
http.host==baidu.com
- 模糊过滤域名
http.host contains "baidu"
- 过滤请求的content_type类型
http.content_type =="text/html"
- 过滤http请求方法
http.request.method=="POST"
- 过滤tcp端口
tcp.port==80
http && tcp.port==80 or tcp.port==5566
- 过滤http响应状态码
http.response.code==302
- 过滤含有指定cookie的http数据包
http.cookie contains "userid"
8、常用
1)比较符号
● 与:&&或者and
● 或:||或者or
● 非:!或者not
实例:
src or dst portrange 6000-8000 && tcp or ip6
2)常用表达式实例
源地址过滤
src www.baidu.com
目的地址过滤
dst www.baidu.com
目的地址端口过滤
dst post 80
协议过滤
udp