Kali ini saya dapat sedikit tantangan dari teman untuk mengekstrak data whois ke format file csv. Nah, untuk kali ini saya mau mengasah kemampuan logika saya yang mulai berkarat.
Kali ini saya menggunakan paket pythonwhois. Berikut cara instalasi paketnya:
pip install pythonwhois
Jika Anda menggunakan python 2.6 dan menemukan ImportError mengenai OrderedDict. Maka lakukan juga langkah dibawah:
pip install ordereddict
Lalu copy dan paste code dibawah dan simpan dengan nama check_whois.py.
#!/usr/bin/env python
import sys
import time
import pythonwhois
"""
Thanks Ryan Flores for the code
https://stackoverflow.com/questions/259634/splitting-a-persons-name-into-forename-and-surname
"""
def get_first_name(fullname):
firstname = ''
try:
firstname = fullname.split()[0]
except Exception as e:
print str(e)
return firstname
def get_last_name(fullname):
lastname = ''
try:
index=0
for part in fullname.split():
if index > 0:
if index > 1:
lastname += ' '
lastname += part
index += 1
except Exception as e:
print str(e)
return lastname
"""
End - Ryan Flores
"""
def is_domain_registered(domname):
try:
pythonwhois.get_whois(domname)['id']
except KeyError:
pass
return False
else:
return True
def is_domain_admin_exist(domname):
try:
pythonwhois.get_whois(domname)['contacts']['admin']['name']
except TypeError:
pass
return False
else:
return True
def get_details(domname):
"""
Sample output and error...
>>> print pythonwhois.get_whois('sadfafdsa.de')['contacts']['admin']['name']
Traceback (most recent call last):
File "", line 1, in
TypeError: 'NoneType' object is unsubscriptable
>>> print pythonwhois.get_whois('google.id')['contacts']['admin']['name']
Krishna Erlangga Zulkarnain
>>> print pythonwhois.get_whois('google.id')['contacts']['admin']['email']
dns-admin@google.com
>>> print pythonwhois.get_whois('google.id')['contacts']['admin']['country']
ID
>>> print pythonwhois.get_whois('google.id')['contacts']['admin']['postalcode']
10310
>>> print pythonwhois.get_whois('google.id')['contacts']['admin']['phone']
+62.2123584400
"""
domdetails = {}
domdetails['name'] = ''
domdetails['email'] = ''
domdetails['country'] = ''
domdetails['postalcode'] = ''
domdetails['phone'] = ''
if is_domain_admin_exist(domname):
domdetails = pythonwhois.get_whois(domname)['contacts']['admin']
"""
domdetails['name'] = pythonwhois.get_whois(domname)['contacts']['admin']['name']
domdetails['email'] = pythonwhois.get_whois(domname)['contacts']['admin']['email']
domdetails['country'] = pythonwhois.get_whois(domname)['contacts']['admin']['country']
domdetails['postalcode'] = pythonwhois.get_whois(domname)['contacts']['admin']['postalcode']
domdetails['phone'] = pythonwhois.get_whois(domname)['contacts']['admin']['phone']
"""
domdetails['whoisprotect'] = False
else:
#print '\n'.join(pythonwhois.get_whois('indrahartawan.biz')['raw'])
#get raw whois data
domdetails['whoisprotect'] = True
return domdetails
def get_detail(domnames):
arrDomain={}
for domname in domnames:
time.sleep(30)
if is_domain_registered(domname):
arrDomain = get_details(domname)
if arrDomain['whoisprotect']:
print "Domain %s has whois protection" % domname
else:
print "%s:%s,%s,%s,%s,%s,,,%s," % (domname,arrDomain['email'],get_first_name(arrDomain['name']),get_last_name(arrDomain['name']),arrDomain['country'],arrDomain['postalcode'
],arrDomain['phone'])
else:
print "Domain %s not registered" % domname
if __name__ == '__main__':
fname = 'domains.txt'
try:
fname = sys.argv[1]
except IndexError:
pass
domnames = (l.strip() for l in open(fname).readlines())
get_detail(domnames)
Tambahkan permisi execute agar file dapat jalankan di shell nanti. Jika diperhatikan diatas, ada kode yang saya ambil dari stackoverflow.com. Mohon sebagai “pengutip” yang baik, sertakan juga keterangan tersebut dikode Anda ya 🙂
Kemudian buat file domain.txt yang isinya adalah domain yang akan ada query (dipisahkan dengan newline). Misal exabytes.co.id atau indrahartawan.com :
indrahartawan.id
indrahartawan.com
exabytes.co.id
Kemudian jalan kan script dan akan terlihat hasil seperti berikut :
Disclaimer : Menggunakan script diatas untuk mengekstrak data dari list domain yang sangat banyak akan mengakibatkan IP publik yang digunakan diblok oleh whois server untuk ekstensi domain yang terkait. Silakan digunakan untuk alasan yang dibenarkan. Happy coding!