确定主机在Python中是域名还是IP

确定主机在Python中是域名还是IP,python,ip-address,urllib2,hostname,url-parsing,Python,Ip Address,Urllib2,Hostname,Url Parsing,Python中是否有函数确定主机名是域名还是IP(v4)地址 注意,域名可能看起来像:alex.foo.bar.com或者甚至(我认为这是有效的):1.2.3.com我会使用IPy测试字符串是否是IP地址,如果不是-假设它是域名。例如: from IPy import IP def isIP(str): try: IP(str) except ValueError: return False return True IP和域地址之间的视觉

Python中是否有函数确定主机名是域名还是IP(v4)地址


注意,域名可能看起来像:
alex.foo.bar.com
或者甚至(我认为这是有效的):
1.2.3.com

我会使用IPy测试字符串是否是IP地址,如果不是-假设它是域名。例如:

from IPy import IP
def isIP(str):
    try:
        IP(str)
    except ValueError:
        return False
    return True

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()

当您说“是主机名”时,可能会重复您的意思是。。。“是严格格式的有效主机名”或“是公共DNS中存在的主机名”或“是没有空格的字符串而不是ip地址”?我想知道字符串是否“是严格格式的有效主机名”。我想在不访问DNS的情况下执行此检查。请注意,IPy拒绝某些有效的。点十六进制和点八进制都失败:
IP('0xC0.0x00.0x02.0xEB')
IP('0300.0000.0002.0353')
。当然,这些是不常见的,所以根据OP的需要,它可能还可以。