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. 1. Deep Q-Learning

    传统的强化学习算法具有很强的决策能力,但难以用于高维空间任务中,需要结合深度学习的高感知能力,因此延展出深度强化学习,最经典的就是DQN(Deep Q-Learning). DQN 2013 DQN的 ...

  2. Vue.js 学习笔记之六:构建更复杂的组件

    在掌握了如何构建与编译 Vue 组件的基础知识之后,接下来就可以试着来构建一些更具有实际用处的复杂组件了.为了赋予组件更具实用性的后面,首先要做的就是让这些组件具备监听用户自定义事件的能力,并且允许用 ...

  3. error:docker-ce conflicts with 2:docker-1.13.1-74.git6e3bb8e.el7.centos.x86_64

    问题原因:安装docker之前有安装cockpit-docker服务 解决方法:卸载docker-ce [root@localhost ~]# yum list installed | grep do ...

  4. vue自定义指令长按事件

    Vue.directive('longpress', {     bind: function (el, binding, vNode) {         // Make sure expressi ...

  5. 白话科普,10s 了解 API

    作为一名又拍云的技术支持工程师,小拍每天都会接收到很多客户的提问.这其中,有很多客户会问:"小拍,请问云存储上传除了使用控制台的文件管理和 FTP 工具之外,有没有其他的途径进行上传呢?&q ...

  6. Ordering Cows

    题意描述 好像找不到链接(找到了请联系作者谢谢),所以题目描述会十分详细: Problem 1: Ordering Cows [Bruce Merry, South African Computer ...

  7. 聊聊Go代码覆盖率技术与最佳实践

    "聊点干货" 覆盖率技术基础 截止到Go1.15.2以前,关于覆盖率技术底层实现,以下知识点您应该知道: go语言采用的是插桩源码的形式,而不是待二进制执行时再去设置breakpo ...

  8. leetcode两数之和go语言

    两数之和(Go语言) 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复 ...

  9. leetcode64:maximal-rectangle

    题目描述 给出一个只包含0和1的二维矩阵,找出最大的全部元素都是1的长方形区域,返回该区域的面积. Given a 2D binary matrix filled with 0's and 1's, ...

  10. Pytest学习(六) - conftest.py结合接口自动化的举例使用

    一.conftest.py作用 可以理解成存放fixture的配置文件 二.conftest.py配置fixture注意事项 pytest会默认读取conftest.py里面的所有fixture co ...