blob: 858f240cd7c414c0b610181d29272bae9c995d66 [file] [log] [blame]
#!/usr/bin/python
# Copyright 2012 Google Inc. All Rights Reserved.
"""This class defines IP address related operations."""
__author__ = 'Lin Xue (linxue@google.com)'
"""This file defines IP address related oprations.
This includes IPv4, IPv6 check up
"""
import re
import socket
class IPADDR(object):
"""IP address class
input: a string
fuctions: check if the given string has something like ip address
check if the ipv4 address is valid or not
check if the given string is valid ipv4 address
check if the ipv6 address is valid or not
"""
def __init__(self, ip_address):
self.ipaddr = ip_address
def is_like_ipv4_address(self):
"""To check if the given string has something like
ip address, eg. 4 numbers with 3 .
return the ip address in the string if yes,
if there is no, return None
"""
ipaddr_re = re.search(r'[0-9]+(?:\.[0-9]+){3}', self.ipaddr)
if ipaddr_re is not None:
ipaddr = ipaddr_re.group()
return ipaddr
else:
return None
def is_valid_ipv4_address(self):
"""To check if the ipv4 address is valid or not."""
try:
socket.inet_aton(self.ipaddr)
except socket.error: # not a valid ipv4 address
print 'Error: ' + self.ipaddr + ' is an invalid IPv4 address'
return False
else:
if self.ipaddr.count('.') == 3:
return True
else:
print 'Error: ' + self.ipaddr + ' is an invalid IPv4 address'
return False
def is_ipv4_address(self):
"""To check if the given string is valid ipv4 address."""
return self.is_like_ipv4_address() and self.is_valid_ipv4_address()
def is_valid_ipv6_address(self):
"""To check if the ipv6 address is valid or not."""
try:
socket.inet_pton(socket.AF_INET6, self.ipaddr)
except socket.error: # not a valid ipv6 address
print 'Error: ' + self.ipaddr + ' is an invalid IPv6 address'
return False
else:
if self.ipaddr.count(':') == 7:
return True
else:
print 'Error: ' + self.ipaddr + ' is an invalid IPv6 address'
return False
# End of IPADDR class