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 NicolasLinuxfr . Évalué à 1.
var2=$(cat ~/whois.txt |awk -F"=" '{print $2}' )
# lecture syslog + whois
Posté par NBaH . É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 NicolasLinuxfr . Évalué à 2.
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 Jacques L'helgoualc'h (site web personnel) . Évalué à 3.
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...
[^] # Re: Aargh, fermer l'accolade... :/
Posté par Jacques L'helgoualc'h (site web personnel) . Évalué à 2.
sed -ne '/UFW /{
/SRC=192\.168/d
s/.*SRC=\([^ ]*\) .*/\1/p
}' /var/log/syslog |\
...
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.