2 ###APPNAME: netcat_autologin
4 ###APPDATE: 2009-01-06 17:32:15
6 ###APPDESC: netcat a http url with autologin support
8 ###APPEXAMPLE: netcat_autologin www.google.com
11 #ENV variable MUST be defined somewhere,
12 #FOR perl to search modules from,
14 use lib
$ENV{XR_PERL_MODULE_DIR
};
16 use MyPlace
::Script
::Usage qw
/help_required help_even_empty/;
17 exit 0 if(help_required
($0,@ARGV));
18 #exit 0 if(help_even_empty($0,@ARGV));
20 if ($ARGV[0] eq "--no-cache") {
24 my ($url,$user,$pass)=@ARGV;
25 $url = "http://$url" unless($url =~ /^http:/i);
28 eval {use MyPlace
::Cache
;};
29 my $cache = MyPlace
::Cache
->new("httpget");
30 my @values = $cache->load($url);
38 $cache->save($key,@_) unless($no_cached);
44 die("Password is empty\n") unless($pass);
51 my $ua = LWP
::UserAgent
->new;
52 my $cookie = HTTP
::Cookies
->new(file
=> "$ENV{'HOME'}/.lwp_cookies.dat", autosave
=> 1);
53 $ua->cookie_jar($cookie);
54 $ua->agent("Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.3) Gecko/2008092416 Firefox/3.0.3 Firefox/3.0.1");
57 my $req = HTTP
::Request
->new(GET
=> $url);
58 my $res = $ua->request($req);
59 if ($res->is_success) {
60 my ($login,%fields)=&parse_content
($res->content);
62 $req = HTTP
::Request
->new(POST
=> $login);
63 $req->header(referer
=>$url);
64 $req->content_type('application/x-www-form-urlencoded');
65 $fields{username
}=$user;
66 $fields{password
}=$pass;
67 my $post="" ; #= "username=$user&password=$pass";
68 foreach(keys %fields) {
69 $post = $post . "&$_=" . $fields{$_};
71 $post = substr($post,1);
72 print STDERR
"POSTING:$post\n";
74 $res = $ua->request($req);
75 if($res->is_success) {
79 print STDERR
$res->status_line,"\n";
84 print cache_save
($url,$res->content);
89 print STDERR
$res->status_line, "\n";
95 my $content = join("",@_);
96 if($content =~ /input\s+[^<>]*\s*name=['"]username['"]/im) {
98 if($content =~ /\<form\s+[^<>]*\s*action=['"]([^'"]+)['"]/i) {
100 $login = URI
->new_abs($1,$url);
101 print STDERR
"Trying to Login : $login","\n";
102 my @match = $content =~ /\<((?:input|select)\s+[^<>]+)/g;
103 # \s*name=['"]([^'"]*)['"]/g; '[^<>]*value=['"]([^'"]+)['"]/g;
106 my ($name,$value)= /^select/ ?
("",0) : ("","");
107 if(/\s*name=['"]([^'"]*)['"]/) {
109 if(/\s*value=['"]([^'"]+)['"]/) {
112 $fields{$name}=$value;
116 $fields{loginfield
}="username";
117 $fields{referer
}=$url;
118 $fields{loginsubmit
}="true";
119 return $login,%fields;