【Java小功能】wireshark正则表达式语法转换

news2024/10/19 13:26:55

文章目录

    • @[TOC](文章目录) Java 将 wireshark 语法转换为sql 语法
  • 前言
  • 一、wireshark 是什么?
  • 二、代码转换
    • 正则解析表达式

Java 将 wireshark 语法转换为sql 语法

前言

需求:需要将 wireshark 语法转换为 clickhouse查询语句,一个wireshark 查询条件可能涉及到多表问题。


一、wireshark 是什么?

Wireshark的过滤语法有两种:BPF(Berkeley Packet Filter)语法和Wireshark语法。

Wireshark语法
基本格式:字段 运算符 值
字段:表示数据包的字段,可以是协议名、字段名或别名。
运算符:表示比较运算符,可以是==(等于)、!=(不等于)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于)、contains(包含)、matches(匹配)等。
值:表示字段的值,可以是数字、字符串、布尔值等。
示例:
ip.addr == 192.168.1.1:过滤所有IP地址等于192.168.1.1的数据包,无论是源地址还是目的地址。
tcp.port == 80:过滤所有TCP端口等于80的数据包,无论是源端口还是目的端口。
udp.srcport == 53 and dns.flags.response == 0:过滤所有源端口为53,且DNS标志位为请求的UDP数据包。
http.request.method == “GET”:过滤所有HTTP请求方法为GET的数据包。
ssl.handshake.type == 1:过滤所有SSL握手类型为Client Hello的数据包。
ip.addr matches “10.0.\d+.\d+”:过滤所有IP地址符合正则表达式10.0.\d+.\d+的数据包。

二、代码转换

正则解析表达式

代码如下(示例):

private String parseWiresharkSql(){
		String sql = "select * from flow_log as flow ";
		String whereStr = " where 1=1 and ";
		String filterStr = "src_ip == 192.168.0.5 && dst_port != 443 && dst_ip == 192.168.0.0 && app_proto == \"http\" && (http.url==\"xxx.ss\" || app_proto == \"dns\") ";
		String orderStr = " order by xxx asc ";
        //字段与表的对应关系
        Map<String,String> tableMap = new HashMap<>();
        tableMap.put("http","http_log");
        tableMap.put("ssh","ssh_log");
        tableMap.put("ssl","ssl_log");
        //基础逻辑字符串转换
        filterStr = filterStr.replaceAll("&&"," and ").replaceAll("\\|\\|"," or ").replaceAll("\"","'");
        filterStr += " and";
        //组合需要join的关联表
        String joinStr = "";
        String table_key = "";
        String field_key = "";
        String field_type = "";
        String value = "";
        //2.通过正则将过滤条件的每个字段都获取到
        StringBuffer filterBuffer = new StringBuffer();
        Pattern tablePatten = Pattern.compile("(.*?)\\s*(!=|==|>=|<=|>|<)\\s*(.*?)\\s*(and|or)\\s*");
        Matcher matcherTable = tablePatten.matcher(filterStr);
        while (matcherTable.find()){
            field_key = matcherTable.group(1);
            //1.group1中出现 协议表. 则 join 相关表。
            if (field_key.contains(".")){
                table_key = field_key.split("\\.")[0].replaceAll("\\(","");
                field_key = field_key.split("\\.")[1];
                joinStr += " join "+tableMap.get(table_key) + " as " +
                        table_key + " on flow.id = "+table_key+".id ";
                        //queryFiledType 方法是去数据库查字段的类型与value类型比较
                field_type = queryFiledType(field_key, table_key);
            }else {
                field_type = queryFiledType(field_key.replaceAll("\\(",""), "");
            }
            //2.根据group1核对group3的字段类型
            //string类型的数据转换为'',数值类的转换为数值
            value = matcherTable.group(3);
            if ("string".equals(field_type)){
                if (!value.startsWith("\'") || !value.endsWith("\'")){
                    value = "'"+value+"'";
                }
            }else if ("number".equals(field_type)){
                if (value.startsWith("\'") || value.endsWith("\'")){
                    value = value.replaceAll("'","");
                }
            }
            filterBuffer.append(matcherTable.group(1)+" "+matcherTable.group(2)+" "+value+" "+matcherTable.group(4)+" ");
        }
        if (filterBuffer.length()>4){
            filterBuffer.delete(filterBuffer.length()-4,filterBuffer.length());
        }
        sql+=joinStr+whereStr + " and "+filterBuffer +orderStr;
        return sql;
    }

总结:核心是使用正则原子化的取出,然后对字段和值进行处理。逻辑符号和()等顺序不变,从而进行转换。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2218506.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于MATLAB/octave的容积卡尔曼滤波(CKF)【带逐行注释】

介绍 CKF的三维滤波程序例程 产品概述 我们的 MATLAB 数据处理工具是专为科研人员、工程师和数据分析师设计的高效解决方案。该工具提供了一系列强大的功能&#xff0c;能够快速处理和分析大规模数据集&#xff0c;适用于各种科学和工程应用&#xff0c;包括信号处理、图像分…

Redis Search系列 - 第四讲 支持中文

目录 一、支持中文二、自定义中文词典2.1 Redis Search设置FRISOINI参数2.2 friso.ini文件相关配置1&#xff09;自定义friso UTF-8字典2&#xff09;修改friso.ini配置文件 三、实测中文分词效果 一、支持中文 Redis Stack 从版本 0.99.0 开始支持中文文档的添加和分词。中文…

什么是大数据分析:定义、优缺点、应用、机遇和风险

大数据分析的概念已经成为我们社会不可或缺的一部分。众多公司和机构已经开发了大数据应用程序&#xff0c;取得了不同程度的成功。社交媒体平台和传感器等技术正在以前所未有的速度生成数据&#xff0c;就像一条装配线。如今&#xff0c;几乎所有东西都是物联网的一部分&#…

C#教程笔记

C#开发的程序依附.NET平台 编译器->IL中间语言->CLR->机器指令 .NET CORE平台 跨平台 .cs后缀名 快捷键 CtrlKD格式化CtrlL或CtrlX删除一行CtrlY反撤销cwTab快速生成命令行输出Ctrl空格或CtrlJ获取提示///方法注释CtrlMO代码全部折叠CtrlML代码全部展开 上升沿0变1 安…

硬件产品经理的开店冒险之旅(下篇)

缘起&#xff1a;自己为何想要去寻找职业第二曲线 承接上篇的内容&#xff0c;一名工作13年的普通硬件产品经理将尝试探索第二职业曲线。根本原因不是出于什么高大上的人生追求或者什么职业理想主义&#xff0c;就是限于目前的整体就业形式到了40岁的IT从业人员基本不可能在岗…

Spring Boot技术栈在电影评论网站中的应用

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

【论文阅读】Bi-Mamba+: Bidirectional Mamba for Time Series Forecasting

文章目录 概要阅读背景知识引言创新之处 研究方法概述方法部分的核心模块多尺度打补丁&#xff08;Multi-Scale Patching&#xff09;Mamba&#xff1a;全局模式专家Local Window Transformer&#xff08;LWT&#xff09;&#xff1a;局部变化专家长短期路由器&#xff08;Long…

Aatrox-Bert-VITS2部署指南

一、模型介绍 【AI 剑魔 ①】在线语音合成&#xff08;Bert-Vits2&#xff09;&#xff0c;将输入文字转化成暗裔剑魔亚托克斯音色的音频输出。 作者&#xff1a;Xz 乔希 https://space.bilibili.com/5859321 声音归属&#xff1a;Riot Games《英雄联盟》暗裔剑魔亚托克斯 …

LLM:参数高效微调方法总结

可以分为基于适配器、基于提示的。 一、基于适配器的方法 其核心思想是在预训练模型的各层之间插入轻量级的额外模块——适配器&#xff0c;通过仅微调这些适配器模块以适应特定的下游任务&#xff0c;同时冻结原模型的大部分参数。 1.Lora系列 原始的Lora LoRA 表示通过低…

DFS算法经典题目: Leetcode 51.N皇后

DFS算法经典题目&#xff1a; Leetcode 51.N皇后 题目详情如下 这道题如果使用暴力解法的话&#xff0c;需要对N个皇后放在每个地方都进行枚举并判断是否可行&#xff0c;时间复杂度非常之高&#xff0c;肯定是过不了的&#xff0c;所以需要使用其他解法。 根据题目可以知道每…

RT-Thread之STM32使用定时器实现输入捕获

前言 基于RT-Thread的STM32开发&#xff0c;配置使用定时器实现输入捕获。 比如配置特定通道捕获上升沿&#xff0c;该通道对应的引脚有上升沿信号输入&#xff0c;则触发捕获中断。 一、新建工程 二、工程配置 1、打开CubeMX 进行工程配置 2、时钟使用外部高速晶振 3、配置…

链栈的基本算法

初始化一个链栈 &#xff0c;将元素e&#xff0c;f&#xff0c;g&#xff0c;h&#xff0c;i依次进栈&#xff0c;获取栈顶元素&#xff0c;将栈中元素依次出栈并输出 链栈的表示 既采用链式储存结构实现的栈 具体代码 #include <stdio.h> #include <stdlib.h>…

安装TDengine数据库3.3版本和TDengine数据库可视化管理工具

安装TDengine数据库3.3版本和TDengine数据库可视化管理工具 一、下载安装包二、解压安装包三、部署四、启动服务五、进入数据库六、创建数据库、表和往表中插入数据七、测试 TDengine 性能八、使用数据库九、查询数据十、TDengine数据库可视化界面 一、下载安装包 TDengine-cl…

RHCE——例行性工作

准备工作 [rootlocalhost ~]# cat /etc/yum.repos.d/aliyun.repo [ali-app] nameali-app baseurlhttps://mirrors.aliyun.com/centos-stream/9-stream/AppStream/x86_64/os/ gpgcheck0[ali-base] nameali-base baseurlhttps://mirrors.aliyun.com/centos-stream/9-stream/Base…

Qt - 地图相关 —— 1、加载百度在线地图(附源码)

效果图 开始加载地图 1、百度地图开发者网站中注册,获取密钥 2、进入开发文档中 将下图内容保存到本地文件中,文件名为"index.html"文件即可。接着将内容中的“您的密钥”改为刚刚创建应用出来的AK密钥即可。 然后双击打开若在浏览器中正常看到下图右侧地图则说明没…

现代物流管理:SpringBoot技术突破

3系统分析 3.1可行性分析 通过对本智能物流管理系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本智能物流管理系统采用SSM框架&#xff0c;JAVA作为开发语…

excel判断某一列(A列)中的数据是否在另一列(B列)中

如B列如果有7个元素&#xff0c;在A列右边的空白列中&#xff0c;输入如下公式&#xff1a; COUNTIF($B$1:$B$7,A1), 其中&#xff0c;$B$1:$B$7代表A列中的所有数据即绝对范围&#xff0c;A1代表B列中的一个单元格.

SpringBoot中大量数据导出方案:使用EasyExcel并行导出多个excel文件并压缩zip后下载

文章目录 前言一、控制器层代码二、服务层代码三、代码亮点分析 前言 SpringBoot的同步excel导出方式中&#xff0c;服务会阻塞直到Excel文件生成完毕&#xff0c;如果导出数据很多时&#xff0c;效率低体验差。有效的方案是将导出数据拆分后利用CompletableFuture&#xff0c;…

《计算机视觉》—— 换脸

效果如下&#xff1a; 完整代码&#xff1a; import cv2 import dlib import numpy as npJAW_POINTS list(range(0, 17)) RIGHT_BROW_POINTS list(range(17, 22)) LEFT_BROW_POINTS list(range(22, 27)) NOSE_POINTS list(range(27, 35)) RIGHT_EYE_POINTS list(range(36…

linux下使用VSCODE 调试python

文章目录 一、环境准备安装VS Code&#xff1a;安装Python&#xff1a; 二、环境测试创建Python文件&#xff1a;编写测试代码运行 Linux下使用VS Code调试Python 在Linux环境中进行Python开发时&#xff0c;一个高效、直观的调试工具是必不可少的。Visual Studio Code&#xf…