1. 正则表达所需语法

\ 正则表达式使用反斜杠字符 ('') 来表示特殊形式或是允许在使用特殊字符时不引发它们的特殊含义。 转义特殊字符(允许你匹配 '*', '?', 或者此类其他)

\A 只匹配字符串开始。

[] 用于表示一个字符集合。在一个集合中除了^、-以外,如果把其它任何特殊符号放到[]里,那么就自动去掉特殊意义,只表示符号本身的含义,如.在[]里只表示.点号的意思,没有了通配符的功能。可以表示字符范围,通过用 '-' 将两个字符连起来。比如 [a-z] 将匹配任何小写ASCII字符, [0-5][0-9] 将匹配从 00 到 59 的两位数字, [0-9A-Fa-f] 将匹配任何十六进制数位。 如果 - 进行了转义 (比如 [a-z])或者它的位置在首位或者末尾(如 [-a] 或 [a-]),它就只表示普通字符 '-'。

\Z 只匹配字符串尾

\w 对于 Unicode (str) 样式:匹配Unicode词语的字符,包含了可以构成词语的绝大部分字符,也包括数字和下划线。如果设置了 ASCII 标志,就只匹配 [a-zA-Z0-9_] 。对于8位(bytes)样式:匹配ASCII字符中的数字和字母和下划线,就是 [a-zA-Z0-9_] 。如果设置了 LOCALE 标记,就匹配当前语言区域的数字和字母和下划线。

  • 对它前面的正则式匹配0到任意次重复, 尽量多的匹配字符串。 ab* 会匹配 'a', 'ab', 或者 'a'后面跟随任意个 'b'。

/d 匹配任何十进制数,就是 [0-9]

^ (插入符号) 匹配字符串的开头, 并且在 MULTILINE 模式也匹配换行后的首个符号。

如果是其他的一些 正则表达式可参考https://xie.infoq.cn/article/19c87fc0786f32fa8266ece39还有官方文档:https://docs.python.org/zh-cn/3/library/re.html

re函数库

re.sub(pattern, repl, string, count)

第一个参数为正则表达式需要被替换的参数,第二个参数是替换后的字符串,第三个参数为输入的字符串,第四个参数指替换个数。默认为0,表示每个匹配项都替换。

checks = [path.rstrip('/')]

返回删除 string 字符串末尾的指定字符后生成的新字符串。

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。

该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

urlencode的参数是词典,它可以将key-value这样的键值对转换成我们想要的格式。当urlencode之后的字符串传递过来之后,接受完毕就要解码了,urllib提供了unquote()这个函数将流量中的:status=False&msg=%E8%AF%B7%E5%85%88%E7%99%BB%E9%99%86%E5%AE%9D%E5%A1%94%E5%AE%98%E7%BD%91%E7%94%A8%E6%88%B7解码为:status=False&msg=请先登陆宝塔官网用户

rfind('/') 返回字符串最后一次出现的位置

any() 函数用于判断给定的可迭代参数 iterable 是否全部为 False,则返回 False,如果有一个为 True,则返回 True。

re.I 进行忽略大小写匹配;表达式如 [A-Z] 也会匹配小写字符。Unicode匹配(比如 Ü 匹配 ü)同样有用,除非设置了 re.ASCII 标记来禁用非ASCII匹配。当前语言区域不会改变这个标记,除非设置了 re.LOCALE 标记。这个相当于内联标记 (?i) 。

2. maltrail语法匹配

1 VALID_DNS_NAME_REGEX = r"\A[a-zA-Z0-9.-]*.[a-zA-Z0-9-]+\Z"

只匹配字符串开始,在这些 a-z A-Z 0-9 中任意选取一个 选取其中任意1个字符串,

2 WHITELIST_UA_REGEX = r"AntiVir-NGUpd|TMSPS|AVGSETUP|SDDS|Sophos|Symantec|internal dummy connection|Microsoft-CryptoAPI"

匹配AntiVir-NGUpd、TMSPS、AVGSETUP、SDDS、Sophos、Symantec、internal dummy connection、Microsoft-CryptoAPI这些字串的任意一个

3 SUSPICIOUS_DIRECT_IP_URL_REGEX = r"/[\w.]*\b(arm|m68k|mips|mpsl|powerpc|ppc|x86|x32|x64|i586|i686|sparc|sh\b|yarn|zte)"

第一个字符.任意一个字符出现无数多次 ;选取arm、m68k、mips、mpsl、powerpc、ppc、x86、x32、x64、i586、i686、sparc、sh(\b这边是一个空格)、yarn、zte任意一种型号

4 re.search(r"\A\d+.[0-9.]+\Z", host or "")

匹配IP地址

5 trail = re.sub(r"(http://[^/]+/)(.+)", r"\g<1>(\g<2>)", path)

http:// [^/]+/只匹bai配到http://www.baidu.com/ 后面的.+ 任意 ;前面的分为两个括号 ,给第二个括号加上表达式加上阔号 ,最后的结论是 http://www.baidu.com/(1234/test.txt/)

附:maltrail配置文件

这里是config里面的内容,在read_config这个函数中生成

{

'HTTPADDRESS': '0.0.0.0', 

'HTTPPORT': 8338,

 'USESSL': False, 

'USERS': ['admin:9ab3cd9d67bf49d01f6a2e33d0bd9bc804ddbe6ce1ff5d219c42624851db5dbc:0:                        # changeme!'], 

'ENABLEMASK_CUSTOM': True, 

'USE_SERVERUPDATETRAILS': False, 

'PROCESSCOUNT': 1, 

'DISABLECPU_AFFINITY': False,

'USE_FEEDUPDATES': False, '

DISABLEDFEEDS': 'turris, ciarmy, policeman, myip, alienvault', '

IPMINIMUMFEEDS': 3, 

'UPDATEPERIOD': 86400, 

'CUSTOMTRAILSDIR': '/root/maltrail-master/trails/custom', '

CAPTUREBUFFER': 192730720, 

'MONITORINTERFACE': 'any', 

'CAPTUREFILTER': 'udp or icmp or (tcp and (tcp[tcpflags] == tcp-syn or port 80 or port 1080 or port 3128 or port 8000 or port 8080 or port 8118))', 

'SENSORNAME': 'iZ2zea82zco7i0nr4vpmmvZ', 

'LOGSERVER': '129.211.138.204:8337', 

'DISABLELOCALLOG_STORAGE': False, 

'USE_HEURISTICS': True,

 'CHECKMISSINGHOST': False, 

'CHECKHOSTDOMAINS': False, 

'SHOWDEBUG': False, 

'LOGDIR': '/var/log/maltrail', 

'TRAILSFILE': '/root/.maltrail/trails.csv', 

'configfile': '/root/maltrail-master/maltrail.conf'

}

打印的packet如下

传入的包 打印出来如下:

b'\x00\x04\x00\x01\x00\x06\x00\x16>\x10\x1d>SW\x08\x00E\x00\x00\xbf\xb3\x1a@\x00@\x06\x03\xac\xac\x18\x0e.ddd\xc8\xed\xea\x00P\x04FF\xfa\x97\xc3\x8a\xedP\x18\x00\xe5\x84$\x00\x00GET /latest/meta-data/region-id HTTP/1.1\r\nHost: 100.100.100.200\r\nAccept: /\r\nContent-Type: application/json; charset=utf-8\r\nAgent: linux/1.0.2.580\r\n\r\n'

前面的maltrail的对于DPI的解析就是对这个包的解析。

b'\x00\x04\x00\x01\x00\x06\x00\x16>\x10\x1d>\x00\x00\x08\x00E\x00\x01r=+@\x00@\x06\xde\xf0\xac\x18\x0e.g\xe0\xfbC\xb3\xf0\x00P\xf8\x07\xe1\xb8L\x99d\xcb\x80\x18\x00\xe5\x1e\xcf\x00\x00\x01\x01\x08\n8J\xdc\xdd\xf41\xb1\xf1POST /api/panel/get_soft_list_test HTTP/1.1\r\nAccept-Encoding: identity\r\nContent-Length: 107\r\nHost: www.bt.cn\r\nContent-Type: application/x-www-form-urlencoded\r\nConnection: close\r\nUser-Agent: Python-urllib/2.7\r\n\r\nstatus=False&msg=%E8%AF%B7%E5%85%88%E7%99%BB%E9%99%86%E5%AE%9D%E5%A1%94%E5%AE%98%E7%BD%91%E7%94%A8%E6%88%B7'

对于maltrail主函数的逻辑处理如下:

在DPI中的TCP部分解析过程:



UDP解析部分:

正则表达式——maltrail工程项目中使用的更多相关文章

  1. 正则表达式在iOS中的运用

    1.什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式.正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分.它可以迅速地用极简单的方式 ...

  2. 正则表达式(/[^0-9]/g,'')中的"/g"是什么意思?

    解答“正则表达式(/[^0-9]/g,'')中的"/g"是什么意思?”这个问题,也为了能够便于大家对正则表达式有一个更为综合和深刻的认识,我将一些关键点和容易犯糊涂的地方再系统总结 ...

  3. 正则表达式(/[^0-9]/g,'')中的"/g"是什么意思 ?

    正则表达式(/[^0-9]/g,'')中的"/g"是什么意思 ?     表达式加上参数g之后,表明可以进行全局匹配,注意这里“可以”的含义.我们详细叙述: 1)对于表达式对象的e ...

  4. JS正则表达式获取字符串中特定字符

    JS正则表达式获取字符串中得特定字符,通过replace的回调函数获取. 实现的效果:在字符串中abcdefgname='test'sddfhskshjsfsjdfps中获取name的值test  实 ...

  5. C#用正则表达式去掉Html中的script脚本和html标签

    原文 C#用正则表达式去掉Html中的script脚本和html标签 /// <summary>         /// 用正则表达式去掉Html中的script脚本和html标签     ...

  6. java正则表达式提取地址中的ip和端口号

    由于我需要用到java正则表达式提取地址中的ip和端口号,所以我就写了一个demo,测试一下,下面是demo public class Test0810_1 { public static void ...

  7. 使用Dreamweaver正则表达式替换href中的内容

    在Dreamweaver中使用正则表达式替换href中的内容,就像下面这些href中的内容复杂多样的情况下,href="/html/u.html",href="/tuho ...

  8. 正则表达式在Java中的使用

    目录 介绍 从简单例子认识正则表达式匹配 Java中对正则表达式的支持(各种语言有相应的实现) 初步认识 . + * ? 范围 认识\s \w \d - 下面介绍数字和字母的正则表达, 这是编程中使用 ...

  9. 正则表达式与Python中re模块的使用

    正则表达式与Python中re模块的使用 最近做了点爬虫,正则表达式使用的非常多,用Python做的话会用到re模块. 本文总结一下正则表达式与re模块的基础与使用. 另外,给大家介绍一个在线测试正则 ...

随机推荐

  1. 使用浏览器抓取QQ音乐接口(排行榜篇)

    前言 最近手头比较空闲,再加上看到其他人的博客都差不多有个类似的播放控件,手就会闲不下来,说干就干,所以我们开始吧! 来到QQ音乐的官网,我们就直奔着目标去,寻找排行榜 我们主要用的是最近比较热的歌, ...

  2. 封装是java面向对象编程三大特征之一。 简单的属性封装

    package com.cqvie.Hello; class Person { private int age; private String name; public void tell() {   ...

  3. jsp 记录1 bs/cs

    1.jsp = html + js + css + jsp语法 + Java片段: 2.jsp是基于Java语言的,具有跨平台性: 3.jsp编译后的class文件会常驻内存中,运行速度快,对服务器的 ...

  4. LeetCode 45跳跃游戏&46全排列

    原创公众号:bigsai,回复进群加入力扣打卡群. 昨日打卡:LeetCode 42字符串相乘&43通配符匹配 跳跃游戏 题目描述: 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中 ...

  5. vue table切换 (不使用路由功能)

    背景: 一个小场景,感觉使用路由功能太浪费了,考虑用一个简单的类控制 实例代码 //v-for 实现循环<ul class="nav-bar"> <li v-fo ...

  6. MONGODB02 - MongoSocketWriteException 异常会迟到,但从不缺席

    接上一个<MONGODB01 - Prematurely reached end of stream 错误定位及修复>处理完成之后,又报错了,场景也是一段时间不访问MongoDB,突然访问 ...

  7. Linux下的django项目02

    3.创建user模型 3.1 创建用户模型user 第一步 django-admin startproject syl 第二 在syl下创建apps文件包并标记根源 cd 到apps下并进行以下步骤 ...

  8. day81:luffy:课程分类页面&课程信息页面&指定分类显示课程信息&分页显示课程信息

    目录 1.构建课程前端初始页面 2.course后端的准备工作 3.后端实现课程分类列表接口 4.前端发送请求-获取课程分类信息 5.后端实现课程列表信息的接口 6.前端显示列表课程信息 7.按照指定 ...

  9. 【漏洞复现】Shiro<=1.2.4反序列化漏洞

    0x01 概述 Shiro简介 Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理.使用Shiro的易于理解的API,您可以快速.轻松地获得任何应用程序,从 ...

  10. Java泛型主题讨论

    说明:在学习泛型这一知识点中,主要参考自<疯狂Java讲义>第7章P307-P330的泛型内容,因为是跳着阅读,所以前面的一些名词不是特别清楚,这里也做出适当备注,供自己识记与理解. 1. ...