wireshark过滤语法总结

wireshark过滤语法总结

做应用识别这一块经常要对应用产生的数据流量进行分析。

抓包采用wireshark,提取特征时,要对session进行过滤,找到关键的stream,这里总结了wireshark过滤的基本语法,供自己以后参考。(脑子记不住东西)


wireshark进行过滤时,按照过滤的语法可分为协议过滤和内容过滤。

对标准协议,既支持粗粒度的过滤如HTTP,也支持细粒度的、依据协议属性值进行的过滤如tcp.port==53、http.request.method=="GET"。

对内容的过滤,既支持深度的字符串匹配过滤如http contains "Server",也支持特定偏移处值的匹配过滤如tcp[20:3] == 47:45:54。


wireshark有两种过滤器:

捕捉过滤器(CaptureFilters):用于决定将什么样的信息记录在捕捉结果中。
显示过滤器(DisplayFilters):用于在捕捉结果中进行详细查找。


捕捉过滤器在抓抱前进行设置,决定抓取怎样的数据;显示过滤器用于过滤抓包数据,方便stream的追踪和排查。

捕捉过滤器仅支持协议过滤,显示过滤器既支持协议过滤也支持内容过滤。

两种过滤器它们支持的过滤语法并不一样。


捕捉过滤器--捕捉前依据协议的相关信息进行过滤设置

语法:ProtocolDirectionHost(s)ValueLogical OperationsOther expression
例子:tcpdst10.1.1.180andtcp dst 10.2.2.2 3128

示例:

(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

捕捉IP为10.4.1.12或者源IP位于网络10.6.0.0/16,目的IP的TCP端口号在200至10000之间,并且目的IP位于网络 10.0.0.0/8内的所有封包。


字段详解:

Protocol(协议):
可能值: ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp and udp.
如果没指明协议类型,则默认为捕捉所有支持的协议。
注:在wireshark的HELP-Manual Pages-Wireshark Filter中查到其支持的协议。


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.协议过滤语法

语法:Protocol.String 1.String 2Comparison operator  ValueLogical OperationsOther expression
例子:http request method =="POST"oricmp.type

string1和string2是可选的。

依据协议过滤时,可直接通过协议来进行过滤,也能依据协议的属性值进行过滤。

按协议进行过滤:

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

按协议的属性值进行过滤:
ip.addr == 10.1.1.1

ip.src != 10.1.2.3 or ip.dst != 10.4.5.6
ip.src == 10.230.0.0/16显示来自10.230网段的封包

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

http.request.method== "POST"显示post请求方式的http封包。
http.host == "tracker.1ting.com"显示请求的域名为tracker.1ting.comhttp封包。

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

2.内容过滤语法

2.1深度字符串匹配

contains :Does the protocol, field or slice contain a value

示例

tcp contains "http"显示payload中包含"http"字符串的tcp封包。

http.request.uri contains "online"显示请求的uri包含"online"的http封包。

2.2特定偏移处值的过滤

tcp[20:3] == 47:45:54  /* 16进制形式,tcp头部一般是20字节,所以这个是对payload的前三个字节进行过滤 */

http.host[0:4] == "trac"



过滤中函数的使用(upper、lower)

upper(string-field) - converts a string field to uppercase
lower(string-field) - converts a string field to lowercase
示例
upper(http.request.uri) contains "ONLINE"


wireshark过滤支持比较运算符、逻辑运算符,内容过滤时还能使用位运算。

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


第二部分

一、IP过滤:包括来源IP或者目标IP等于某个IP
  比如:ip.src addr==192.168.0.208 or ip.src addr eq 192.168.0.208 显示来源IP
  ip.dst addr==192.168.0.208 or ip.dst addr eq 192.168.0.208 显示目标IP
二、端口过滤:
  比如:tcp.port eq 80 // 不管端口是来源的还是目标的都显示
    tcp.port == 80
    tcp.port eq 2722
    tcp.port eq 80 or udp.port eq 80
    tcp.dstport == 80 // 只显tcp协议的目标端口80
    tcp.srcport == 80 // 只显tcp协议的来源端口80
  过滤端口范围
    tcp.port >= 1 and tcp.port <= 80
三、协议过滤:tcp
  udp
  arp
  icmp
  http
  smtp
  ftp
  dns
  msnms
  ip
  ssl
  等等
  排除ssl包,如!ssl 或者 not ssl
四、包长度过滤:
  比如:
    udp.length == 26 这个长度是指udp本身固定长度8加上udp下面那块数据包之和
    tcp.len >= 7 指的是ip数据包(tcp下面那块数据),不包括tcp本身
    ip.len == 94 除了以太网头固定长度14,其它都算是ip.len,即从ip本身到最后
    frame.len == 119 整个数据包长度,eth开始到最后
五、http模式过滤:
  例子:
    http.request.method == “GET”
    http.request.method == “POST”
    http.request.uri == “/img/logo-edu.gif”
    http contains “GET”
    http contains “HTTP/1.”
    // GET
    http.request.method == “GET” && http contains “Host: ”
    http.request.method == “GET” && http contains “User-Agent: ”
    // POST
    http.request.method == “POST” && http contains “Host: ”
    http.request.method == “POST” && http contains “User-Agent: ”
    // 响应包
    http contains “HTTP/1.1 200 OK” && http contains “Content-Type: ”
    http contains “HTTP/1.0 200 OK” && http contains “Content-Type: ”
  一定包含如下
    Content-Type:
六、连接符 and / or
七、表达式:!(arp.src==192.168.1.1) and !(arp.dst.proto_ipv4==192.168.1.243)

八、expert.message是用来对info信息过滤,主要配合contain来使用

wireshark Info栏里的”TCP segment of a reassembled PDU”的意思


  由于主机向服务器提交一个完整的数据,而这个完整的数据超出了TCP的最大MSS,因此主机就会通过发送多个数据包来传送这些数据(这些数包并未被分片),而wireshark为了标记同一个完整的数据就会注上”TCP segment of a reassembled PDU”,那么wireshark中如何查看服务端对同一个包的响应呢,这里主要是根据sequence number的值来识别的,他们的sequence number的值是一样的。


参考:

wireshark的HELP-Manual Pages-Wireshark Filter

http://blog.csdn.net/yhwxxx/article/details/5643095

http://tieba.baidu.com/p/739516717


<think>好的,我现在需要帮用户了解Wireshark过滤语法,包括使用方法、示例等。首先,我应该回忆一下自己对Wireshark过滤器的了解,然后结合用户提供的引用内容来组织回答。 用户的问题是关于Wireshark过滤器的语法、示例和使用方法。根据系统级指令,我需要确保回答结构清晰,分步骤说明,同时生成相关问题。还要注意引用标记的正确添加,以及使用正确的LaTeX格式。 首先,用户提到的引用有三个:[^1]、[^2]、[^3]。引用1提到显示过滤器的作用、使用方法和常见示例;引用2提到了更多示例和过滤表达式;引用3则涉及TCP标志位的过滤,比如URG、ACK等。这些都需要在回答中适当引用。 接下来,我需要整理Wireshark过滤器的基本概念,分为捕获过滤器和显示过滤器。捕获过滤器使用BPF语法,而显示过滤器使用更灵活的语法。需要分别说明它们的语法规则,并给出示例。 例如,捕获过滤器的例子可能包括只捕获HTTP流量或特定IP地址。显示过滤器的例子可能包括过滤协议、IP地址、端口、TCP标志等。这里需要确保每个例子都正确,并符合引用中的内容,比如引用3中的TCP标志位。 然后,要提到复合表达式的使用,逻辑运算符如and、or、not,以及字段的存在性检查。同时,需要提到如何验证过滤语法的正确性,比如Wireshark的绿色背景提示,这可能是引用1或2中的内容。 在常见示例部分,需要涵盖HTTP、IP地址、端口组合、数据包长度、TCP标志等。特别是TCP标志的部分要准确,比如tcp.flags.syn==1和tcp.flags.ack==1的组合,这来自引用3。 最后,注意事项部分要提醒用户语法严格、字段名称的正确使用,以及测试复杂表达式的方法。这些内容可能参考了引用1和2中的使用指南。 生成的相关问题需要围绕用户可能进一步想了解的内容,比如捕获与显示过滤器的区别、特定协议过滤、排除噪音的方法以及过滤器的保存方法。这些问题应该自然延伸当前主题,并帮助用户深入学习。 在写作过程中,要确保所有行内数学表达式(如果有的话)使用$...$,但根据内容来看,这里可能不需要数学公式。但如果有涉及,比如数据包长度范围,可能需要用正确的格式。不过目前看来,Wireshark过滤器更多是语法而非数学表达式,所以这部分可能不适用。 最后检查是否符合所有系统级指令:结构清晰、引用正确、中文回答、生成相关问题,以及正确使用LaTeX。确认引用标记在相关段落末尾自然添加,比如在提到TCP标志时引用[^3],在语法验证时引用或。</think>### Wireshark过滤语法详解 #### 一、过滤器类型 Wireshark支持两种过滤器: 1. **捕获过滤器**(BPF语法):在抓包时过滤流量,语法为`host 192.168.1.1 and tcp port 80` 2. **显示过滤器**:对已捕获的流量进行二次筛选,语法更灵活 #### 二、显示过滤语法规则 1. **基本格式**:`协议.字段 运算符 值` - 示例:`http.request.method == "GET"` 2. **常用运算符**: - 比较:`==`、`!=`、`>`、`<` - 包含:`contains`(如`http.host contains "baidu"`) - 匹配:`matches`(支持正则表达式) 3. **逻辑运算符**: - 与:`and`(如`ip.src == 192.168.1.1 and tcp.port == 80`) - 或:`or` - 非:`!` 或 `not` 4. **存在性检查**: - 检查字段是否存在:`tcp.flags.syn`(等价于`tcp.flags.syn == 1`) #### 三、常见过滤示例 1. **协议过滤**: ```bash http # 所有HTTP流量 dns.qry.name # 包含DNS查询名的数据包 ``` 2. **IP地址过滤**: ```bash ip.addr == 192.168.1.100 # 源或目标IP ip.src == 10.0.0.1 and ip.dst == 8.8.8.8 ``` 3. **端口组合过滤**: ```bash tcp.port in {80 443 8080} # 多端口过滤 udp.port != 53 # 排除DNS流量 ``` 4. **数据包特征过滤**: ```bash frame.len > 1000 # 大于1000字节的数据包 tcp.flags.syn == 1 # 所有SYN包 tcp.analysis.retransmission # 重传数据包 ``` #### 四、语法验证技巧 1. 输入时会自动提示可用字段 2. 语法正确的表达式输入框显示绿色背景 3. 右击数据包字段可直接生成过滤表达式 #### 五、注意事项 1. 字段名称严格区分大小写(如`tcp`有效,`TCP`无效) 2. 字符串比较需用双引号:`http.user_agent == "curl/7.68.0"` 3. 复杂表达式建议分段测试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值