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 pythonwhoisJika 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.idKemudian 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!
