在Python中是否有一个函数可以确定一个主机名是域名还是IP(v4)地址?
注意,域名可能是这样的。alex.foo.bar.com
甚至 (我认为这是有效的): 1.2.3.com
.
IP和域名的一个直观区别是当你删除IP地址中的点时,结果会是一个数字。所以根据这个区别,我们可以检查输入的字符串是IP还是域名地址。我们删除输入字符串中的点,然后检查我们是否可以将结果转换为一个整数或者我们得到一个异常。
def is_ip(address):
return address.replace('.', '').isnumeric()
尽管在一些IP表示法中,如点阵十六进制(例如......),可以同时包含字母和数字。0xC0.0x00.0x02.0xEB
)的IP-Address中可以同时包含字母和数字。但是顶级域名(.org, .com, ...)从来不会包含数字。使用下面的函数在更多的情况下会比上面的函数更有效。
def is_ip(address):
return not address.split('.')[-1].isalpha()
我会用IPy来测试这个字符串是否是一个IP地址,如果不是--假设它是一个域名。例如::
from IPy import IP
def isIP(str):
try:
IP(str)
except ValueError:
return False
return True