IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Wireshark 提示和技巧 | 捕获过滤之运算符 >> 和 << -> 正文阅读

[网络协议]Wireshark 提示和技巧 | 捕获过滤之运算符 >> 和 <<

捕获过滤

「捕获过滤」(capture filter),一句话解释就是抓包过滤,需要抓取哪些特定的数据包。

可能简单来说的一个原因就是考虑性能,如果明确知道需要或不需要分析某个主机或某些协议类型的流量,那么就可以使用捕获过滤器进行过滤,从而节省处理器资源。因此当网卡传输大量数据流量的时候,通过捕获过滤器进行过滤是很有用处的。但如果性能满足或者你对交互协议不那么清楚的情况下,建议还是抓全包,原因是很有可能过滤掉某些有用的数据包,会导致无法分析到产生问题的真正原因。

其中 Wireshark 捕获过滤器是用 libpcap 过滤语言所编写。该语法概述可见官方 User’s Guide,完整文档可详见:pcap-filter man page 。Wireshark 捕获过滤器与 tcpdump、WinDump、Analyzer 等使用 libpcap/WinPcap 库的任何其他程序使用相同的语法。


语法表达式

<expr> relop <expr>?

  1. relop :>,<,>=,<=,=,!=

  2. expr :一个算术表达式,由整型常量、二进制运算符[+、-、*、/、%、&、|、^、<<、>>]、长度运算符和特定数据包数据引用运算符组成。

  3. proto [ expr : size ]
    proto:ether, wlan, ppp, ip, arp, rarp, tcp, udp, icmp, ip6,指明该引用操作所对应的协议。
    expr:给出指定协议层的字节偏移量。
    size:可选,表示感兴趣字段中的字节数;它可以是 1、2 或 4 ,默认值是 1 。

简略列举本文案例所需的知识点,详细内容详见官方文档。


实例

诚如以上标题及正文所说,对于捕获过滤,个人建议仍是按需使用,以下实例简析其中二进制运算符 << 和 >> 的使用方式。

网络实例,感谢前人栽树~

  1. To select all IPv4 HTTP packets to and from port 80, i.e. print only packets that contain data, not, for example, SYN and FIN packets and ACK-only packets.
tcp port 80 and (((ip[2:2] - ((ip[0] & 0xf)<<2)) - ((tcp[12] & 0xf0)>>2)) != 0)
  • All IPv4 HTTP packets to and from port 80
tcp port 80
表示过滤选择 tcp 80 端口的进出数据包
  • Packets that contain data

包含有数据字段的 TCP 数据包,即要求 TCP payload 不为 0。

ip[2:2]
代表 IPv4 数据包总长度,单位为字节。

(ip[0] & 0xf)<<2
ip[0] & 0xf,等同于ip[0] & 0x0f,代表 IPv4 首部长度,单位为 4 字节,例如 00000101 值为 5<<2,代表左移2位,在原值的基础上 *4 ,例如 00000101 值为 5 ,左移2位后变为 00010100,值为 20。
最终 (ip[0] & 0xf)<<2 得到的是 IPv4 数据包首部实际长度,单位为字节。

(tcp[12] & 0xf0)>>2
tcp[12] & 0xf0,代表 TCP 首部长度,单位为 1/4 字节。
>>2,代表右移2位,在原值的基础上 /4 ,例如 01010000 值为 80 ,右移2位后变为 00010100,值为 20。
最终 (tcp[12] & 0xf0)>>2 得到的是 TCP 数据包首部实际长度,单位为字节。

至此数值单位一致后,最终表达式
((ip[2:2] - ((ip[0] & 0xf)<<2)) - ((tcp[12] & 0xf0)>>2)) != 0
IPv4 数据包总长度 - IPv4 数据包首部长度 - TCP 数据包首部长度 != 0,意味着 IPv4 数据包含有 DATA,即 TCP payload 不为 0

  1. HTTP GET requests 数据包
port 80 and tcp[((tcp[12] & 0xf0) >> 2):4] = 0x47455420
  • HTTP 数据包
port 80
代表运行在端口 80 上的 HTTP 数据包。
  • GET 请求
tcp[12] & 0xf0) >> 2 ,在此为数据偏移位,也即 TCP 数据包首部长度。
4,代表感兴趣的字节长度为 4 。
最终 tcp[((tcp[12] & 0xf0) >> 2):4] 代表的是 TCP 数据包首部往后 4 个字节。

而 'G', 'E', 'T', ' ' ,16 进制值分别对应为 47, 45, 54, 20;取 4 字节即为 GET 。 

同理 0x504f5354 为 POST

YSF-01

总结

概括来说,二进制运算符 << 和 >> ,表示按位左或右移,n 位就是乘以或除以 2 的 n 次方。 在捕获过滤使用时,可以用来统一报文中不同字段的值,考虑的因素有协议字节偏移量、字段单位等等。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-11-10 12:45:58  更:2021-11-10 12:46:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:53:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码