timebandit said: > Håller på att försöka ta ut alla IP's fr¨ån auth.log och har lyckats > göra det med raden "Failed password for illegal" men inte med den andra > raden då dem är så lika i början :( > Är det någon som vet hur man kan ta ut allt efter ordet "from" till en > fil? Detta skulle underlätta för mig rätt mycket... > > > Feb 4 20:18:03 DZN sshd[8877]: Failed password for root from > 200.53.114.42 port 4134 ssh2 > Feb 4 20:18:08 DZN sshd[8881]: Failed password for illegal user test from > 200.53.114.42 port 4231 ssh2
De verktyg jag brukar använda för detta är sed, awk, cut, och ev. perl. Eftersom det är olika position på ip-adressen beroende på om användaren existerar eller inte ("illegal user" vs "root") så blir det lite mer komplicerat, annars kunde du använt grep 'Failed password' /var/log/auth.log | awk '{ print $10 }' Eller motsvarande med 'cut', | cut -f 12 -d ' ' Istället skulle jag använda sed, med (s)ubstitutefunktionen. grep ... | sed 's/.* from //' tar då enkelt bort allting i början på raden (ersätt det som matchar med tom sträng). Sortera detta sedan med | sort. För att få ut enbart ip-adressen så blir matchningen lite mer komplex; grep ... | sed 's/.* from \([^ ]*\) .*/\1/' här matchas adressen som en sträng utan mellanslag, och "sparas" med hjälp av paranteserna. Hela raden byts sedan ut mot detta machade uttryck med hjälp av bakåtreferensen \1, dvs adressen du vill ha ut. Sortera med | sort som tidigare, och eventuellt | uniq om du vill ha bort dubletter. Alltså: grep 'Failed password' /var/log/auth.log | sed 's/.* from \([^ ]*\) .*/\1/' | sort | uniq > /tmp/adresser.txt Vill du sedan få fram namnen på adresserna i fråga: for x in `cat /tmp/adresser.txt` ; do host $x | awk '{print $5}' ; done Mvh, Stefan Karlstads unixförening | KUF http://www.karlstadunix.nu | [EMAIL PROTECTED] -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]