updated git and svn scripts
[xrzperl.git] / netcat_autologin
blobe5e5c23d183297680dcbfc5aa1d0540b9ad8d089
1 #!/usr/bin/perl -w
2 ###APPNAME: netcat_autologin
3 ###APPAUTHOR: duel
4 ###APPDATE: 2009-01-06 17:32:15
5 ###APPVER: 0.1
6 ###APPDESC: netcat a http url with autologin support
7 ###APPUSAGE: (url)
8 ###APPEXAMPLE: netcat_autologin www.google.com
9 use strict;
11 #ENV variable MUST be defined somewhere,
12 #FOR perl to search modules from,
13 #OR nothing will work
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));
19 my $no_cached;
20 if ($ARGV[0] eq "--no-cache") {
21 $no_cached=1;
22 shift @ARGV;
24 my ($url,$user,$pass)=@ARGV;
25 $url = "http://$url" unless($url =~ /^http:/i);
27 unless($no_cached) {
28 eval {use MyPlace::Cache;};
29 my $cache = MyPlace::Cache->new("httpget");
30 my @values = $cache->load($url);
31 if(@values) {
32 print @values;
33 exit 0;
36 sub cache_save {
37 my $key=shift;
38 $cache->save($key,@_) unless($no_cached);
39 return @_;
44 die("Password is empty\n") unless($pass);
46 use LWP::UserAgent;
47 use HTTP::Cookies;
48 use Data::Dumper;
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");
56 Connect:
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);
61 if($login) {
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";
73 $req->content($post);
74 $res = $ua->request($req);
75 if($res->is_success) {
76 goto Connect;
78 else {
79 print STDERR $res->status_line,"\n";
80 exit 1;
83 else {
84 print cache_save($url,$res->content);
85 exit 0;
88 else {
89 print STDERR $res->status_line, "\n";
90 exit 1;
93 sub parse_content {
94 print @_,"\n";
95 my $content = join("",@_);
96 if($content =~ /input\s+[^<>]*\s*name=['"]username['"]/im) {
97 my ($login,%fields) ;
98 if($content =~ /\<form\s+[^<>]*\s*action=['"]([^'"]+)['"]/i) {
99 use URI;
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;
104 if(@match) {
105 foreach(@match) {
106 my ($name,$value)= /^select/ ? ("",0) : ("","");
107 if(/\s*name=['"]([^'"]*)['"]/) {
108 $name = $1;
109 if(/\s*value=['"]([^'"]+)['"]/) {
110 $value=$1;
112 $fields{$name}=$value;
116 $fields{loginfield}="username";
117 $fields{referer}=$url;
118 $fields{loginsubmit}="true";
119 return $login,%fields;
122 return undef;