#!usr/bin/perl use strict; no strict "refs"; use Raven::Sock; my $sock = new Sock; my $regex = qr/(.*?)(?:\/|$)(.*)/; my ($data, $args, @args, $site, $get, $head); my ($stdin,$num)=(1,1); #HTTP / FTP browser #version 0.0.1 print ":: Raven HTTP [Use / in URL]::\n"; while ($stdin != 0) { print "Website URL: "; $stdin = (@ARGV) ? shift(@ARGV) : ; chomp($stdin); if ($site && $stdin =~ /^\//) { $get=$stdin; } else { ($site, $get) = $stdin =~ /$regex/i; } $head="GET"; #Default is get but can use other commands too if prefixed. ($head) = $site =~ /^(.*) / if ($site =~ / /); #Check for Command? $get=~s/^\///; &{$head}($sock, $site, 'http://'.$site.'/'.$get); $data = &RET($sock); $sock->close(); print "Server : "; MENU : while ($stdin) { #CMD Menu print STDOUT $data."\n\n" unless $stdin =~ /^5/; print "OPTIONS : \n1 - Remove HTML Code\n2 - Remove Specific HTML Code\n3 - 2 EXCEPT\n4 - Goto Adress\n5 - Save To File\n0 - Quit\n"; chomp($stdin=); if ($stdin == 1) { $data=&remove($data); } elsif ($stdin =~ /^(?:2|3)/) { ($num,$args) = $stdin =~ /^(2|3) (.*)/; @args = split (' ', $args); $data=&remove($data, $num-2, @args); } elsif ($stdin =~ /^4/) { ($ARGV[0])=$stdin=~/^4 (.*)/; last MENU; } elsif ($stdin =~/^5/) { my ($file) = $stdin =~/^5 (.*)/; $file = $file || $site.$get; $file=~s/\// /g; $file.=".html" if $file !~ /\.\w{1,5}$/; open FILE, ">files/$file"; print FILE $data; close FILE; print "Saved to files/$file\n"; } } } #Removes html sub remove { my ($data,$flag,@args) = @_; $flag = 1 unless scalar(@args); if (scalar(@args)) { foreach (@args) { if ($flag) { $data=~s/<($_(?: .*?|))>/"[".$1."]"/eig; $data=~ s/<(\/$_)>/"[".$1."]"/eig; } else { $data =~ s/<$_(?: .*?|)>//ig; $data =~ s/<\/$_>//ig; } } } $data =~s/
/\n/g; $data =~ s/<.*?>//sg if $flag; $data =~s/\n\s*\n/\n/gis; $data =&convert($data); #How to shorten massive gaps in some webpages??!?!? return $data; } sub convert { my $data=shift; my %hash = ( nbsp => " ", gt => ">", lt => "<", amp => "\&", raquo => ">>", ); foreach (keys %hash) { $data=~s/\&$_\;/$hash{$_}/g; } return $data; } sub GET { my ($sock,$site, $get, $msg)=@_; &CONN($sock, $site); $msg='GET '.$get.' HTTP/1.0'."\n\n"; print "Client : $msg\n"; $sock->snd($msg); } sub POST { } sub RET{ my ($sock) = @_; my @Data; my $ret=1; while ($ret) { ($ret) = $sock->rcv(5000); push (@Data, $ret); } return join (' ', @Data); } sub CONN { $_[0]->connect($_[1], $_[2] || 80, "tcp"); }