<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body bgcolor="#ffffff" text="#000000">
Boa noite pessoal!<br>
<br>
Fiz um programinha (meu primeiro programa !!) para descobrir quais são
os IP's ativos na minha rede e surgiram algumas dúvidas.<br>
Abaixo segue o programa (é tosco, mas funcionou!..rsrs!):<br>
<br>
<font color="#3333ff">#!/usr/bin/perl <br>
<br>
use strict;<br>
use warnings;<br>
<br>
print "Digite a rede que deseja consultar: \n";<br>
print "Ex: Digite \"0\" se a rede for 192.168.0.0\n";<br>
<br>
my $rede = <STDIN>;<br>
chomp($rede);<br>
<br>
foreach (1..254) {<br>
#foreach ( 99 .. 101, 251 .. 254 ) {<br>
<br>
my $ip = "192.168.$rede.$_";<br>
<br>
if ( system("ping -c 1 $ip > /dev/null") ) {<br>
<br>
# my @inativo = $ip;<br>
# print "Os INATIVOS são:\n", "$ip\n";<br>
<br>
}<br>
else {<br>
<br>
# my @ativo = $ip;<br>
print "Os IP\`s ATIVOS na rede são:\n", "$ip\n";<br>
}<br>
<br>
}</font><br>
<br>
<br>
Minhas dúvidas são:<br>
<br>
1) Gostaria de imprimir os IP's localizados da seguinte forma:<br>
Os IP`s ATIVOS na rede são:<br>
192.168.1.10<br>
192.168.1.25<br>
192.168.1.41<br>
...<br>
<br>
Mas do jeito que está, por causa do "foreach" o programa imprime na
tela:<br>
<br>
Os IP`s ATIVOS na rede são:<br>
192.168.1.10<br>
Os IP`s ATIVOS na rede são:<br>
192.168.1.25<br>
...<br>
<br>
Como posso fazer isso?<br>
<br>
Pra tentar imprimir como eu queria, tentei armazenar os resultados num
array "my @ativo = $ip;" e tirá-lo de dentro do "foreach" para tentar
evitar a repetição conforme mencionei acima. Mas se eu tentar "tirar"
este array de dentro do bloco do "else" o programa me retorna o erro "<b>Global
symbol "@ativo" requires explicit package name at...</b>"<br>
<br>
Como posso tipo, "exportar" este array para fora deste bloco ?<br>
<br>
2) No caso do teste do "IF", <u>se a condição é verdadeira</u>, ou
seja, se é possível pingar um IP, ele não deveria ser retornado dentro
do primeiro bloco do "IF" ??...E na verdade o que acontece é que a
condição (que é veradadeira) me é retornada só no bloco do "else".<br>
Deixa ver se explico melhor:<br>
<br>
<br>
foreach (1..254) {<br>
<br>
my $ip = "192.168.$rede.$_";<br>
<br>
if ( system("ping -c 1 $ip > /dev/null") ) {<br>
<br>
# my @inativo = $ip;<br>
print "Os INATIVOS são:\n", "$ip\n"; ===> NÃO ERA PRA SER
AQUI O RESULTADO DE QUANDO A CONDIÇÃO É VERDADEIRA? (consegui pingar um
IP da rede?)<br>
===> NÃO ERA NESTE BLOCO QUE OS <u>IP'S ATIVOS</u> ERAM PARA ESTAR?<br>
<br>
}<br>
else {<br>
<br>
# my @ativo = $ip;<br>
print "Os IP\`s ATIVOS na rede são:\n", "$ip\n"; ===> E NA
VERDADE, SÓ ENCONTRO OS ATIVOS AQUI NESTE BLOCO<br>
}<br>
<br>
}<br>
<br>
Não sei se soube me expressar bem!...espero que tenham entendido a
dúvida<br>
<br>
<br>
3) Pessoal, tem como escrever melhor este programa, para torná-lo mais
rápido?<br>
Por exemplo, ele vai tentar pingar do IP 1 até o 254, e isto demora um
pouco!!<br>
<br>
O que vcs me sugerem para melhorar este programa?<br>
<br>
abraço,<br>
Flávio<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
</body>
</html>