Forum Programmation.shell pb execution d'un script lire ligne a ligne plus whois des resultats

Posté par .
Tags : aucun
1
30
jan.
2009
Bonjour à tous ... j'ai un pti soucis ... je sais le bash s'apprends ...suis là pour ca ...
Aprés plusieurs essaies je bloque ...
D'avance merci de votre aide :

But du script : un script qui lit le syslog et me renvoie des whois des IP sources, ligne par ligne. ex 99.99.99.99 = usa

voici les script :


#!/bin/sh

var1=$(sudo cat /var/log/syslog |grep 'UFW BLOCK INPUT]' |awk -F" " '{print $14}' |grep -v '192.168' |sort |uniq -c|sort -rn > ~/whois.txt )
var2=$(cat ~/whois.txt |awk -F"=" '{print $2}' |awk )
#varfin=$(echo $var2 |grep .)
fonct1 () {
$var1
}
fonct1
#fonct2 () {
while [ "$var2" >="1" ]
do
echo $var2
whois $var2
done



Je le poste pour vous donner ma base ...
ca marche pas ...grrrr Il me retourne ceci à l'execution :

#./monbash.sh
205.237.37.32 82.243.240.165 82.230.110.240 92.132.205.30 61.229.76.230 82.233.173.243 60.222.224.134 90.9.88.82 60.222.224.133 60.222.224.132 212.28.225.5 202.97.238.238 194.225.233.248 118.165.65.27
Aucun serveur whois n'est connu pour ce type d'objet.

en boucle ...GrRrR
Voila ... donc merci de m'aider je bloque sur le renvoie des variables une par une en face du whois :/ ( j'me debrouillerai pour 'greper' la ligne du pays)
  • # rep

    Posté par . Évalué à 1.

    correction ...mais bon marche pas :/
    var2=$(cat ~/whois.txt |awk -F"=" '{print $2}' )
  • # lecture syslog + whois

    Posté par . Évalué à 4.

    #!/bin/bash

    for i in $(sed -n '/UFW/s/.*SRC=\([^ ]*\) .*/\1/p' /var/log/syslog); do
    if [ ! "${i/192.168.*/local}" = "local" ]; then
    echo $i
    whois $i
    fi
    done


    Cela devrait fonctionner. Si ce n'est pas le cas, fait nous parvenir quelques lignes d'exemples de ton syslog.
    • [^] # Re: lecture syslog + whois

      Posté par . Évalué à 2.

      Merci pour ton script NBaH , il marche super bien ... il faut rajouter une grep -i country pour que le whois ne retourne que la ligne du pays ..


      en tous cas j' vais le matter de trés prés ton script car il est plus simple que celui que je venais de faire ... a force j'ai trouvé

      Pour info le script:
      #!/bin/sh

      var1=$(sudo cat /var/log/syslog |grep 'UFW BLOCK INPUT]' |awk -F" " '{print $14}' |grep -v '192.168' |sort |uniq -c|sort -rn > ~/whois.txt )
      fonct1 () {
      $var1
      }
      fonct1
      cat ~/whois.txt |while read ligne
      do
      fonct2 () {
      var2=$(echo $ligne | awk -F"=" '{print $2}')
      }
      echo $ligne && fonct2 && whois $var2 |grep -i 'country:' |head -1
      echo "------------------"
      done
      • [^] # Re: lecture syslog + whois

        Posté par (page perso) . Évalué à 3.

        Le code de NBaH peut encore être allégé en intégrant le if au script Sed ;
        par ailleurs, il vaut mieux remplacer le sous-shell par un pipe :sed -ne '/UFW /{
          /SRC=192\.168/d
          s/.*SRC=\([^ ]*\) .*/\1/p' /var/log/syslog |\
        while read ip ; do
          echo "$ip"
          whois "$ip" | grep -m1 -i 'country:'
        done

        (en simplifiant ton grep | head -1).

        De même, ton cat | grep | awk | grep -v peut être raccourci :
        </var/log/syslog awk '/UFW BLOCK INPUT/ && !/SRC=192\.168/{print $14}'
        (sans -F, vérifie le $14).

        On peut aussi intégrer sort | uniq -c au script Awk...

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.