🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Programa para IPs libres

#15499
From: Oscar Manuel
Date: Sun, 02 Jul 2000 00:00
167 lines
6800 bytes
Ignacio Arenaza wrote:
> 
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> >>>>> "Oscar" == Oscar Manuel <oscar@omgs.es> writes:
> 
>     >>  Creo que no hace falta que te rompas la cabeza. Una 'nmap'. Es
>     >> capaz de barrer el rango de IPs que le pidas.
> 
>     Oscar> Vale, pero yo quiero sacar a un fichero (o algo más o menos
>     Oscar> legible) las IPs que no están ocupadas, y en mis pruebas
>     Oscar> saca sólo los que están conectados, y con más información
>     Oscar> de la que necesito. ¿Alguna otra idea?
> Algo como:
> 
>     nmap -sP -PI -v 192.168.0.0/24
> 
> Deberia bastarte, ¿no? Ahi va un ejemplo de lo que se obtiene...
> 
>     Script started on Mon Jun 26 22:34:37 2000
>     # nmap -sP -PI -v 192.168.0.0/24
> 
>     Starting nmap V. 2.12 by Fyodor (fyodor@dhp.com, www.insecure.org/nmap/)
>     Host  (192.168.0.0) appears to be down.
>     Host eb2ebu.ampr.org (192.168.0.1) appears to be up.
>     Host  (192.168.0.2) appears to be down.
>     Host  (192.168.0.3) appears to be down.
>     ...
>     ...
>     Host  (192.168.0.253) appears to be down.
>     Host  (192.168.0.254) appears to be down.
>     Host  (192.168.0.255) appears to be down.
>     Nmap run completed -- 256 IP addresses (1 host up) scanned in 1 second
>     # exit
>     exit
> 
>     Script done on Mon Jun 26 22:34:51 2000
> 
> Despues tratar eso con grep & awk (o perl) y compañia deberia ser
> facil para tener la lista de las que estan en marcha.

Sí, ésa es la idea. Lo he estado madurando y creo que ya tengo claro lo
que quiero, pero no estoy seguro de si sabré implementarlo. M'explico.

La necesidad real es que tengo un rango de IP's en la red, y cuando
tengo que instalar una máquina nueva (casi todos los días), tengo que
asignarle una IP fija, y aunque parezca increíble, no sobran
precisamente. Por una serie de circunstancias, no se puede usar DHCP, y
aunque existe un registro de las IPs (el cual he heredado, pero es
teóricamente imposible controlar al 100%), está comprobado que no se
corresponde _exactamente_ con la realidad, por eso necesito controlar de
la manera más fidedigna que se me ocurre qué IPs están libres para
poderlas reutilizar. Luego tengo que tener en cuenta que hay máquinas
que se apagan todos los días, que se caen, que están un tiempo sin
encederse, máquinas que se quitan, etc.

Teniendo todos estos factores en cuenta y madurando un poco la idea
inicial, he ideado lo siguiente: cada cierto tiempo (con cron, y ya veré
cuánto), realizar un "escaneo" de IPs con nmap. De ese escaneo, sacar un
fichero temporal con los resultados de ese escaneo. Luego ese fichero se
"parseará" y se deducirán qué IPs (mediante grep, awk o lo que sea)
están en uso EN ESE MOMENTO y cuáles no. La información de TODAS las
IPs, independientemente de su estado, irá a parar a un fichero histórico
donde se acumulará información, más concretamente un registro con los
siguientes campos: la IP, número de escaneos en los que estaba siendo
utilizada, número de escaneos en los que estaba libre y la última vez
que estaba en uso. El último paso sería "parsear" este fichero y, con
esa información, "deducir" (junto con el registro que tengo) qué IPs
aparentemente están libres.

Para implementar esto, hay cosas que no sé hacer y no sé cuál será la
mejor forma. La primera sería parsear el fichero temporal, el cual tiene
dos fases: interpretar el propio fichero y preparar esa información para
acumularla en el histórico. Lo primero que tendría que decidir es el
formato del fichero histórico, que puede ser separado por comas,
tabuladores o espacios.

Supongamos lo siguiente:

1) Resultado del fichero temporal generado por nmap (después de hacerle
un grep con "appears"):

Host (192.168.0.1) appears to be up.
Host host.domain.es (192.168.0.2) appears to be up.
Host (192.168.0.3) appears to be down.
Host (192.168.0.4) appears to be up.
... etc.

Por cierto, necesito generar un número aleatorio para el fichero
temporal, y no sé cómo hacerlo.

2) Luego, de cada línea, tengo que sacar la IP y el estado (quizá
convertir up=1 y down=0). Esto lo puedo hacer con "cut", hasta aquí
llego, pero lo que no sé si habrá alguna manera de hacer (bueno, sí que
la hay, por supuesto) es añadir esto al histórico, que posiblemente
tenga líneas tal que así:

192.168.0.1,5,0,01/01/2000


Lo de la fecha ya veré el formato. Bien, si ésa es la línea de la
192.168.0.1 antes del último escaneo, y ahora está "up", habrá que sumar
uno al segundo campo ("5") para actualizar el número de veces que estaba
"up", y actualizar el último campo de la fecha a la del escaneo.
Inicialmente creo que podría hacerlo según la vieja técnica de los
ficheros secuenciales, es decir, crear un temporal con los resultados
nuevos, borrar el antiguo y renombrar el nuevo como el original, pero me
imagino que debe de haber algo para esto (¿quizás "sed"?).

3) Una vez hecho esto, lo último sería coger el histórico y deducir qué
IPs están libres, siendo la idea principal el porcentaje de veces "down"
(que debe ser del 100%) junto con la última fecha que estuvo "up".


Bueno, hasta aquí la tesis doctoral de hoy. Perdón por la longitud del
mensaje, pero no he sabido expresarlo de manera más corta.


-- 
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: <395E8D8A.1EE37E11@omgs.es>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <3951374E.5E2C5634@omgs.es> <87hfalz7ne.fsf@eb2ebu.ampr.org> <39568361.14B09671@omgs.es> <87ya3s6uwj.fsf@eb2ebu.ampr.org>

Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII
X-Google-Thread: f86c8,d23863885ae5cfe3
X-Google-Attributes: gidf86c8,public
From: Oscar Manuel <oscar@omgs.es>
Subject: Re: Programa para IPs libres
Date: 2000/07/02
Message-ID: <395E8D8A.1EE37E11@omgs.es>
X-Deja-AN: 641446446
Content-Transfer-Encoding: quoted-printable
References: <3951374E.5E2C5634@omgs.es> <87hfalz7ne.fsf@eb2ebu.ampr.org> <39568361.14B09671@omgs.es> <87ya3s6uwj.fsf@eb2ebu.ampr.org>
X-Accept-Language: es
Content-Type: text/plain; charset=iso-8859-1
X-Trace: oscar.omgs.es 962497931 14578 192.168.0.10 (2 Jul 2000 00:32:11 GMT)
Organization: Estoy harto de spammers
Mime-Version: 1.0
Newsgroups: es.comp.os.linux.programacion