Berikut ini adalah solusi cepat dan kotor untuk ini dengan Python. Itu caching (termasuk caching negatif), tetapi tidak ada threading dan bukan hal tercepat yang pernah Anda lihat. Jika Anda menyimpannya sebagai sesuatu seperti rdns
, Anda dapat menyebutnya seperti ini:
zcat /var/log/some-file.gz | rdns
# ... or ...
rdns /var/log/some-file /var/log/some-other-file # ...
Menjalankannya akan membubuhi keterangan alamat IP dengan catatan PTR mereka di tempat:
$ 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).
Dan inilah sumbernya:
#!/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.
Harap dicatat: ini bukan yang Anda harapkan dari surat itu (menggunakan 'alat standar'). Tapi itu mungkin membantu Anda lebih dari peretasan yang menyelesaikan setiap alamat IP setiap kali itu ditemui. Dengan beberapa baris lagi, Anda bahkan dapat membuatnya cache hasilnya secara terus-menerus, yang akan membantu dengan pemanggilan berulang.