Wireshark 使用总结 [转]
目录
- wireshark能获取HTTP,也能获取HTTPS,但是不能解密HTTPS,所以wireshark看不懂HTTPS中的内容,总结,如果是处理HTTP,HTTPS 还是用Fiddler, 其他协议比如TCP,UDP 就用wireshark.
- 参考:https://blog.csdn.net/zhang5220760138/article/details/78924979
- 过滤器有两种:
- 一种是显示过滤器,就是主界面上那个,用来在捕获的记录中找到所需要的记录(在已经捕获的数据里查找)
- 一种是捕获过滤器,用来过滤捕获的封包,以免捕获太多的记录(准备捕获设定条件的数据)。 在Capture -> Capture Filters 中设置.
【表达式规则】
- 协议过滤
- 比如TCP,只显示TCP协议。
- IP 过滤
- 比如 ip.src ==192.168.1.102 显示源地址为192.168.1.102,
- ip.dst==192.168.1.102, 目标地址为192.168.1.102
- 端口过滤
- tcp.port ==80, 端口为80的
- tcp.srcport == 80, 只显示TCP协议的源端口为80的。
- Http模式过滤
- http.request.method=="GET", 只显示HTTP GET方法的。
逻辑运算符为 AND/ OR
Wireshark 过滤器写法总结
捕获过滤器
- 捕获过滤器:在抓包之前就设定好过滤条件,然后只抓取符合条件的数据包。
显示过滤器
- 显示过滤器:在已捕获的数据包集合中设置过滤条件,隐藏不想显示的数据包,只显示符合条件的数据包。
- 【注意】
- 这两种过滤器所使用的语法是完全不同的:
- 捕捉网卡数据的其实并不是Wireshark,而是WinPcap,当然要按WinPcap的规则来
- 显示过滤器就是Wireshark对已捕捉的数据进行筛选。
- 使用捕获过滤器的主要原因就是性能:
- 如果你知道并不需要分析某个类型的流量,那么可以简单地使用捕获过滤器过滤掉它,从而节省那些会被用来捕获这些数据包的处理器资源。
- 当处理大量数据的时候,使用捕获过滤器是相当好用的。
- Wireshark拦截通过网卡访问的所有数据,前提是没有设置任何代理。
- Wireshark不能拦截本地回环访问的请求,即127.0.0.1或者localhost。
过滤器具体写法
显示过滤器写法
- 过滤值比较符号及表达式之间的组合
【针对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)
【针对协议的过滤】
- 获某种协议的数据包,表达式很简单仅仅需要把协议的名字输入即可
http
- 注意:是否区分大小写?答:区分,只能为小写
- 捕获多种协议的数据包
http or telnet
- 排除某种协议的数据包
not arp 或者 !tcp
【针对端口的过滤(视传输协议而定)】
- 捕获某一端口的数据包(以tcp协议为例)
tcp.port == 80
- 捕获多端口的数据包,可以使用and来连接,下面是捕获高于某端口的表达式(以udp协议为例)
udp.port >= 2048
【针对长度和内容的过滤】
- 针对长度的过虑(这里的长度指定的是数据段的长度)
udp.length < 20 http.content_length <=30
- 针对uri 内容的过滤
http.request.uri matches "user" (请求的uri中包含“user”关键字的)
- 注意:matches 后的关键字是不区分大小写的!
http.request.uri contains "User" (请求的uri中包含“user”关键字的)
- 注意:contains 后的关键字是区分大小写的!
【针对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"
捕捉过滤器写法
- 在wireshark的工具栏中点击 捕获 →捕获过滤器,可以看到一些过滤器的写法,如下图:
【比较符号】
与:&&或者and 或:||或者or 非:!或者not
- 实例:
src or dst portrange 6000-8000 && tcp or ip6
【常用表达式实例】
- 源地址过滤
src www.baidu.com
- 目的地址过滤
dst www.baidu.com
- 目的地址端口过滤
dst post 80
- 协议过滤
udp
Wireshark 过滤器语法总结
- 参考:《Wireshark 过滤器语法总结》
过滤器的区别
- 捕捉过滤器(CaptureFilters):用于决定将什么样的信息记录在捕捉结果中。需要在开始捕捉前设置。
- 显示过滤器(DisplayFilters):在捕捉结果中进行详细查找。他们可以在得到捕捉结果后随意修改。
- 那么我应该使用哪一种过滤器呢?
- 两种过滤器的目的是不同的:
- 捕捉过滤器是数据经过的第一层过滤器,它用于控制捕捉数据的数量,以避免产生过大的日志文件。
- 显示过滤器是一种更为强大(复杂)的过滤器。它允许您在日志文件中迅速准确地找到所需要的记录。
- 两种过滤器使用的语法是完全不同的。
捕捉过滤器
语法: Protocol Direction Host(s) Value Logical Operations Other expression 例子: tcp dst 10.1.1.1 80 and tcp dst 10.2.2.2 3128
- 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)”不同。
- 例子:
- 显示目的TCP端口为3128的封包:
tcp dst port 3128
- 显示来源IP地址为10.1.1.1的封包:
ip src host 10.1.1.1
- 显示目的或来源IP地址为10.1.2.3的封包:
host 10.1.2.3
- 显示来源为UDP或TCP,并且端口号在2000至2500范围内的封包:
src portrange 2000-2500
- 显示除了icmp以外的所有封包。(icmp通常被ping工具使用):
not imcp
- 显示来源IP地址为10.7.2.12,但目的地不是10.200.0.0/16的封包:
src host 10.7.2.12 and not dst net 10.200.0.0/16
- 显示来源IP为10.4.1.12或者来源网络为10.6.0.0/16,目的地TCP端口号在200至10000之间,并且目的位于网络 10.0.0.0/8内的所有封包:
(src host 10.4.1.12 or src net 10.6.0.0/16) and tcp dst portrange 200-10000 and dst net 10.0.0.0/8
【注意事项】
- 当使用关键字作为值时,需使用反斜杠“\”。
- “ether proto \ip” (与关键字”ip”相同).
- 这样写将会以IP协议作为目标。
- “ip proto \icmp” (与关键字”icmp”相同).
- 这样写将会以ping工具常用的icmp作为目标。
- 可以在”ip”或”ether”后面使用”multicast”及”broadcast”关键字。
- 当您想排除广播请求时,”no broadcast”就会非常有用。
- Protocol(协议):
- 您可以使用大量位于OSI模型第2至7层的协议。点击”Expression…”按钮后,您可以看到它们。
- 比如:IP,TCP,DNS,SSH
- String1, String2 (可选项):
- 协议的子类。
- 点击相关父类旁的”+”号,然后选择其子类。
【Comparison operators (比较运算符)】
英文写法: C语言写法: 含义: eq == 等于 ne != 不等于 gt > 大于 lt < 小于 ge >= 大于等于 le <= 小于等于 【Logical expressions(逻辑运算符)】
英文写法: C语言写法: 含义: and && 逻辑与 or || 逻辑或 xor ^^ 逻辑异或 not ! 逻辑非
显示过滤器
语法: Protocol . String 1 . String 2 Comparison operator Value Logical Operations Other expression 例子: ftp passive ip == 10.2.3.4 xor icmp.type
- 例子:
- 显示SNMP或DNS或ICMP封包:
snmp || dns || icmp
- 显示来源或目的IP地址为10.1.1.1的封包:
ip.addr == 10.1.1.1
- 显示来源不为10.1.2.3或者目的不为10.4.5.6的封包:
- 换句话说,显示的封包将会为:
- 来源IP:除了10.1.2.3以外任意;目的IP:任意
- 以及
- 来源IP:任意;目的IP:除了10.4.5.6以外任意
ip.src != 10.1.2.3 or 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以外任意
ip.src != 10.1.2.3 and ip.dst != 10.4.5.6
- 显示来源或目的TCP端口号为25的封包:
tcp.port == 25
- 显示目的TCP端口号为25的封包:
tcp.dstport == 25
- 显示包含TCP标志的封包:
tcp.flags
- 显示包含TCP SYN标志的封包:
tcp.flags.syn == 0×02
- 如果过滤器的语法是正确的,表达式的背景呈绿色。如果呈红色,说明表达式有误
- 补充:可参考 https://blog.51cto.com/gtest/1750946