Mengekstrak data whois menggunakan python

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 :

Pyhton_whois

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!

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

This site uses Akismet to reduce spam. Learn how your comment data is processed.