Python中是否有一个函数可以确定主机名是域名还是IP(v4)地址?
请注意,域名可能看起来像:alex.foo.bar.com
,甚至可能是(我认为这是有效的):1.2.3.com
。
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地址中可以包含字母和数字。然而,顶级域名(.org,.com等)从不包含数字。使用下面的函数将适用于比上面的函数更多的情况。
def is_ip(address):
return not address.split('.')[-1].isalpha()
from IPy import IP
def isIP(str):
try:
IP(str)
except ValueError:
return False
return True
IP('0xC0.0x00.0x02.0xEB')
和IP('0300.0000.0002.0353')
。当然,这些很少使用,所以根据OP的需求可能是可以接受的。 - Michael Geary