[Source] Simples HTTP Tool

Started by Dark_Side, 16 de September , 2006, 04:29:34 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Dark_Side

Hi,
Posto agora um simples programa que obtém algumas informações sobre páginas, como lista de links, imagens, scripts, scan de diretórios, etc. O code está meio lolz, mas acho que é compreensível.

http_tool.pl

# Módulos
use LWP::UserAgent;
use HTTP::Date;
use Switch;

init: # Porto de partida

# system("clear") -> Linux
# system("cls") -> Windows

system("clear"); # Limpa a tela;

# Mostra as opções
#############################################################

print "#################################################\n";
print "#######   Simples HTTP Tool - by Dark Side  #####\n";
print "#################################################\n\n";
print "Escolha uma tarefa:\n";
print "[1] Obter lista de links de uma pagina\n";
print "[2] Obter lista de imagens de uma pagina\n";
print "[3] Obter arquivos de script de uma pagina\n";
print "[4] Obter arquivos de folhas de estilos de uma pagina\n";
print "[5] Obter informacoes sobre um servidor\n";
print "[6] Procurar por diretorios e arquivos...\n";
print "[7] Sair\n\n";

# Obtém a opção selecionada
print "Opcao: ";
$op = <STDIN>;
chomp $op;


switch ($op)
{
case 1 {&procura_links} # Opção 1
case 2 {&procura_imgs} # Opção 2
case 3 {&procura_scripts} # Opção 3
case 4 {&procura_css} # Opção 4
case 5 {&server_info} # Opção 5
case 6 {&procura_dirs} # Opção 6
case 7 {exit} # Opção 7

else   {goto init;} # Nenhuma das opções acima
}

#############################################################

# Após executar uma das funções acima, com exceção da função EXIT:
<STDIN>;
goto init; # Retorna ao porto de partida

#############################################################

sub get_page() # Obtém uma url
{
print ">> Digite o endereco:\n";
$page = <STDIN>;
chomp $page;

if(substr($page,0,7) ne "http://"){ # Inclui HTTP:// antes da url se necessário
$page = "http://$page";}
lc $page; # Conversão para minúsculas
return $page;
}

sub get_content() # Obtém o conteúdo
{
$url = @_[0]; # Parâmetro

my $useragent = LWP::UserAgent->new;
$resp = $useragent->get($url); # Tenta obter o conteúdo

if($resp->is_error)  # Em caso de erro
{
print "Erro ao fazer requisicao.";
<STDIN>;
goto init;
}
return lc $resp->as_string; # Retorna o conteúdo em minúsculas
}
#############################################################

sub tempo() # Formata data/hora: DD-MM-AAAA, HH:MM:SS
{
my ($data, $time) = split(" ", HTTP::Date::time2iso());
my ($hora, $min,$sec) = split(":", $time);
$log_time = "$data, $hora:$min:$sec";

return $log_time; # Retorna o valor
}

#############################################################

sub procura_links(){ # Procurar links
$url = get_page(); # Obtém url
print "Obtendo lista de links em $url...\n";
$code = &get_content($url); # Obtém conteúdo

print "Links encontrados em: $url\n\n";
open(logfile,">>links.txt");  # Abre arquivo de log -> ampliação

@links = split("<a href=\"",$code); # Separa referência dos links
$log_time = tempo();

$results = $#links; # Número de resultados

print logfile "#############################################\n";
print logfile "Log gerado em: $log_time \n";
print logfile "Página: $page\n";
print logfile "Links encontrados: $results\n";
print logfile "#############################################\n";
print logfile "                    Links:                   \n";
print logfile "*********************************************\n";

for($i=1;$i<=$#links;$i++) # Percorre o array com os links
{
$links[$i] =~ m/(.*?)\"/; # Separa somente o link
print "$1\n\n"; # Mostra-o na tela
print logfile "$1\n\n"; # Inclui no arquivo
}

# Fecha o arquivo e finaliza
close logfile;
print "Concluido com $results resultados.\n";
print "Log salvo em \"links.txt\".";
}

#############################################################

sub procura_imgs() # Procura imagens
{
$url = get_page(); # Obtém url
print "Obtendo lista de imagens em $url...\n";
$code = &get_content($url); # Obtém conteúdo

print "Imagens encontradas em: $url\n\n";
open(logfile,">>imgs.txt"); # Arquivo de log -> ampliação

@imgs = split("<img src=\"",$code); # Separa referência das imagens
$log_time = tempo();
$results = $#imgs; # Resultados

print logfile "#############################################\n";
print logfile "Log gerado em: $log_time \n";
print logfile "Página: $page\n";
print logfile "Imagens encontradas: $results\n";
print logfile "#############################################\n";
print logfile "                    Imagens:                 \n";
print logfile "*********************************************\n";

for($i=1;$i<=$#imgs;$i++) # Array com as imagens
{
$imgs[$i] =~ m/(.*?)\"/; # Separa somente as imagens
print "$1\n\n"; # Mostra-a na tela
print logfile "$1\n\n"; # Inclui no arquivo
}

close logfile;
print "Concluido com $results resultados.\n";
print "Log salvo em \"imgs.txt\".";
}

#############################################################

sub procura_scripts(){ # Procurar scripts
$url = get_page(); # Obtém url
print "Obtendo arquivos de scripts em $url...\n";
$code = &get_content($url); # Obtém conteúdo

print "Scripts encontrados em: $url\n\n";
open(logfile,">>scripts.txt");  # Abre arquivo de log -> ampliação

# Separa refrência dos scripts
@scripts = split("<script src=\"",$code);

$log_time = tempo();
$results = $#scripts; # Resultados

print logfile "#############################################\n";
print logfile "Log gerado em: $log_time \n";
print logfile "Página: $page\n";
print logfile "Scripts encontrados: $results\n";
print logfile "#############################################\n";
print logfile "                  Scripts:                   \n";
print logfile "*********************************************\n";

for($i=1;$i<=$#scripts;$i++) # Percorre o array com os scripts
{
$links[$i] =~ m/(.*?)\"/; # Separa somente o script
print "$1\n\n"; # Mostra-o na tela
print logfile "$1\n\n"; # Inclui no arquivo
}

# Fecha o arquivo e finaliza
close logfile;
print "Concluido com $results resultados.\n";
print "Log salvo em \"scripts.txt\".";
}
#############################################################

sub procura_css(){ # Procurar folhas de estilos
$url = get_page(); # Obtém url
print "Obtendo folhas de estilos em $url...\n";
$code = &get_content($url); # Obtém conteúdo

print "Folhas de estilos encontradas em: $url\n\n";
open(logfile,">>css.txt");  # Abre arquivo de log -> ampliação

# Separa referência das folhas de estilos
@css = split("<link rel=stylesheet href=\"",$code);
$log_time = tempo();

$results = $#css; # Resultados

print logfile "#############################################\n";
print logfile "Log gerado em: $log_time \n";
print logfile "Página: $page\n";
print logfile "Folhas de estilos encontradas: $results\n";
print logfile "#############################################\n";
print logfile "               Folhas de Estilos             \n";
print logfile "*********************************************\n";

for($i=1;$i<=$#css;$i++) # Percorre o array com as folhas de estilos
{
$css[$i] =~ m/(.*?)\"/; # Separa somente a folha de estilos
print "$1\n\n"; # Mostra-a na tela
print logfile "$1\n\n"; # Inclui no arquivo
}

# Fecha o arquivo e finaliza
close logfile;
print "Concluido com $results resultados.\n";
print "Log salvo em \"css.txt\".";
}

#############################################################

sub server_info() # Obtém informações sobre o servidor
{
$host = get_page(); # Obtém url
print "Obtendo informacoes de $host\n\n";

my $useragent = LWP::UserAgent->new;
$resp = $useragent->head($host); # Obtém headers

open(logfile,">>info.txt");
$log_time = tempo();

print logfile "#############################################\n";
print logfile "Log gerado em: $log_time \n";
print logfile "Endereco: $host\n\n";
print logfile $resp->headers_as_string; # Inclui os headers no arquivo de log
print logfile "#############################################\n";

print $resp->headers_as_string;  # Mostra headers na tela

close logfile;
print "Concluido.\n\n";
print "Log salvo em \"info.txt\".";
}

#############################################################

# Cancela o redirecionamento automático, para visualizarmos a URL de redirecionamento
sub LWP::UserAgent::redirect_ok { return 0;}

#############################################################

sub procura_dirs() # Procura diretórios e arquivos em um servidor
{
$f = open(arq,"dirs.txt"); # Tenta abrir o arquivo da lista
if($f == 0){
print "Erro ao abrir a lista de diretorios: \"dirs.txt\".";
return;}

@dir = <arq>;
$page = get_page(); # Obtém URL

open(logfile,">>busca_dir.txt");

$log_time = tempo();
print logfile "#############################################\n";
print logfile "Log gerado em: $log_time \n";
print logfile "Endereco: $page\n";
print logfile "#############################################\n\n";

$count = 0;
print "Procurando diretorios ou arquivos em $page\n";

for($i=0;$i<=$#dir;$i++) # Percorre toda a lista
{
$url = $page.$dir[$i];
chomp $url;
 
print "\n\n>> Procurando por $url";
print logfile "\n\n>> Procurando por $url";

my $useragent = LWP::UserAgent->new;
$resp = $useragent->head($url); # Obtém header

if($resp->is_success){ # Sucesso -> diretório ou arquivo existe
print "\n\n>>>>> Encontrado:\n$url";
print logfile "\n\n>>>>> Encontrado:\n$url";
$count++;}


if($resp->is_redirect){ # Redirecionamento
print "\n\nRedirecionado para:\n".$resp->header("Location"); # Mostra a URL de redirecionamento na tela

print logfile "\n\nRedirecionado para:\n".$resp->header("Location"); # Inclui a URL de redirecionamento no arquivo
$count++;}
}
print "\n\nConcluido com $count resultados.";
close arq;
close logfile;
print "\nLog salvo em \"busca_dir.txt\".";
}
Bye...

_Dr4k0_

Puts..

Não satisfeito em já codar:C/C++,VB,Delphi,ASM,PHP,HTML,JavaScript...
 Agora quer codar Perl tb :P

Muito bom..
100% Livre!!!Livre para escolher o que há de melhor no Windows e Linux. Livre de preconceito direto ou inverso!
Adote essa filosofia e tenha mais chance de sucesso profissional.

Anonymous

Cara muito bom...
Apesar de ter dado uns errinhos aqui mas coisa a toa!
rsrsrsr
Parabens pelo code!!!
Vlws
lol

Ðark$pawn

#3
É amigo Dark_Side, eu por não entender nada de programação não estou te dando Pontos Positivos, eu sempre fico esperando alguém comentar pra depois gratificá-lo...

Desculpe-me e Ponto Positivo pela sua ajuda contínua ao fórum... ;)

OnlyOne

pera ai , vc nao entende de programaçao ??? ta na hora de corre atras do prejuizo
No céu toca Joy Division


nizep

@Dark_Side
Parabens ae pelo programa velho

já aproveitando o tópico..
tipow quais sao as linguagens de programaçao e web mais "simples" pra kem ta começando agora
to akabando uma apostila aki de logica de programaçao e vo entra fundo no eskema agora

vlws

insanity

Quote from: "nizep"@Dark_Side
Parabens ae pelo programa velho

já aproveitando o tópico..
tipow quais sao as linguagens de programaçao e web mais "simples" pra kem ta começando agora
to akabando uma apostila aki de logica de programaçao e vo entra fundo no eskema agora

vlws

estude HTML -> java script - >PHP -> perl ->C/C++

Siga essa ordem, se você quizer ;)


ate mais

Ðark$pawn

Quote from: "OnlyOne"pera ai , vc nao entende de programaçao ;)