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. CSS动画菜鸡记录板

    Transition 过渡属性: (background 1s linear 0s) 缓动函数 linear,在 easings.net 可找到相应的功能 若想要多次不同执行,用逗号隔开 Animat ...

  2. 【应用服务 App Service】 App Service Rewrite 实例 - 反向代理转发功能

    问题描述 在使用Azure App Service(应用服务)时,有时候需要在不同的站点之间进行跳转,但是希望通过通过访问同一个域名的方式来实现反向代理.如果创建应用时候选择的是Window服务,这时 ...

  3. Spring入门-------------1

    Spring是一个开源框架,为简化企业级应用开发而生,使用Spring可以使简单的JavaBean 实现以前只有EJB才能实现的功能.Spring 是一个IOC和Aop容器框架. 特性: 轻量级:Sp ...

  4. Reading Face, Read Health论文阅读笔记

    摘要: 随着计算技术觉.人工智能和移动技术的发展,利用计算机读脸技术去识别每个人每天的健康是可行的.怎么去设计一个基于FRT(face reading technologies)的用于得到每天的保健实 ...

  5. Visual Studio 2017 创建Winfrom工程

    1.打开Visual Studio 2017,出现界面点击-创建新项目 2.选择-Window桌面,选择windows 窗体应用(.NET Framework) 3.完成窗体程序创建,可在左边工具栏里 ...

  6. Charles使用part2——代理设置

    一.charles代理原理: 如果本地开了代理:  二.设置代理 1.设置代理端口: proxy->proxy setting 打开代理设置界面,代理端口默认是 8888,可以使用默认也可以自己 ...

  7. Docker(5)- docker version 命令详解

    如果你还想从头学起 Docker,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1870863.html 作用 显示 Docker 版本信 ...

  8. CSP-S 2020全国开放赛前冲刺模拟训练题1 T4 二维码

    组合 首先可以考虑一个状态合法的条件,可以发现的是最后得到的矩阵一定是至少有一行或是有一列全$0$或$1$,如果把这一列或这一行删掉那么将剩下的子矩阵拼接起来又是一个子问题,同样的也是至少有一列或一行 ...

  9. Java如何正确比较浮点数

    看下面这段代码,将 d1 和 d2 两个浮点数进行比较,输出的结果会是什么? double d1 = .1 * 3; double d2 = .3; System.out.println(d1 == ...

  10. 【kata Daily 190905】What's a Perfect Power anyway?(完美幂)

    原题: A perfect power is a classification of positive integers: In mathematics, a perfect power is a p ...