不确定这是否可行但我一直在寻找使用Regex来获取Hex的电子邮件地址。基本上这是建立我的一些自动取证工具,但我在制作合适的Regex算法时遇到了问题。
电子邮件的正则表达式:/^([a-z0-9_.-]+)@([\da-z.-]+).([az.]{2,6})$/
十六进制值:
@ = 40
. = 2E
.com = 636f6d
_ = 5f
A/a = 41/61 [1]
Z/z = 5a/7a
- = 2d
这就是我现在所拥有的(它只考虑小写和.com)。但它不起作用!我搞砸了一些简单的东西吗?
"/^([61-7a]+)40([61-7a]+)23(636f6d)$/"
[1]我知道电子邮件只能是小写,但我也需要考虑大写。
答案 0 :(得分:1)
我认为你正在接近这个问题。假设您使用的是标准的十六进制字符等效项,则应首先将电子邮件转换为十六进制,然后使用电子邮件正则表达式。这可以通过简单地一次处理两个字符的电子邮件,并在每个字符上使用chr(int('piece, 16))
来完成。
答案 1 :(得分:1)
@ = 40
. = 2E
com = 636f6d
_ = 5f
a-z = (4[1-9a-f]|5[0-9a])
A-Z = (6[1-9a-f]|7[0-9a])
- = 2d
/^([a-z0-9_.-]+)@([\da-z.-]+).([a-z.]{2,6})$/
/^(((4[1-9a-f]|5[0-9a])|(6[1-9a-f]|7[0-9a])|[0-9]|5f|2E|2d)+)40(([0-9]|(4[1-9a-f]|5[0-9a])|(6[1-9a-f]|7[0-9a])|2E|2d)+)2E(((4[1-9a-f]|5[0-9a])|(6[1-9a-f]|7[0-9a])){2,6})$/
/^
(
(
(4[1-9a-f]|5[0-9a]) // a-z
|(6[1-9a-f]|7[0-9a]) // A-Z
|[0-9] // 0-9
|5f // _
|2E // .
|2d // -
)+ // 1 or more times
)
40
(
(
[0-9] // 0-9
|(4[1-9a-f]|5[0-9a]) // a-z
|(6[1-9a-f]|7[0-9a]) // A-Z
|2E // .
|2d // -
)+ // 1 or more times
)
2E // .
(
(
(4[1-9a-f]|5[0-9a]) // a-z
|(6[1-9a-f]|7[0-9a]) // A-Z
){2,6} // between 2 and 6 times
)$/
答案 2 :(得分:0)
我认为您需要查看Python中正则表达式的文档(http://docs.python.org/2/library/re.html)。
例如,[61-7a]将匹配6,1-7或a中的任何一个。
答案 3 :(得分:0)
稍微远离您想要实现的目标,但请查看Bulk Extractor,它会解析驱动器并删除电子邮件地址并按流行顺序列出它们。
答案 4 :(得分:0)
我无法在任何地方发表评论,因为我已经回答了这些问题,但我认为这需要说明。
您正在采取的方法实际上比将每个字符转换为ASCII等效字符更糟糕。您实际上是将每个字节转换为 2个ASCII字符。
仅引用您作为最终/工作模式发布的REGEX模式的一部分:4[0-9a-fA-F]
您正在尝试查找字符@ABCDEFGHIJKLMNO
。您有a-f
和 A-F
,因为您正在尝试考虑以大写或小写形式存储的十六进制代码。硬盘驱动器上的十六进制代码不会以大写或小写形式存储(它甚至不会以十六进制代码存储)。您正在考虑向您提供此数据的任何工具 - 以ASCII格式。
您使用什么工具来访问此数据?
如果您使用python读取dd图像文件,则需要使用原始数据之后的正则表达式。这就像复制上面那样[\x40-\x4f]
。这都是不必要的,因为[@-O]
会完成同样的事情。
我不确定您是如何对此进行测试的,但我怀疑您将十六进制代码粘贴到在线REGEX测试引擎中。然后,测试引擎将这些十六进制代码解释为两个单独的字符,而不是一个字节中的一对半字节。