BFP 过滤规则

2023-11-20

设置过滤规则就是让网络设备只是捕获我们感兴趣的网络数据包,如果没有设置过滤规则,即上面的 filter_app 是空字符串,那么网络设备就捕获所有类型的数据包,否则只是捕获过滤规则设置的数据包,此时过滤规则的逻辑值为真。此过滤规则是通用的,由著名的网络程序 tcpdump 推出,其他很多的网络程序都是基于此规则进行设计的。此过滤规则的内部解析机制上面介绍过,下面我们参考 tcpdump 的过滤规则形式着重介绍一下过滤规则的定义形式。

    ///*过滤长度小于500的数据包

    sudo tcpdump -d greater 500

    (000) ld #pktlen

        (001) jge #0x1f4 jt 2    jf 3

        (002) ret #262144

        (003) ret #0

    //sudo tcpdump -dd greater 500

    struct sock_filter BPF_code[] = {

        {0x80, 0, 0, 0x00000000},

        {0x35, 0, 1, 0x000001f4},

        {0x6, 0, 0, 0x00040000},

        {0x6, 0, 0, 0x00000000}};

    struct sock_fprog Filter;

    Filter.len = 4;

    Filter.filter = BPF_code;

    struct ifreq req;

    strcpy(req.ifr_name, wlan);

    ioctl(sock, SIOCGIFINDEX, &req);

    ///* Attach the filter to the socket */

    if (setsockopt(sock, SOL_SOCKET, SO_ATTACH_FILTER,

                 &Filter, sizeof(Filter)) < 0)

    {

        perror("setsockopt");

        close(sock);

        exit(1);

    }

过滤规则由一个或多个原语组成。原语通常由一个标识(id, 名称或数字)和标识前面的一个或多个限定词组成。
过滤规则有三种类型的限定词,分别为 type、dir 和 proto。

1.type
    类型限定词,说明标识的类型,即名字的类型或数字的类型。大概有 host、net 和 port 三种类型。例如 ’host foo’, ’net 128.3’, ’port 20’。如果不指定类型修饰字,就使用默认的 host。

2.dir
    方向限定词,说明相对于标识的传输方向,即数据是传入还是传出标识。可以使用的方向有 src, dst, src or dst 和 src and dst。例如,’src foo’, ’dst net 128.3’, ’src or dst port ftp-data’。如果不指定方向限定词,就使用默认的 src or dst。对于’null’ 链路层(就是说像 slip 之类的点到点协议),用 inbound 和 outbound 限定词指定所需的传输方向。

3.proto
    协议限定词,说明过滤规则指定的协议。可以使用的协议有: ether, fddi, ip, arp, rarp, decnet,lat, sca, moprc, mopdl, tcp 和 udp。例如,’ether src foo’, ’arp net 128.3’, ’tcp port 21’。如果不指定协议限定词,就使用所有符合类型的协议。例如,’src foo’ 指(ip 或 arp 或 rarp)src foo’ , ’netbar’ 指 ’ (ip 或 arp 或 rarp) net bar’, ’port 53’ 指(tcp 或 udp)port 53’。

更复杂的过滤器表达式可以通过 and(&&), or(||) 和 not(!) 连接原语来组建。例如,’host foo and notport ftp and not port ftp-data’。为了简便,可以忽略相同的限定词。例如,’tcp dst port ftp orftp-data or domain’ 实际上等价于 ’tcp dst port ftp or tcp dst port ftp-data or tcp dst port domain’。

下面介绍过滤规则的原语,允许的原语有以下几种。

    dst host host1
        如果报文中 IP 的目的地址域是 host1,则逻辑为真。host1 既可以是地址,也可以是主机名。此过滤规则就是捕获所有目的地址是 host1 的网络数据包。

    src host host1
        如果报文中 IP 的源地址域是 host1,则逻辑为真。即捕获所有源地址是 host1 的所有网络数据包。

    host host1
        如果报文中 IP 的源地址或者目的地址是 host1,则逻辑为真。即捕获所有源地址或者目的地址是 host1 的网络数据包。

上面所有的 host 表达式都可以加上 ip, arp 或 rarp 关键字做前缀,就像:
    ip host host1
它等价于:
    ether proto \ip and host host1

如果 host1 是拥有多个 IP 地址的主机名, 它的每个地址都会被查验。
    ether dst ehost
        如果报文的以太目的地址是 ehost,则逻辑为真。即捕获所有以太网目的地址是 ehost 的网络数据包。其中 ehost 既可以是名字,如 eth0 (/etc/ethers 里有),也可以是数字。

    ether src ehost
        如果报文的以太网源地址是 ehost,则逻辑为真。即捕获所有以太网源地址是 ehost 的网络数据包。

    ether host ehost
        如果报文的以太源地址或以太目的地址是 ehost,则逻辑为真。即捕获所有以太网源地址或者目的地址是 ehost 的网络数据包。

    gateway host
        如果报文把 host 当做网关,则逻辑为真。也就是说,报文的以太网源或目的地址是 host,但是 IP 的源目地址都不是 host。此 host 必须是个主机名,而且必须存在于/etc/hosts 和/etc/ethers 中。一个等价的表达式是:

    ether host ehost and not host host1
        对于 host1 和 ehost,它既可以是名字,也可以是数字。

    dst net net1
        如果报文的 IP 目的地址属于网络号 net1,则逻辑为真。net1 既可以是名字(存在/etc/networks 中),也可以是网络号。即捕获所有目的地址属于网络 net1 的网络数据包。

    src net net1
        如果报文的 IP 源地址属于网络号 net1,则逻辑为真。即捕获所有源地址属于网络 net1的网络数据包。

    net net1
        如果报文的 IP 源地址或目的地址属于网络号 net1,则过滤规则逻辑为真。即捕获所有源地址或者目的地址属于网络 net1 的网络数据包。

    net net1 mask mask1
        如果 IP 地址匹配指定网络掩码 mask1 的 net1,则逻辑为真。本原语可以用 src 或 dst 修饰。

    net net1/len
        如果 IP 地址匹配指定网络掩码的 net1,则逻辑为真,掩码的有效位宽为 len。本原语可以用 src 或 dst 修饰。

    dst port port1
        如果报文是 ip/tcp 或 ip/udp,并且目的端口是 port1,则逻辑为真。port1 是一个数字,也可以是/etc/services 中定义过的名字。如果使用名字,则检查端口号和协议。如果使用数字,或者有二义的名字,则只检查端口号。例如,dst port 513 将显示 tcp/login 的数据和 udp/who的数据,而 port domain 将显示 tcp/domain 和 udp/domain 的数据。

    src port port1
        如果报文的源端口号是 port1,则逻辑为真。即捕获所有源端口号是 port1 的网络数据包。

    port port
        如果报文的源端口或目的端口是 port,则逻辑为真,上述的任意一个端口表达式都可以用关键字 tcp 或 udp 做前缀,就如:

    tcp src port port1
        它只匹配源端口是 port1 的 TCP 报文。即捕获所有源端口号是 port1 的协议是 tcp 的网络数据包。

    less length
        如果报文的长度小于等于 length,则逻辑为真。即只捕获所有长度小于 length 的网络数据包。它等同于:len <= length.

    greater length
        如果报文的长度大于等于 length,则逻辑为真。即只捕获所有长度大于 length 的网络数据包。它等同于:len >= length.

    ip proto protocol
        如果报文是 IP 数据报,其内容的协议类型是 protocol,则逻辑为真。即只捕获网络协议类型是 protocol 的 ip 数据包。protocol 可以是数字,也可以是下列名称中的一个:icmp, igrp,udp, nd 或 tcp。注意这些标识符 tcp, udp 和 icmp 也同样是关键字,所以必须用反斜杠(\)义,在 C-shell 中应该是\\。

    ether broadcast
        如果报文是以太广播报文,则逻辑为真。即捕获以太网广播数据包。关键字 ether 是可选的。

    ip broadcast
        如果报文是 IP 广播报文,则逻辑为真。检查全 0 和全 1 的广播约定,并且检查本地的子网掩码。

   ether multicast
        如果报文是以太多目传送报文(multicast),则过滤规则逻辑为真。关键字 ether 是可选的。这实际上是 ’ether[0] & 1 != 0’ 的简写。

    ip multicast
        如果报文是 IP 多目传送报文,则过滤规则逻辑为真。即捕获 ip 多目传送报文。

    ether proto protocol
        如果报文协议属于以太类型的 protocol,则逻辑为真。Protocol 可以是数字,也可以是名字,如 ip, arp 或 rarp。注意这些标识符也是关键字,所以必须用反斜杠(\)转义。如果是 FDDI(例如,’fddi protocol arp’),协议标识来自 802.2 逻辑链路控制(LLC)报头,它通常位于FDDI 报头的顶层。当根据协议标识过滤报文时,那么就假设所有的 FDDI 报文含有 LLC 报头,而且 LLC 报头用的是 SNAP 格式。

    decnet src host
        如果 DECNET 的源地址是 host,则逻辑为真,该主机地址的形式可能是’’10.123’’,或者是 DECNET 主机名。只有配置成运行 DECNET 的 Ultrix 系统支持 DECNET 主机名。

    decnet dst host
        如果 DECNET 的目的地址是 host,则逻辑为真。

    decnet host host
        如果 DECNET 的源地址或目的地址是 host,则逻辑为真。

        ip, arp, rarp, decnet是 ether proto p 的简写形式,其中 p 为上述协议的一种。
        tcp, udp, icmp是 ip proto p 的简写形式,其中 p 为上述协议的一种。

    expr relop expr
        如果这个关系成立,则逻辑为真,其中 relop 是 >, <, >=, <=, =, != 之一, expr 是数学表达式,由常整数(标准 C 语法形式),普通的二进制数运算符[+, -, *, /, &, |],一个长度运算符,和指定的报文数据访问算符组成。要访问报文内的数据,使用下面的语法:

    proto [ expr : size ]
        proto 是 ether, fddi, ip, arp, rarp, tcp, udp, or icmp 之一,同时也指出了下标操作的协议层。
        expr 给出字节单位的偏移量,该偏移量相对于指定的协议层。Size 是可选项,指出感兴趣的字节数;它可以是 1, 2, 4, 默认为 1 字节。由关键字 len 给出的长度运算符指明报文的长度。

        字节数;它可以是 1, 2, 4, 默认为 1 字节。由关键字 len 给出的长度运算符指明报文的长度。
            例如,’ether[0] & 1 != 0’ 捕捉所有的多目传送报文。表达式’ip[0] & 0xf != 5’ 捕捉所有带可选域的 IP 报文。表达式 ’ip[6:2] & 0x1fff = 0’ 只捕捉未分片和片偏移为 0 的数据报。这种检查隐含在 tcp 和 udp 下标操作中。例如,tcp[0] 一定是 TCP 报头的第一个字节,而不是其中某个 IP 片的第一个字节。

原语可以用下述方法结合使用:
    圆括弧括起来的原语和操作符。取反操作 (’!’ or ’not’),联结操作 (’&&’ or ’and’) 或操作(’||’ or ’or’)。取反操作有最高优先级。或操作和联结操作有相同的优先级,运算时从左到右结合。注意联结操作需要显式的 and 算符,而不是并列放置。

    如果给出标识符,但没给关键字,那么暗指最近使用的关键字。例如,not host vs and ace
作为 not host vs and host ace 的简写形式,不应该和 not ( host vs or ace )混淆。表达式参数可以作为单个参数传给捕获程序,也可以作为复合参数,后者更方便一些。

引用自:

https://www.cnblogs.com/JohnABC/p/5914543.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BFP 过滤规则 的相关文章

  • AutoDL上传数据详细步骤(自己用的步骤,可能没有其他大佬用的那么高级)

    写在前面 先推荐一下另一篇关于使用AutoDL的教程 AutoDL使用教程 1 创建实例 2 配置环境 上传数据 3 PyCharm2021 3专业版下载安装与远程连接完整步骤 注意 在AutoDL的终端键入命令运行时 通常是一定要先cd进
  • 华为OD机试 - 密室逃生游戏(Java)

    题目描述 小强正在参加 密室逃生 游戏 当前关卡要求找到符合给定 密码K 升序的不重复小写字母组成 的箱子 并给出箱子编号 箱子编号为 1 N 每个箱子中都有一个 字符串s 字符串由大写字母 小写字母 数字 标点符号 空格组成 需要在这些字
  • 随手学习笔记

    1 正点原子zynq视频教程 真人版 P128 P132讲解ADDA 第30 1讲高速ADDA实验 ADC芯片简介 哔哩哔哩 bilibili 2 正点原子zynq视频教程 真人版 关于zynq FPGA讲解非常详细 可逐个详细学习 第1讲
  • 使用QZXing生成并解析二维码

    QZxing 是对 zxing 的一个封装 用于在 Qt 程序中加入条形码和二维码识别的功能 这里就讲讲如何编译和使用这个库 前几年 QZXing 的代码是放到 sourceforge net 上的 现在迁移到了 github com 所以
  • sql手工注入

    information schema 系统数据库 包含所有数据库相关信息 information schema schemata中schema name列 字段为所有数据库名称 information schema tables中table
  • 中山大学App校园地图功能分析

    中山大学App校园地图简单功能分析介绍 用户入口 进入中山大学App首页 即可看到校园地图 点击后进入校园地图主界面 校区选取 进入地图主界面后 即可呈现出校园地图 顶上正中间是选取校区的功能按钮 单击后出现全部4个校区可供选择 路线导航
  • 如何在手机上打开xmind文件_如何高效率整理电脑上的文件 ?

    个人电脑 01 没有时间整理 也不想整理 怎么办 1 1 只整理电脑桌面 电脑桌面放着各种文件 已经成为多数人的习惯 一打开电脑 就可以从电脑桌面上看见自己有哪些文件等着处理 当天处理的文件存放在桌面 第二天要用的时候 直接在桌面打开就可以
  • python遍历文件夹中的图片

    import cv2 import os mainFolder Images RectSmall myFolders os listdir mainFolder print myFolders for folder in myFolders
  • jre jdk更改目录后Java无法运行问题解决方案

    问题 在将Java文件 包含jdk jre 由C盘直接剪贴到D盘后 所有Java程序无法运行 且其Java图标不再显示 解决方案 首先更改环境变量 当我们单纯地将Java文件更改位置后 我们计算机的环境变量仍未改变 依旧是当时安装Java时
  • Verilog中if- else if语句和case语句用法:

    一 if语句 1 两种情况 if 条件语句 begin end else begin end 2 多种情况 if 条件语句 begin end else if 条件语句 begin end else if 条件语句 begin end el
  • 编程大师-Netty

    45 张图深度解析 Netty 架构与原理 里奥ii的博客 CSDN博客 netty全过程图解 最详细清晰版 netty流程 PANDA的博客 CSDN博客
  • Kafka学习(三)简单实例(可以简单做测试)

    java客户端连接kafka简单测试 本案例kafka版本是kafka 2 11 0 9 0 1 用java来实现kafka生产者 消费者的示例 在测试的过程中遇到的特别的问题以及解决办法 其他小问题就不一一列举了 1 使用kafka cl
  • libero-soc许可证申请和环境配置

    环境 64位机 在哪台电脑上安装libero soc 就用哪台电脑申请许可证 1 注册 https www microsemi co 在官网注册 之后申请的许可证会发到注册时填写的邮箱 2 申请许可证 https www microsemi
  • 操作系统 段页式存储管理

    一 引入 分页系统是以页面作为内存分配的基本单位 能有效地提高内存利用率 但信息共享等不方便 分段系统是以段作为内存分配的基本单位 它能够更好地满足用户多方面的需要 信息共享 动态链接等 但采用分区方式管理物理内存 仍然存在碎片问题 段页式
  • mysql varchar类型条件查询不加引号

    一张160w数据量的表 select from order promotion where order no 15441913435665186 select from order promotion where order no 1544
  • Gradle –多个启动脚本示例

    很少有build gradle示例向您展示如何创建多个启动脚本或可执行Java应用程序 1 单启动脚本 1 1在Gradle中 您可以使用应用程序插件来创建可执行的Java应用程序 build gradle apply plugin app
  • 蒙特卡洛积分、重要性采样、低差异序列

    渲染公式 渲染的目标在于计算周围环境的光线有多少从表面像素点反射到相机视口中 要计算总的反射光 每个入射方向的贡献 必须将他们在半球上相加 为入射光线 与法线 的夹角 为方便计算可以使用法线向量和入射向量 单位化 的乘积表示 对于基于图像的
  • 全国各省市座机电话区号整理

    excel数据整理下载地址 https download csdn net download MtiredM 87620876 json格式数据整理 const areaCodes 热门城市 010 北京市 024 沈阳市 0371 郑州市
  • Qt对话框

    Qt的对话框分为两种 模态对话框和非模态对话框 模态对话框 模态对话框 不可以对其其他窗口进行操作 比如像下面这种 出现后无法再操作其他窗口 比如像下面这种 创建后就无法在操作写代码的窗口 创建对话框要将 include
  • 【Unity&C#&随机数】随机数

    一个简单的随机数获得 0或1 使用了这样的代码 想要获得0或者1 if Input anyKeyDown float i 1 if i 1 i Random Range 0 Rang i i lt 0 5 0 1 Debug Log Cou

随机推荐

  • C语言经典100例题(18)--题目:求s=a+aa+aaa+aaaa+aa...a的值

    目录 题目 问题分析 代码 测试结果 题目 求s a aa aaa aaaa aa a的值 其中a是一个数字 例如2 22 222 2222 22222 此时共有5个数相加 几个数相加有键盘控制 问题分析 加数之间的规律 a a 0 10
  • Python实现归并排序

    Python实现归并排序 一 归并排序简介 归并排序 Merge Sort 是建立在归并操作上的一种效率很高的排序算法 比较占用内存 该算法是分治法 Divide and Conquer 的一个典型应用 归并排序将两个或两个以上 一般是两个
  • 华为OD机试 Python 【响应报文时间】

    题目 假设你正在接收网络报文 并且需要在一定时间内对它们作出响应 每次当你收到一个报文时 它会有一个 最大响应时间 来告诉你最晚需要在什么时候回应 但是 如果在等待回应期间又收到了新的报文 你可能需要更新你的响应时间 最大响应时间 是这样计
  • 关于uthash 的初步源码阅读

    背景 在偶然的mqtt mosquitto 中的源码中查看的关于topic的处理 知道了哈希表这种的数据结构 最近花了一点时间将这个部分的源码看了一部分 不知道后面还有没有时间继续查看所以就写一篇文档作为笔记吧 uthash 使用 utha
  • 数据ETL面临的问题----数据缺失

    数据缺失的类型有 完全随机缺失 Missing Completely at Random MCAR 数据的缺失与不完全变量以及完全变量都是无关的 随机缺失 Missing at Random MAR 数据的缺失不是完全随机的 数据的缺失只依
  • C++【认知系列】实时获取鼠标坐标

    实时获取鼠标的坐标值 include
  • 配置描述文件mobileconfig的生成及注意事项

    1 mobileconfig描述配置文件的下载 我们要控制ios上的移动设备 那么我们就需要下载mobileconfig描述配置文件 一般我们可以一个设备对应一个设备ID 即我们后面会看到的请求参数 deviceId 例如 PUT Path
  • DHorse v1.3.2 发布,基于 k8s 的发布平台

    版本说明 新增特性 构建版本 部署应用时的线程池可配置化 优化特性 构建版本跳过单元测试 解决问题 解决Vue应用详情页面报错的问题 解决Linux环境下脚本运行失败的问题 解决下载Maven安装文件失败的问题 升级说明 下载v1 3 2安
  • WSL无法访问网络的解决办法

    今天在用WSL的时候突然网络抽风 域名解析出了问题 apt update都用不了 网上查了很多方法 什么vEthernet的IP啊 ifconfigip啊 ip route add default啥的 都不管用 最后还是看了一下 etc r
  • 论文总结——因果发现与推断

    文章目录 背景 非时序因果模型 因果充分性假设 两个变量之间的因果关系 基于约束的方法 结构方程模型 Structural Equation Model SEM 时序因果模型 待解决的问题 参考 背景 很多科学都需要通过观测一组变量或者对其
  • Idea部署OpenCV3.4.14开发环境

    Idea配置OpenCV开发环境 一 开发环境 idea 2018 3 3 opencv 3 4 14 jdk 1 8 0 191 二 下载OpenCV3 4 14 下载地址 https opencv org releases 三 把下载的
  • 解决Keil调试模式下无法设置断点的问题

    问题描述 使用Keil打开工程文件 进入调试模式后 只有main c文件里面可以设置断点 其余文件都不可以设置断点 可能的原因及解决方案 原因1 工程路径包含中文 解决方案1 更换为全英文路径 原因2 工程没有全部Rebuild 解决方案2
  • 单目摄像头光学图像测距_单目测距算法

    单目测距算法 相似三角形 用相似三角形计算物体或者目标到相机的距离 将使用相似三角形来计算相机到一个已知的物体或者目标的距离 假设有一个宽度为 W 的目标或者物体 然后将这个目标放在距离的相机为 D 的位置 用相机对物体进行拍照并且测量物体
  • 报错:No Session found for current thread

    No Session found for current thread 没有找到当前线程的会话 这个问题我是在整合Spring时出现的 问题很好解决 在Hibernate的配置文件hibernate cfg xml中加入这 样一条配置就好
  • “反AI斗士”马斯克宣布成立xAI :目标是了解宇宙真实本质

    北京时间7月13日凌晨 马斯克在Twitter上宣布 xAI正式成立 去了解现实 马斯克表示 推出xAI的原因是想要 了解宇宙的真实本质 Ghat GPT横空出世已有半年 国内外 百模大战 愈演愈烈 AI大模型的现状与发展 你怎么看 方向一
  • 剑指Offer(牛客网)-数据流中的中位数

    题目来源 https www nowcoder com practice 9be0172896bd43948f8a32fb954e1be1 tpId 13 tqId 11216 tPage 4 rp 4 ru ta coding inter
  • 内网DNS域名解析 dnsmasq搭建

    此片文章为DNS内网解析部署文档 简单实用 解决企业内部web服务IP地址访问问题 企业内部如果不启用域名DNS服务 服务器就只能通过IP进行访问了 除了传统的bind解决方案 推荐一个新的DNS解决方案 dnsmasq dnsmasq 用
  • springboot邮件发送 端口587/465不同配置

    Spring Boot教程 26 如何发送邮件 知乎 大体上来说 发送的方式有两种 一种是使用SMTP协议 连上SMTP服务器发送邮件 一种是使用第三方的邮件发送服务 调调API就行 我们先来说说前者 SMTP是 简单邮件传输协议 的简称
  • 杰里之ENC降噪】【篇】

    对于TWS耳机 比起ANC功能 通话降噪才是真正的刚需 主动降噪 ANC 通话降噪 ENC ENC Environment Noise Cancellation 环境噪音消除 的实现方法多种多样 ENC与ANC ANC Active noi
  • BFP 过滤规则

    设置过滤规则就是让网络设备只是捕获我们感兴趣的网络数据包 如果没有设置过滤规则 即上面的 filter app 是空字符串 那么网络设备就捕获所有类型的数据包 否则只是捕获过滤规则设置的数据包 此时过滤规则的逻辑值为真 此过滤规则是通用的