2010-10-01 75 views
15

我想制作一个与http://www.md5crack.com/crackmd5.php进行通信的程序。我的目标是发送一个网站哈希(MD5),并希望该网站将能够破解它。之后,我想显示哈希的明文。我的问题是将数据发送到网站。我查阅了有关使用LWP的文章,但是我仍然迷失。现在,哈希不会发送,其他一些垃圾数据也是。我将如何去发送一个特定的数据字符串到网站?如何使用LWP发送POST数据?

use HTTP::Request::Common qw(POST); 
use LWP::UserAgent; 


$ua = LWP::UserAgent->new(); 
my $req = POST 'http://www.md5crack.com/crackmd5.php', [ 
maxlength=> '2048', 
name=> 'term', 
size=>'55', 
title=>'md5 hash to crack', 
value=> '098f6bcd4621d373cade4e832627b4f6', 
name=>'crackbtn', 
type=>'submit', 
value=>'Crack that hash baby!', 

]; 
$content = $ua->request($req)->as_string; 

print "Content-type: text/html\n\n"; 
print $content; 

回答

27

由于你正在做的HTML指定窗口小部件,并与实际发送的数据混为一谈它张贴错误的数据。修正后的数据将只发送部件名称和值:

term: 098f6bcd4621d373cade4e832627b4f6 

相反,这是获得当前发布的数据是:

maxlength: 2048 
name:  term 
size:  55 
title:  md5 hash to crack 
value:  098f6bcd4621d373cade4e832627b4f6 
name:  crackbtn 
type:  submit 
value:  Crack that hash baby! 

修正程序:

use strict; 
use warnings; 

use LWP::UserAgent; 
use HTTP::Request::Common qw{ POST }; 
use CGI; 

my $md5 = '098f6bcd4621d373cade4e832627b4f6'; 
my $url = 'http://www.md5crack.com/crackmd5.php'; 

my $ua  = LWP::UserAgent->new(); 
my $request = POST($url, [ 'term' => $md5 ]); 
my $content = $ua->request($request)->as_string(); 

my $cgi = CGI->new(); 
print $cgi->header(), $content; 

您也可以使用LWP::UserAgent的post()方法:

use strict; 
use warnings; 

use LWP::UserAgent; 
use CGI; 

my $md5 = '098f6bcd4621d373cade4e832627b4f6'; 
my $url = 'http://www.md5crack.com/crackmd5.php'; 

my $ua  = LWP::UserAgent->new(); 
my $response = $ua->post($url, { 'term' => $md5 }); 
my $content = $response->decoded_content(); 

my $cgi = CGI->new(); 
print $cgi->header(), $content; 

永远记得use strictuse warnings。这被认为是良好的做法,并会节省您的时间。

6

它曾经是饼干会通过阅读这种东西。在HTTP :: Request :: Common中有一些例子,LWP :: UserAgent告诉你检查发送POST数据。您只需发送表单数据,而不是随附的元数据。

您可能更容易使用WWW::Mechanize,因为它具有更加以人为中心的界面。

相关问题