我创建了一个Perl脚本,它将使用在线网站在用户输入散列后破解MD5散列。我是部分成功的,因为我能够从网站得到响应,虽然我需要解析HTML和显示散列,并以明文向用户相应的密码。下面是我现在得到的输出片段:
<strong>21232f297a57a5a743894a0e4a801fc3</strong>: admin</p>
使用regex buddy,我能够使用下面的表达式**[a-z 0 -9]{32}**来单独匹配哈希部分。我需要以下格式的最终输出:
21232f297a57a5a743894a0e4a801fc3: admin
任何帮助将不胜感激。谢谢你!
5条答案
按热度按时间t9aqgxwy1#
我认为使用HTML::Parser来简单/可靠地解析HTML会更好。否则,您将陷入用regexp解析HTML的噩梦,并且您会发现它并不可靠。
mwyxok5s2#
在CPAN上有一些工具可以为您处理获取和解析页面。其中一个是Web::Scraper。告诉它要获取哪个页面以及需要哪些节点(使用xpath或CSS语法),它将为您获取这些节点。我不会给予一个例子,因为我不知道你的网址。
有一个很好的blogpost about this on blogs.perl.org by stas,它使用了一个不同的模块,这可能也很有帮助。
vptzau2j3#
十年后,我们有了更复杂、更简单的解决方案。
如果您可以编写CSS selector,就可以轻松地提取响应的各个部分,而无需处理
HTML::Parser
和其他方法的复杂性。Mojo::UserAgent为您提供了一切:at
只查找与选择器匹配的第一个节点。如果有多个节点,则使用find
。您可以将匹配作为一个“集合”获取,并在map
中以相同的方式转换它们:特定的选择器
div p strong
取决于返回的HTML,如果有id
或class
值,则更容易确定元素。我在Mojo Web Useragents中广泛地讨论了这些。oxiaedzo4#
这就是:
nxowjjhe5#
因此,在Perl中可靠地做到这一点是可能的,因为Perl的正则表达式有一种扩展格式,其复杂性足以解析HMTL(实际上,你可以将Perl代码嵌入到正则表达式中,而在Perl代码中,更重要的是,你可以使用递归正则表达式来解析HTML)。但是,你真的不想这样做。如果你决定这样做,请阅读advanced Perl regular expressions,这样你就知道你正在进入什么。
这里的实际问题是,可靠地解析HTML之类的东西是一个巨大的过程,使用朴素的正则表达式实现来完成这一任务非常诱人。因为regex是一种常规语言(在Perl之外),因此不能解析常规语言以外的任何语言。Perl是不同的,添加了递归正则表达式等东西使这成为可能,但非常困难,容易出错,而且很复杂。此外,实际上,您可能只能支持HTML的一种变体。
HTML::Parser在一个C,XS模块中完成主要的工作,该模块可以利用已有的C库。这意味着,重要的是不要为自己维护一个巨大的噩梦般的代码库。