#!/usr/bin/python
import socket

####################################
#				   #
#   Class queries a whois server   #
#				   #
#   Methods allow access to 	   #
#   data			   #
#				   #
#   Author: Andrew Waite	   #
#   Date:   2009-09-17		   #
#   Ver:    0.1			   #
#				   #
####################################
class whois:

	# Initilise object with required IP address
	#
	# Fixme: need to confirm valid IP address
	def __init__ ( self, ip ):
		self.ip = ip
		self.query()

	# Returns formated string containing results
	def out ( self ):
		str = "Whois information for " + self.getIP() + "\n"
		str+= "Origin:\t\t" + self.getOrigin() + "\n"
		str+= "Inetnum:\t" + self.getInetnum() + "\n"
		str+= "Netname:\t" + self.getNetname() + "\n"
		str+= "descr:\t\t" + self.getDescription() + "\n"
		str+= "Country:\t" + self.getCountry() + "\n"
		return str

	# Queries remote Whois server and parses results
	# Adds resultant info as object attributes
	def query ( self ):
		self.server = '193.0.6.135'
		self.port = 43
		s = socket.socket( socket.AF_INET, socket.SOCK_STREAM)
		s.connect( ( self.server, self.port ) )

		#recv service header from Whois server
		s.recv(1024)

		#send IP address to query
		s.send( self.ip + '\r\n' )
		
		#Handle multi part response
		response = ''
		while 1:
			buf = s.recv(2048)
			if not buf:
				break
			response += buf

		#split response by line
		lines = response.split('\n')

		#pull required fields from response
		for line in lines:
			attrib = line.split(':')
			
			#origin - AS number
			if attrib[0] == "origin":
				self.origin = attrib[1].strip()

			#inetnum - 
			if attrib[0] == "inetnum":
				self.inetnum = attrib[1].strip()

			#netname -
			if attrib[0] == "netname":
				self.netname = attrib[1].strip()

			#descr -
			if attrib[0] == "descr":
				self.descr = attrib[1].strip()

			#country - 
			if attrib[0] == "country":
				self.country = attrib[1].strip()

	def getIP( self ):
		return self.ip

	def getOrigin( self ):
		return self.origin

	def getInetnum( self ):
		return self.inetnum

	def getNetname( self ):
		return self.netname

	def getDescription( self ):
		return self.descr

	def getCountry( self ):
		return self.country

#/end class def

