bash programmeringshjälp?

2005-03-02 tråd timebandit
Hallå igen

Säkert inte rätt ställe å fråga detta på men men...


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


Tack på förhand,



Re: bash programmeringshjälp?

2005-03-02 tråd Martin Leben
timebandit wrote:
Ä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
Hej!
Jag antar att nedanstående är ungefär vad du är ute efter.
# grep Failed password for /var/log/auth.log | sed 's/ from /#/' | cut 
-d # -f 2 | cut -d   -f1 | sort -u

mvh
/Martin Leben
--
Remove dashes and numbers (if any) to get my real email address.
I subscribe to the mailing lists i write to.
Please don't CC me on replies.
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]


Re: bash programmeringshjälp?

2005-03-02 tråd Torbjörn Svensson
Quoting timebandit [EMAIL PROTECTED]:
 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...

Denna hjälper nog dig att lösa problemet:

echo Feb  4 20:18:03 DZN sshd[8877]: Failed password for root from
200.53.114.42 port 4134 ssh2 | rev | awk '{print $4}' | rev

Dvs, du använder det sista som står efter echo biten.
Hoppas det hjälper dig :-)

För mer info, kolla på dessa manualerna:
man rev
man awk

Hälsningar,
--
  .''`. Torbjörn Svensson, azoff (at) se (dot) linux (dot) org
 : :' : 7EB9 2DC5 61AE DAB5 7099  BAC6 798E E39A DBDB 0CFD
 `. `'  http://azoff.homeip.net/ | http://azoff.tty0.org
   `--  http://www.se.linux.org


This message was sent using IMP, the Internet Messaging Program.


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: bash programmeringshjälp?

2005-03-02 tråd Stefan Alfredsson
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]