wireshark抓包使用指南

Wireshark 开始抓包

  wireshark是捕获机器上的某一块网卡的网络包,当你的机器上有多块网卡的时候,你需要选择一个网卡。

  点击Caputre->Interfaces… 出现下面对话框,选择正确的网卡。然后点击"Start"按钮, 开始抓包。

Wireshark 窗口介绍

  WireShark 主要分为这几个界面

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

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

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

  4. Dissector Pane(16进制数据)

  5. Miscellanous(地址栏,杂项)

Wireshark 显示过滤

  使用过滤是非常重要的, 初学者使用wireshark时,将会得到大量的冗余信息,在几千甚至几万条记录中,以至于很难找到自己需要的部分。搞得晕头转向。

  过滤器会帮助我们在大量的数据中迅速找到我们需要的信息。

过滤器有两种

  显示过滤器,就是主界面上那个,用来在捕获的记录中找到所需要的记录

  捕获过滤器,用来过滤捕获的封包,以免捕获太多的记录。 在Capture -> Capture Filters 中设置

保存过滤

  在Filter栏上,填好Filter的表达式后,点击Save按钮, 取个名字。比如"Filter 102",

  Filter栏上就多了个"Filter 102" 的按钮。

过滤器的区别

  捕捉过滤器(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)”不同。

显示过滤器

四个例子:

例子1:

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

ip.addr == 10.1.1.1

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

例子2:

ip.src != 10.1.2.3 or ip.dst != 10.4.5.6

显示来源不为10.1.2.3或者目的不为10.4.5.6的封包。

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

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

以及

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

例子3:

ip.src != 10.1.2.3 and ip.dst != 10.4.5.6

显示来源不为10.1.2.3并且目的IP不为10.4.5.6的封包。

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

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

例子4:

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

tcp.dstport == 25 显示目的TCP端口号为25的封包。

tcp.flags 显示包含TCP标志的封包。

tcp.flags.syn == 0×02 显示包含TCP SYN标志的封包。

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

过滤表达式的规则

表达式规则

   1. 协议过滤

  比如TCP,只显示TCP协议。

  2. IP 过滤

  比如 ip.src ==192.168.1.102 显示源地址为192.168.1.102,

  ip.dst==192.168.1.102, 目标地址为192.168.1.102

  3. 端口过滤

  tcp.port ==80, 端口为80的

  tcp.srcport == 80, 只显示TCP协议的愿端口为80的。

  4. Http模式过滤

  http.request.method==“GET”, 只显示HTTP GET方法的。

  5. 逻辑运算符为 AND/ OR

常用的过滤表达式

注意事项:

  1、当使用关键字作为值时,需使用反斜杠“/”。

  2、“ether proto /ip” (与关键字”ip”相同).

  这样写将会以IP协议作为目标。

  3、“ip proto /icmp” (与关键字”icmp”相同).

  这样写将会以ping工具常用的icmp作为目标。

  4、可以在”ip”或”ether”后面使用”multicast”及”broadcast”关键字。

  当您想排除广播请求时,”no broadcast”就会非常有用。

Protocol(协议):

  您可以使用大量位于OSI模型第2至7层的协议。点击”Expression…”按钮后,您可以看到它们。

  比如:IP,TCP,DNS,SSH

String1, String2 (可选项):

  协议的子类。

  点击相关父类旁的”+”号,然后选择其子类。

Comparison operators (比较运算符):

可以使用6种比较运算符,Logical expressions(逻辑运算符):

wireshark过滤匹配表达式实例

匹配过滤HTTP的请求URI中含有".gif"字符串,并且以.gif结尾(4个字节)的http请求数据包($是正则表达式中的结尾表示符)

http.request.uri matches “.gif$”

注意区别:

  http.request.uri contains “.gif$”

  与此不同,contains是包含字符串".gif$" (注意是5个字节)。

  匹配过滤HTTP的请求URI中含有".gif$"

  字符串的http请求数据包(这里$是字符,不是结尾符)

  网页请求过滤到jpg、png、zip文件(根据正则通配符 ,结合逻辑 and 、 or ,小括号 () 组合的模式,综合过滤。)

  ①只需要http的包;

  ②过滤掉jpg;

  ③过滤掉png;

  ④过滤掉zip

  http.request and !((http.request.full_uri matches “http://..jpg.”) or(http.request.full_uri matches “http://..png.”) or(http.request.full_uri matches “http://..zip.”))

  搜索过滤MAC地址前3个字节是0x001e4f的数据包。

  eth.addr[0:3]==00:1e:4f

  搜索按条件过滤udp的数据段payload(数字8是表示udp头部有8个字节,数据部分从第9个字节开始udp[8:])

  udp[8]==14 (14是十六进制0x14)匹配payload第一个字节0x14的UDP数据包

  udp[8:2]==14:05 可以udp[8:2]==1405,且只支持2个字节连续,三个以上须使用冒号:分隔表示十六进制。 (相当于 udp[8]==14 and   udp[9]==05,1405是0x1405)

  udp[8:3]==22:00:f7 但是不可以udp[8:3]==2200f7

  udp[8:4]==00:04:00:2a,匹配payload的前4个字节0x0004002a

  而udp contains 7c:7c:7d:7d 匹配payload中含有0x7c7c7d7d的UDP数据包,不一定是从第一字节匹配。

  udp[8:4] matches “\x14\x05\x07\x18”

  udp[8:] matches “^\x14\x05\x07\x18\x14”

  搜索按条件过滤tcp的数据段payload(数字20是表示tcp头部有20个字节,数据部分从第21个字节开始tcp[20:])

  tcp[20:] matches “^GET [ -~]*HTTP/1.1\x0d\x0a”

  等同http matches “^GET [ -~]*HTTP/1.1\x0d\x0a”

  tcp[20:] matches “^GET (.*?)HTTP/1.1\x0d\x0a”

  tcp[20:] matches “^GET (.?)HTTP/1.1\x0d\x0a[\x00-\xff]Host: (.?)pplive(.?)\x0d\x0a”

  tcp[20:] matches "^GET (.*?)HTTP/1.1\x0d\x0a[\x00-\xff]*Host: "

  tcp[20:] matches “^POST / HTTP/1.1\x0d\x0a[\x00-\xff]*\x0d\x0aConnection: Keep-Alive\x0d\x0a\x0d\x0a”

  检测SMB头的smb标记,指明smb标记从tcp头部第24byte的位置开始匹配。

  tcp[24:4] == ff:53:4d:42

  检测SMB头的smb标记,tcp的数据包含十六进制ff:53:4d:42,从tcp头部开始搜索此数据。

  tcp contains ff:53:4d:42

  tcp matches “\xff\x53\x4d\x42”

  检测tcp含有十六进制01:bd,从tcp头部开始搜索此数据。

  tcp matches “\x01\xbd”

  检测MS08067的RPC请求路径

tcp[179:13] == 00:5c:00:2e:00:2e:00:5c:00:2e:00:2e:00

\ . . \ . .

封包列表(Packet List Pane)

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

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

封包详细信息 (Packet Details Pane)

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

  各行信息分别为

  Frame: 物理层的数据帧概况

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

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

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

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

TCP包的具体内容

  从下图可以看到wireshark捕获到的TCP包中的每个字段。

实例分析TCP三次握手过程

  看到这, 基本上对wireshak有了初步了解, 现在我们看一个TCP三次握手的实例。

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

  打开wireshark, 打开浏览器输入 轻松熊喵喵-CSDN博客

  在wireshark中输入http过滤, 然后选中GET /q490007458q 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三次握手,建立了连接。

  • 21
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值