Article View: es.comp.os.linux.programacion
Article #15110Re: Leer líneas de un fichero
From: Oscar Manuel
Date: Sun, 20 Aug 2000 00:00
Date: Sun, 20 Aug 2000 00:00
133 lines
5434 bytes
5434 bytes
Oscar Manuel wrote:
>
> Este es el último "experimento" de programilla (es que no sé seguir):
>
> #!/bin/bash
> RESULT=/tmp/onmap
> nmap -n -sP -PI 192.168.0.1-254 -m $RESULT
> linea=$(cat $RESULT|read)
> #linea=$(cat $RESULT|read host ip up_down final)
> /bin/echo $linea $host $ip $up_down $final
> $REPLY
Bueno, gracias a todos los que me han contestado. He aquí el resultado
al cual quería llegar (por ahora):
#!/bin/bash
FECHA=$(date +%d/%m/%y\ %X)
RESULT0=/tmp/Omap
RESULT=${RESULT0}.ip
SQL=/tmp/ip.sql
X1A=192 # Rango inicial para el primer byte
X1B=192 # Rango final para el primer byte
X2A=168 # Rango inicial para el segundo byte
X2B=168 # Rango final para el segundo byte
X3A=0 # Rango inicial para el tercer byte
X3B=0 # Rango final para el tercer byte
X4A=1 # Rango inicial para el cuarto byte
X4B=25 # Rango final para el cuarto byte
NMAP="nmap -n -sP -PI
${X1A}-${X1B}.${X2A}-${X2B}.${X3A}-${X3B}.${X4A}-${X4B} -m $RESULT0 "
$NMAP 2 >/dev/null
test -f $RESULT0 || exit 1
grep Up $RESULT0|awk '{printf "%s\n", $2}'>$RESULT
echo "# $FECHA">$SQL
X1=$X1A
while [ $X1 -le $X1B ]; do
X2=$X2A
while [ $X2 -le $X2B ]; do
X3=$X3A
while [ $X3 -le $X3B ]; do
X4=$X4A
while [ $X4 -le $X4B ]; do
IP="$X1.$X2.$X3.$X4"
echo -n "La IP $IP "
linea=$(grep $IP $RESULT)
if [ "$linea" != "$IP" ]; then
# La IP no está siendo usada
echo "no está siendo usada";
else
# La IP está siendo usada
echo "está siendo usada";
fi
let X4=X4+1
done
let X3=X3+1
done
let X2=X2+1
done
let X1=X1+1
done
El programa sirve para escanear un rango de IPs y saber qué IPs están en
uso y cuáles no. Lo he complicado aposta para hacerlo lo más flexible
posible, formando la IP con $X1.$X2.$X3.$X4, y así ir fogueándome un
poquillo con más comandos del bash. El ejemplo incluye desde 192.168.0.1
hasta 192.168.0.25,, y para cambiarlo hay que poner los valores inicial
y final de cada rango en las variables del principio. Quería comentar
que una expresión del tipo "X1=X1+1" toma X1 como cadena y no como
número, por lo que si antes X1 valía 1, ahora vale la cadena "1+1" en
vez de "2". Tras comerme un poco el coco, he descubierto la instrucción
"let" que toma el valor como numérico. ¿Podría alguien decirme por qué?
Por si acaso a alguien le caben dudas, el programa no está ni mucho
menos terminado. El código que tengo que meter ahora es en el if,
haciendo "algo" si la IP está siendo usada o si no. La intención
posterior es llevar una estadística de uso, introduciendo los resultados
en un SGBD (seguramente será MySQL, aunque podría ser Postgresql,
todavía no lo tengo decidido), y consultarlo desde diversas plataformas.
Mientras no tenga estos aspectos, no podré continuar.
Aparte de esto, continúa el problema que comenté en otro mensaje, que es
el WOL. Como por ahí preguntaban qué era esto, es el Wake On Lan, que es
una capacidad que tienen ciertas tarjetas de red, en combinación con la
placa, de arrancar la máquina. Desconozco cómo funciona en profundidad
el funcionamento del WOL, pero está claro que en el nmap que hago, al
menos la máquina que tengo en mi casa en red se enciende SIEMPRE que se
ejecuta el nmap. El problema gordo es que el programa lo quiero diseñar
para una red de varios cientos de máquinas, y _bastantes_ tienen tarjeta
de red con WOL. He visto que nmap tiene la opción -p para determinar el
rango de puertos, así que si alguien puede darme un valor para esta
opción (u otra) para evitar el "efecto WOL", se lo agradecería.
Como último detalle, me consta que hay máquinas que están protegidas
contra el icmp, por lo cual querría saber el método más fiable posible
para determinar si esa IP está realmente en uso o no.
Gracias y perdón por el rollo.
--
http://counter.li.org registration info:
----------------------------------------
Linux user: 92390 - Linux machine: 39301
|--------------------------------------------|
| Oscar Manuel Gómez Senovilla |
| mailto:oscarsen@BORRARomgs.findhere.com |
| (quita "BORRAR" después de @) |
| (remove "BORRAR" after @) |
| Madrid (España) |
|--------------------------------------------|
Technical Details
Message-ID:
<39A0309D.13EC45A5@omgs.es>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<39999EE1.BFBF9AE4@omgs.es>Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: f86c8,1acfdd076705ea7c X-Google-Attributes: gidf86c8,public From: Oscar Manuel <oscar@omgs.es> Subject: Re: Leer líneas de un fichero Date: 2000/08/20 Message-ID: <39A0309D.13EC45A5@omgs.es> X-Deja-AN: 660464912 Content-Transfer-Encoding: quoted-printable References: <39999EE1.BFBF9AE4@omgs.es> X-Accept-Language: es Content-Type: text/plain; charset=iso-8859-1 X-Trace: oscar.omgs.es 966799517 21882 192.168.0.10 (20 Aug 2000 19:25:17 GMT) Organization: Estoy harto de spammers Mime-Version: 1.0 Newsgroups: es.comp.os.linux.programacion