[Bash] [Potok] Jak przekazać adres IP jako parametr do geoiplookup


(Otak) #1

Cel: chcę znać geolokalizację adresu IP z którego wykonano logowanie do systemu korzystając z terminala.
Narzędzia: geoiplookup, lastb.

Próbowałem w potoku poniższej komendy, ale nie działa.

lastb | awk ‘{print $3}’ | geoiplookup


(marcin82) #2

Może geoiplookup po prostu nie obsługuje rury.

Spróbuj tak:
geoiplookup $(lastb | awk ‘{print $3}’)


(Otak) #3

Niestety nie działa - błąd poniżej.

awk: cmd. line:1: ‘{print
awk: cmd. line:1: ^ invalid char ‘▒’ in expression
Usage: geoiplookup [-h] [-?] [-d custom_dir] [-f custom_file] [-v] [-i] [-l] <ipaddress|hostname>


(marcin82) #4

A sama komenda działa poprawnie?
lastb | awk '{print $3}'

Albo na forum to tylko tak dziwnie wygląda - tam są pojedyncze apostrofy. Twoje wyglądają jakoś dziwnie.

PS
Nie wiem w jakim kontekście ma to być użyte, ale dobrze by było bardziej to usystematyzować:

#!/bin/bash

for IP in $(lastb | awk '{print $3}' | sort -u); do
geoiplookup $IP; done


(Otak) #5

lastb | awk ‘{print $3}’

wyświetla w odzielnych liniach IP, z wyjątkiem przedostatniej (pusta linia) oraz ostatniej (Dzień tygodnia) w formacie jak poniżej.

X.X.X.X
Y.Y.Y.Y

.

Sat

Nie chcę używać skryptu, preferuję jednolinijkowiec jak to możliwe.

`#!/bin/bash

for IP in $(lastb | awk ‘{print $3}’ | sort -u); do
geoiplookup $IP; done


(marcin82) #6

No to przecież jest :stuck_out_tongue_winking_eye:

for IP in $(lastb | awk '{print $3}' | sort -u); do geoiplookup $IP; done

PS
Jeśli chodzi o SSH to nie lepiej wyciągnąć IP z /var/log/auth.log (o ile jest rsyslog, syslog-ng?)


(Otak) #7

Tego szukałem - dzięki.


(marcin82) #8

Zrób sobie do tego relay server np. z użyciem Postfix i możesz pchać wyniki na maila:
for IP in $(lastb | awk '{print $3}' | sort -u); do geoiplookup $IP | mail -s "Logowanie z "$IP":" root; done