2009/7/3 Daniel Fernando Coimbra <ruf...@gmail.com>: > Olá pessoal, estou fazendo um pequeno script para monitorar as entradas > de log feitas pelo iptables. Quando executo o script para testar nos > logs já existentes (removendo o "tail" e complementando o "grep" com o > caminho do arquivo) a execução é perfeita e me dá as informações como > esperado. No entanto, ao executá-lo como segue abaixo, para que a > monitoração seja em "tempo real" não há qualquer saída, embora os logs > estejam sendo modificados. > > Não há qualquer aviso de erros na execução e não faço idéia do que pode > estar errado! Os logs estão sendo gerados e contém as strings "Firewall > - ${INFO}:", suspeito que o meu uso do "tail -f" esteja errado mas não > consegui descobrir qual seria a correção... > > Agradeço muito se puderem me auxiliar. > > > (o arquivo color-definitions.sh contém apenas definição de variáveis com > strings de cores e por isso não o inclui) > > ---- monitor.sh ---- > > source color-definitions.sh > U='\e[4m' > > sudo echo "Iniciando Monitor... `date`" || exit 1 > > sudo tail -n 0 --follow=name /var/log/syslog | grep Firewall | while > read Mon Day Time Host lixo lixo lixo LOGNAME DEV_IN DEV_OUT MAC SRC DST > LEN TOS PREC TTL ID LINELOG > do > TIMELINE=" @$Time-$Day/$Mon" > PROTO=`echo $LINELOG | cut -d= -f2 | cut -d' ' -f1` > S=`echo $SRC | cut -d= -f2` > SP=`echo $LINELOG | cut -d= -f3 | cut -d' ' -f1` > D=`echo $DST | cut -d= -f2 | cut -d' ' -f1` > DP=`echo $LINELOG | cut -d= -f4 | cut -d' ' -f1` > LINE=$(echo $LINELOG | cut -d= -f6- | cut -d' ' -f2 | tr -d ' ') > case $LOGNAME in > 'PING:') > if [ "$S" == "192.168.0.1" ] > then > C=$LGREEN > else > C=$YELLOW > fi > echo -e "${RED}PING${NORM} from ${C}${S}${NORM}$TIMELINE" > ;; > 'SPOOFING:') > echo -e "${YELLOW}${U}SPOOFING${NORM} $S:$SP:$DP:D > ${LINE}$TIMELINE" > ;; > 'INPUT:') > if [ "`echo $D | cut -d. -f4`" == "255" ] > then > if [ "$S" == "0.0.0.0" ] > then > S=`echo $MAC | cut -d: -f7-` > fi > MSG="${BROWN}BROADCAST${NORM} from ${U}${S}" > else > MSG="${BLUE}INPUT${NORM} from ${U}${S}" > fi > echo -e "${MSG}${NORM} ${PROTO} > ${YELLOW}${SP}${NORM}:${YELLOW}${DP}${NORM} ${LINE}$TIMELINE" > ;; > *) > echo INVALID ENTRY $LINE $TIMELINE > esac > done & > > sudo tail -n 0 --follow=name /var/log/messages | grep Firewall | grep -v > sudo | while read Mon Day Time Host lixo lixo lixo LOGNAME DEV_IN > DEV_OUT MAC SRC DST LEN TOS PREC TTL ID LINELOG > do > PROTO=`echo $LINELOG | cut -d= -f2 | cut -d' ' -f1` > S=`echo $SRC | cut -d= -f2` > SP=`echo $LINELOG | cut -d= -f3 | cut -d' ' -f1` > D=`echo $DST | cut -d= -f2` > DP=`echo $LINELOG | cut -d= -f4 | cut -d' ' -f1` > TIMELINE=" @$Time-$Day/$Mon" > LINE=$(echo $LINELOG | cut -d= -f6- | cut -d' ' -f2 | tr -d ' ') > > if [ "`echo $D | cut -d. -f4`" == "255" ] > then > MSG="${BROWN}BROADCAST${NORM}" > if [ "$S" == "0.0.0.0" ] > then > S=`echo $MAC | cut -d: -f7-` > fi > MSG="${MSG} from ${U}${S}" > else > case $LOGNAME in > 'LOCALINPUT:') > MSG="LOCAL from ${U}${S}" > ;; > 'SERVICES:') > MSG="${LGREEN}SERVICES${NORM} from ${U}${S}" > ;; > *) > esac > fi > > echo -e "${MSG}${NORM} ${PROTO} > ${YELLOW}${SP}${NORM}:${YELLOW}${DP}${NORM} ${LINE}$TIMELINE" > done & > > while : > do > sleep 6h > echo ---- `date` ---- > done > > ---- monitor.sh ---- >
http://br.groups.yahoo.com/group/shell-script/message/15208 -- Fabiano Caixeta Duarte Especialista em Redes de Computadores Linux User #195299 Ribeirão Preto - SP