Im Zeitalter der globalen Vernetzung möchte ich hin und wieder wissen, welche Verbindungen mein Server mit der Außenwelt hält. Klassisch nehme ich dafür ein netstat und pipe es durch ein paar Filter. Am Ende habe ich eine Ausgabe, die mir die Anzahl der Verbindungen zu einer IP Adresse anzeigt.
nscount () {
netstat -ntu | awk '{print $5}' | cut -d: -f1 -s | sort | uniq -c | sort -n
}
1 74.125.x.xxx
2 31.13.x.xxx
2 68.232.xx.xxx
3 54.192.x.xxx
7 54.230.x.xxx
10 192.168.x.xxx
Möchte man noch wissen zu wem die IP Adresse gehört, bemüht man noch whois. Wer schon mal ein whois weg gefeuert hat, kennt die langen Ausgaben. Also schrumpfen wir die Ausgabe auf die benötigte Information zusammen.
whois_short () {
name=$(whois "$*" | grep -E "Organization|owner|org-name|descr" | cut -d: -f2 | tr "\n" "%" | cut -d% -f1)
echo "$name" | sed -e 's/^[[:space:]]*//'
}
Damit nicht ständig wiederholende whois Anfragen gesendet werden, habe ich mich für ein lokales caching entschieden. Die Datei kann auch gleich von Hand mit den lokalen IP’s gefüttert werden.
cachefile="$HOME/.ip_cache"
getfromcache () {
if [ ! -f "$cachefile" ] ; then
return
fi
while read -r line
do
cache=$(echo $line | cut -d= -f1)
if [[ $cache == $* ]] ; then
echo $(echo $line | cut -d= -f2)
break
fi
done < "$cachefile"
}
Und um den lokalen Cache ggf. automatisch zu fĂĽllen.
whois_name () {
awk '{print $2}' "$*" | while IFS= read -r ip ; do
match=$(getfromcache "$ip")
if [ -z $match ] ; then
match=$(whois_short "$ip")
echo "$ip=$match" >> $cachefile
fi
printf "%-20s %s %s\n" $ip $match
done
}
Der Call der die einzelnen Funktionen kombiniert. Mir ist bewußt, das der Umweg über eine temporäre Datei wenig Effizient ist.
nsinfo () {
tmpfile="$HOME/.whois.tmp"
nscount > "$tmpfile"
whois_name "$tmpfile"
rm "$tmpfile"
}
Die Terminal Ausgabe sieht dann wie folgt aus.
69.164.x.xxx Limelight Networks, Inc. (LLNW)
74.125.x.xxx Google Inc. (GOGL)
54.192.x.xxx Amazon Technologies Inc. (AT-88-Z)
31.13.x.xxx Facebook
54.192.x.xxx Amazon Technologies Inc. (AT-88-Z)
192.168.x.xxx LAN MBP
54.230.x.xxx Amazon.com, Inc. (AMAZO-4)