🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #15110

Re: Leer líneas de un fichero

#15110
From: Oscar Manuel
Date: Sun, 20 Aug 2000 00:00
133 lines
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-mail
References: <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