Wireshark使用教程

 1、说明

1.1 背景说明

对于大多数刚开始接触wireshark的使用者而言,常常是开始的时候时候看到wireshark能把全部数据包都拦截下来以为强无敌,可是面对一大堆的数据包要问有什么用或者说想要找到我想要的那些数据包怎么找(好比telnet登陆过程的那些数据包)则彻底是一脸茫然。php

一是界面一堆窗口,什么做用什么区别看不懂;二是捕获、显示过滤器表达示看不出有什么规律,每次过滤都要百度找半天。其实wireshark界面仍是比较清晰的,过滤器表过示也不困难,咱们今天就来破解这wireshark使用的两大难题。html

官网地址:https://www.wireshark.org/linux

官网下载地址:https://www.wireshark.org/#downloadweb

另外ethereal为何在2006年改名wireshark参见:https://www.linux.com/news/ethereal-changes-name-wireshark浏览器

1.2 拦截本地回环数据

另外注意本机访问本机的回环数据是不通过网卡的,好比咱们在本机访问搭建在本机上的web服务,但咱们常常有服务搭建在本机的操做也常常有拦截本地回环数据包加以分析的需求,因此咱们环要拦载回环数据包。操做以下。服务器

首先,以管理员身份运行cmd(普通用户没有路由表操做权限,会提示“请求的操做须要提高”)网络

而后,使用ipconfig查看本机ip和网关:jsp

ipconfig

再而后,使用如下命令添加路由,指定回环数据也要先转发到网关(使用上一步获取本的本机ip和网关替换其中的<your_IP>和<gateway_IP>):tcp

route add <your_IP> mask 255.255.255.255 <gateway_IP> metric 1

最后,查看路由表中路由是否已添加成功:工具

route print

回环数据经网关再回来会增长网卡的压力,可以使用如下命令删除路由(使用前边获取本的本机ip替换其中的<your_IP>):

route delete <your_IP>

2、Wireshark界面说明

WireShark 主要分为这几个界面

1. Display Filter(显示过滤器),  用于过滤

2. Packet List Pane(封包列表), 显示捕获到的封包, 有源地址和目标地址,端口号。 颜色不一样,表明

3. Packet Details Pane(封包详细信息), 显示封包中的字段

4. Dissector Pane(16进制数据)

5. Miscellanous(地址栏,杂项)

2.1显示过滤器

2.2 封包列表(Packet List Pane)

  封包列表的面板中显示,编号,时间戳,源地址,目标地址,协议,长度,以及封包信息。 你能够看到不一样的协议用了不一样的颜色显示。

你也能够修改这些显示颜色的规则,  View ->Coloring Rules.

2.3 封包详细信息 (Packet Details Pane)

  这个面板是咱们最重要的,用来查看协议中的每个字段。

  各行信息分别为:

    Frame:   物理层的数据帧概况

    Ethernet II: 数据链路层以太网帧头部信息

    Internet Protocol Version 4: 互联网层IP包头部信息

    Transmission Control Protocol:  传输层T的数据段头部信息,此处是TCP

    Hypertext Transfer Protocol:  应用层的信息,此处是HTTP协议

 2.4 TCP包的具体内容

 

3、捕获过滤器表达式

捕获过滤器表达式做用在wireshark开始捕获数据包以前,只捕获符合条件的数据包,不记录不符合条件的数据包。

捕获过滤器表达式没有像显示过滤器表达式那样明显的规律,但写法很少因此也不难;并且除非所有捕获要占用的磁盘空间实现太大,且你很是明确过滤掉的数据包是你不须要的,否则通常都不用捕获过滤器表达式而用显示过滤器表达式。

在wireshark2.x版本,启动后欢迎界面即有捕获过滤器,在其中输入过滤表达式开始捕获数据包时即会生效:

点击图中“书签”标志,再点管理“捕获筛选器”,便可看到经常使用捕获过滤表达示的书写形式

 

4、显示过滤器表达示及其书写规律

显示过滤器表达式做用在在wireshark捕获数据包以后,从已捕获的全部数据包中显示出符合条件的数据包,隐藏不符合条件的数据包。

显示过滤表达示在工具栏下方的“显示过滤器”输入框输入便可生效

4.1 基本过滤表达式

一条基本的表达式由过滤项、过滤关系、过滤值三项组成。

好比ip.addr == 192.168.1.1,这条表达式中ip.addr是过滤项、==是过滤关系,192.168.1.1是过滤值(整条表达示的意思是找出全部ip协议中源或目标ip、等于、192.168.1.1的数据包)

4.1.1 过滤项

初学者感受的“过滤表达式复杂”,最主要就是在这个过滤项上:一是不知道有哪些过滤项,二是不知道过滤项该怎么写。

这两个问题有一个共同的答案-----wireshark的过滤项是“协议“+”.“+”协议字段”的模式。以端口为例,端口出现于tcp协议中因此有端口这个过滤项且其写法就是tcp.port。

推广到其余协议,如eth、ip、udp、http、telnet、ftp、icmp、snmp等等其余协议都是这么个书写思路。固然wireshark出于缩减长度的缘由有些字段没有使用协议规定的名称而是使用简写(好比Destination Port在wireshark中写为dstport)又出于简使用增长了一些协议中没有的字段(好比tcp协议只有源端口和目标端口字段,为了简便使用wireshark增长了tcp.port字段来同时表明这两个),但思路总的算是不变的。并且在实际使用时咱们输入“协议”+“.”wireshark就会有支持的字段提示(特别是过滤表达式字段的首字母和wireshark在上边2窗口显示的字段名称首字母一般是同样的),看下名称就大概知道要用哪一个字段了。wireshark支持的所有协议及协议字段可查看官方说明

4.1.2 过滤关系

过滤关系就是大于、小于、等于等几种等式关系,咱们能够直接看官方给出的表。注意其中有“English”和“C-like”两个字段,这个意思是说“English”和“C-like”这两种写法在wireshark中是等价的、都是可用的。

4.1.3 过滤值

过滤值就是设定的过滤项应该知足过滤关系的标准,好比500、5000、50000等等。过滤值的写法通常已经被过滤项和过滤关系设定好了,只是填下本身的指望值就能够了。

 

4.2 复合过滤表达示

所谓复合过滤表达示,就是指由多条基本过滤表达式组合而成的表达示。基本过滤表达式的写法仍是不变的,复合过滤表达示多出来的东西就只是基本过滤表达示的“链接词”

咱们依然直接参照官方给出的表,一样“English”和“C-like”这两个字段仍是说明这两种写法在wireshark中是等价的、都是可用的。

 

4.3 常见用显示过滤需求及其对应表达式

数据链路层:

筛选mac地址为04:f9:38:ad:13:26的数据包----eth.src == 04:f9:38:ad:13:26

筛选源mac地址为04:f9:38:ad:13:26的数据包----eth.src == 04:f9:38:ad:13:26

网络层:

筛选ip地址为192.168.1.1的数据包----ip.addr == 192.168.1.1

筛选192.168.1.0网段的数据---- ip contains "192.168.1"

筛选192.168.1.1和192.168.1.2之间的数据包----ip.addr == 192.168.1.1 && ip.addr == 192.168.1.2

筛选从192.168.1.1到192.168.1.2的数据包----ip.src == 192.168.1.1 && ip.dst == 192.168.1.2

传输层:

筛选tcp协议的数据包----tcp

筛选除tcp协议之外的数据包----!tcp

筛选端口为80的数据包----tcp.port == 80

筛选12345端口和80端口之间的数据包----tcp.port == 12345 && tcp.port == 80

筛选从12345端口到80端口的数据包----tcp.srcport == 12345 && tcp.dstport == 80

应用层:

特别说明----http中http.request表示请求头中的第一行(如GET index.jsp HTTP/1.1),http.response表示响应头中的第一行(如HTTP/1.1 200 OK),其余头部都用http.header_name形式。

筛选url中包含.php的http数据包----http.request.uri contains ".php"

筛选内容包含username的http数据包----http contains "username"

4.4 抓取后过滤实例

过滤地址
ip.addr==192.168.10.10  或  ip.addr eq 192.168.10.10  #过滤地址
ip.src==192.168.10.10     #过滤源地址
ip.dst==192.168.10.10     #过滤目的地址
 
过滤协议,直接输入协议名
icmp 
http
 
过滤协议和端口
tcp.port==80
tcp.srcport==80
tcp.dstport==80
 
过滤http协议的请求方式
http.request.method=="GET"
http.request.method=="POST"
http.request.uri contains admin   #url中包含admin的
http.request.code==404    #http请求状态码的
 
链接符
&&  
||
and
or
 
经过链接符能够把上面的命令链接在一块儿,好比:
ip.src==192.168.10.10 and http.request.method=="POST"
————————————————
版权声明:本文为CSDN博主「谢公子」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处连接及本声明。
原文连接:https://blog.csdn.net/qq_36119192/article/details/84671638

 

 5、wireshark简单实用


双击选择了网卡以后,就开始抓包了

 

中止抓包后,咱们能够选择保存抓取到的数据包。文件——> 另存为——>选择一个存储路径,而后就保存为后缀为 .pcap 格式的文件了,能够双击直接用wireshark打开。

6、三次握手创建链接抓包 

如今咱们看一个TCP三次握手的实例

 三次握手过程为

 

 

这图我都看过不少遍了, 此次咱们用wireshark实际分析下三次握手的过程。

打开wireshark, 打开浏览器输入 http://192.168.241.129/bbs/forum.php

在wireshark中输入http过滤, 而后选中GET bbs/forum.php HTTP/1.1的那条记录,右键而后点击"Follow TCP Stream",

这样作的目的是为了获得与浏览器打开网站相关的数据包,将获得以下图

 

图中能够看到wireshark截获到了三次握手的三个数据包。第四个包才是HTTP的, 这说明HTTP的确是使用TCP创建链接的。

第一次握手数据包

客户端发送一个TCP,标志位为SYN,序列号为0, 表明客户端请求创建链接。 以下图

 

第二次握手的数据包

服务器发回确认包, 标志位为 SYN,ACK. 将确认序号(Acknowledgement Number)设置为客户的I S N加1以.即0+1=1, 以下图

 

第三次握手的数据包

客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.而且把服务器发来ACK的序号字段+1,放在肯定字段中发送给对方.而且在数据段放写ISN的+1, 以下图:

 

 就这样经过了TCP三次握手,创建了链接