🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: es.comp.os.linux.programacion
8 messages
8 total messages Started by Kunael Sat, 20 Aug 2005 08:05
Script tcpdump
#1683
Author: Kunael
Date: Sat, 20 Aug 2005 08:05
46 lines
2207 bytes
Saludos a todo2,

El objetivo es crear un script muy simple que sniffe el tráfico de red;
lógicamente usaré tcpdump. Una vez realizado el script controlaré su
ejecución mediante cron.

El problema que tengo es que, suponiendo que el proceso se mate a conciencia
(por lo que sea) o que se reinicie la máquina, no interesa que se machaque
el log, sino que cree otro nombrado consecutivamente.

Lo que tengo hasta ahora es:

#!/bin/bash

FECHA=$(date +%m-%d-%Y)
CONTADOR=0
LOG=/var/log/tcpdump/tcpdump-$FECHA-$CONTADOR.log

if [ -e $LOG ]; then


        let CONTADOR=CONTADOR+1
        tcpdump -i eth0 -q -w $LOG
        
        else

        tcpdump -i eth0 -q -w $LOG
fi

exit 0

Es decir, la idea es comprobar antes de nada si el fichero del log ya
existe; en caso negativo (funciona) pues ejecutas el comando y ya queda
creado. En caso positivo se tiene que crear pero con el contador de log
incrementado a 1 respecto al que ya existe.

Ahí es donde tengo los problemas. No funciona. Creo que los tiros andarían
por utilizar awk como controlador del contador, pero no sé...

Mil gracias.

- 
¡Share your knowledge!

Linux user id 332494  # http://counter.li.org/
PGP id 0xC5ABA76A  # http://pgp.mit.edu/
Re: Script tcpdump
#1684
Author: Pere Pujal i Carabantes
Date: Sat, 20 Aug 2005 09:51
39 lines
2080 bytes
Hola Kunael!

El 20-08-2005
Kunael va escriure en 
es.comp.os.linux.programacion:
 
> Saludos a todo2,

> El problema que tengo es que, suponiendo que el proceso se mate a conciencia
> (por lo que sea) o que se reinicie la m�quina, no interesa que se machaque
> el log, sino que cree otro nombrado consecutivamente.

> Lo que tengo hasta ahora es:

> #!/bin/bash

> FECHA=$(date +%m-%d-%Y)
> CONTADOR=0

Inicias el contador en el propio codigo con lo cual no sabes cuantas veces ya
se ha ejecutado.

Si tiras por este lado, deberias sacar el contador de un fichero externo
o bien procesando los nombres de los ficheros de log ya existentes.

Por otro lado si lo que quieres es simplemente que los logs no se
sobreescriban, puedes sacar el nombre del fichero con
date +%M-%H-%m-%d-%Y
date +%S-%M-%H-%m-%d-%Y

Aunque si luego quieres ver los logs ordenados, mejor
date +%s-%m-%d-%Y



> Mil gracias.

Salut
Pere
Re: Script tcpdump
#1685
Author: Gonzalo Pérez de Olaguer Córdoba
Date: Sat, 20 Aug 2005 10:48
70 lines
3106 bytes
Hola Kunael <kunael4@yahoo.es>
el Sat, 20 Aug 2005 10:05:51 +0200 escribiste:

> Saludos a todo2,
> 
> El objetivo es crear un script muy simple que sniffe el tráfico de red;
> lógicamente usaré tcpdump. Una vez realizado el script controlaré su
> ejecución mediante cron.
> 
> El problema que tengo es que, suponiendo que el proceso se mate a conciencia
> (por lo que sea) o que se reinicie la máquina, no interesa que se machaque
> el log, sino que cree otro nombrado consecutivamente.
> 
> Lo que tengo hasta ahora es:
> 
> #!/bin/bash
> 
> FECHA=$(date +%m-%d-%Y)
> CONTADOR=0
> LOG=/var/log/tcpdump/tcpdump-$FECHA-$CONTADOR.log
> 
> if [ -e $LOG ]; then
> 
> 
>         let CONTADOR=CONTADOR+1

aquí deberías actualizar el valor de LOG para que use el nuevo
valor de CONTADOR, ¿no?

          LOG=/var/log/tcpdump/tcpdump-$FECHA-$CONTADOR.log

>         tcpdump -i eth0 -q -w $LOG
>         
>         else
> 
>         tcpdump -i eth0 -q -w $LOG
> fi
> 
> exit 0
> 
> Es decir, la idea es comprobar antes de nada si el fichero del log ya
> existe; en caso negativo (funciona) pues ejecutas el comando y ya queda
> creado. En caso positivo se tiene que crear pero con el contador de log
> incrementado a 1 respecto al que ya existe.
> 
> Ahí es donde tengo los problemas. No funciona. Creo que los tiros andarían
> por utilizar awk como controlador del contador, pero no sé...

Yo haría algo así:

FECHA=$(date +%m-%d-%Y)
CONTADOR=0
LOG=/var/log/tcpdump/tcpdump-$FECHA-$CONTADOR.log

while [ -e $LOG ]; do
        let CONTADOR=CONTADOR+1
	LOG=/var/log/tcpdump/tcpdump-$FECHA-$CONTADOR.log
done

tcpdump -i eth0 -q -w $LOG

y para ordenar cronológicamente los ficheros es mejor usar el formato
de fecha YYYY-MM-DD, o sea $(date +%F)

-- 
Gonzalo Pérez de Olaguer Córdoba <gpoc@iies.es>
PGP key 2861C704 --- F206 5671 6789 425D 111C  1302 214F 1934 2861 C704
Re: Script tcpdump
#1686
Author: Santiago Romero
Date: Sat, 20 Aug 2005 13:07
17 lines
1326 bytes
El Sat, 20 Aug 2005 10:05:51 +0200, Kunael escribi�:


 �Por qu� simplemente no a�ades la hora y minuto al nombre del 
fichero que generas?

 En plan:

FECHA=$(date +%m-%d-%Y-%m-%h)
LOG=/var/log/tcpdump/tcpdump-$FECHA.log

 saludos.

-- 
Santiago Romero (NoP/Compiler)
Mandrake GNU/Linux
http://www.sromero.org
Re: Script tcpdump
#1687
Author: Kunael
Date: Sun, 21 Aug 2005 10:39
29 lines
1761 bytes
>  ¿Por qué simplemente no añades la hora y minuto al nombre del
> fichero que generas?
> 
>  En plan:
> 
> FECHA=$(date +%m-%d-%Y-%m-%h)
> LOG=/var/log/tcpdump/tcpdump-$FECHA.log

Pozí. Anda que no es fácil.... ay, ¿dónde tendré la cabeza?

:P

De todas maneras, aún es más fácil; como que el -w se usa para dar salida en
formato tcpdump y no lo necesito (puede ser texto plano normal y corriente)
lo he solucionado así de fácil:

#!/bin/bash
FECHA=$(date +%m-%d-%Y)
LOG=/var/log/tcpdump/tcpdump$FECHA.log

        tcpdump -i eth0 -q >> $LOG &

exit 0

-- 
¡Share your knowledge!

Linux user id 332494  # http://counter.li.org/
PGP id 0xC5ABA76A  # http://pgp.mit.edu/
Re: Script tcpdump
#1688
Author: Kunael
Date: Sun, 21 Aug 2005 10:40
27 lines
1828 bytes
> Yo haría algo así:
> 
> FECHA=$(date +%m-%d-%Y)
> CONTADOR=0
> LOG=/var/log/tcpdump/tcpdump-$FECHA-$CONTADOR.log
> 
> while [ -e $LOG ]; do
>         let CONTADOR=CONTADOR+1
> LOG=/var/log/tcpdump/tcpdump-$FECHA-$CONTADOR.log
> done
> 
> tcpdump -i eth0 -q -w $LOG

Pero de esta manera tendrás sólo el log0. Es verdad que después tendrás el
log1, pero a la tercera ejecución del script, no tendrás el log2, sino un
log1 machacado.
 
> y para ordenar cronológicamente los ficheros es mejor usar el formato
> de fecha YYYY-MM-DD, o sea $(date +%F)

Si, deberé tenderlo en cuenta.

-- 
¡Share your knowledge!

Linux user id 332494  # http://counter.li.org/
PGP id 0xC5ABA76A  # http://pgp.mit.edu/
Re: Script tcpdump
#1689
Author: Kunael
Date: Sun, 21 Aug 2005 10:42
26 lines
1872 bytes
> Inicias el contador en el propio codigo con lo cual no sabes cuantas veces
> ya se ha ejecutado.
> 
> Si tiras por este lado, deberias sacar el contador de un fichero externo
> o bien procesando los nombres de los ficheros de log ya existentes.

A ese me refería; por eso decía que los tiros deben ir por sed/awk...
supongo, porqué no tengo pajolera de esos 2 :P
 
> Por otro lado si lo que quieres es simplemente que los logs no se
> sobreescriban, puedes sacar el nombre del fichero con
> date +%M-%H-%m-%d-%Y
> date +%S-%M-%H-%m-%d-%Y

Si, ya lo digo Santiago. Toda la razón
> 
> Aunque si luego quieres ver los logs ordenados, mejor
> date +%s-%m-%d-%Y

Otro apunte interesante.

-- 
¡Share your knowledge!

Linux user id 332494  # http://counter.li.org/
PGP id 0xC5ABA76A  # http://pgp.mit.edu/
Re: Script tcpdump
#1696
Author: Jesús M. NAVARRO
Date: Tue, 30 Aug 2005 02:24
77 lines
3539 bytes
Hola, Kunael:

Kunael escribi� en es.comp.os.linux.programacion:

> Saludos a todo2,
> 
> El objetivo es crear un script muy simple que sniffe el tr�fico de red;
> l�gicamente usar� tcpdump. Una vez realizado el script controlar� su
> ejecuci�n mediante cron.
> 
> El problema que tengo es que, suponiendo que el proceso se mate a
> conciencia (por lo que sea) o que se reinicie la m�quina, no interesa que
> se machaque el log, sino que cree otro nombrado consecutivamente.

Quiz� sea matar moscas a ca�onazos.  Parte de la elegancia de Linux es
disponer de peque�as herramientas que hagan bien su trabajo, y con
capacidad para "trabar" unas con otras.

> 
> Lo que tengo hasta ahora es:
> 
> #!/bin/bash
> 
> FECHA=$(date +%m-%d-%Y)
> CONTADOR=0
> LOG=/var/log/tcpdump/tcpdump-$FECHA-$CONTADOR.log
> 
> if [ -e $LOG ]; then
> 
> 
>         let CONTADOR=CONTADOR+1
>         tcpdump -i eth0 -q -w $LOG
>         
>         else
> 
>         tcpdump -i eth0 -q -w $LOG
> fi
> 
> exit 0

Por supuesto, esto no funciona, puesto que if s�lo se verifica una vez. 
Podr�as usar, por ejemplo, un bucle while para encontrar la �ltima
aparici�n de LOG+n, y asegurarte de que tu fichero es siempre +1 sobre el
�ltimo existente.

La verdad es que no se si la opci�n -w de tcpdump sobreescribe o a�ade, en
caso de que el fichero de log ya exista, pero da lo mismo.  Lo que yo
har�a, dado lo que digo el primer p�rrafo, es escribir SIEMPRE al fichero
(por ejemplo) /var/log/tcpdump/tcpdump.log y dejar que logrotate se haga
cargo de generar los ficheros "antiguos" con los nombres adecuados.  �Para
qu� vas a reinventar la rueda?

As�, si -w no reescribe, te bastar� `tcpdump -w $LOG`, y si tcpdump
reescribe, env�alo todo a la salida est�ndar y redir�gelo desde all�:
`tcpdump -w - >> $LOG`

Luego, te bastar� crear el fichero adecuado para logrotate; algo como (esto
mantendr�a los logs de las �ltimas cuatro semanas en que el script estuvo
en funcionamiento; por supuesto, man logrotate de dar� m�s informaci�n)...
/var/log/tcpdump/tcpdump.log {
        rotate 4
        weekly
        compress
        delaycompress
        missingok
        notifempty
        postrotate
                /etc/init.d/miscriptparatcpdump restart
        endscript
}

Para saber c�mo escribir un script de inicio de servicio, basta con mirar el
de alguno sencillito que ya tengas instalado (es b�sicamente tu script, con
un switch para saber con qu� par�metro ha sido llamado).
-- 
SALUD,
Jes�
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads