Hier ist eine schnelle und schmutzige Lösung für dieses Problem in Python. Es macht Caching (einschließlich negatives Caching), aber kein Threading und ist nicht das schnellste, was Sie gesehen haben. Wenn Sie es als so etwas speichern rdns
, können Sie es so nennen:
zcat /var/log/some-file.gz | rdns
# ... or ...
rdns /var/log/some-file /var/log/some-other-file # ...
Wenn Sie es ausführen, werden die IP-Adressen mit ihren PTR-Einträgen versehen:
$ echo "74.125.132.147, 64.34.119.12." | rdns
74.125.132.147 (rdns: wb-in-f147.1e100.net), 64.34.119.12 (rdns: stackoverflow.com).
Und hier ist die Quelle:
#!/usr/bin/env python
import sys, re, socket
cache = dict()
def resolve(x):
key = x.group(0)
try:
return "%s (rdns: %s)" % (key, cache[key])
except KeyError:
try:
cache[key] = socket.gethostbyaddr(key)[0]
except socket.herror:
cache[key] = '?'
return "%s (rdns: %s)" % (key, cache[key])
for f in [open(x) for x in sys.argv[1:]] or [sys.stdin]:
for line in f:
sys.stdout.write(re.sub("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", resolve, line))
# End of file.
Bitte beachten Sie: Dies ist nicht ganz das, wonach Sie suchen (mit 'Standardwerkzeugen'). Aber es hilft Ihnen wahrscheinlich mehr als ein Hack, der jede IP-Adresse jedes Mal auflöst, wenn sie auftritt. Mit ein paar Zeilen mehr können Sie sogar festlegen, dass die Ergebnisse dauerhaft zwischengespeichert werden, was bei wiederholten Aufrufen hilfreich wäre.