Python 如何查找用户是否输入了主机名或IP地址?

Python 如何查找用户是否输入了主机名或IP地址?,python,Python,用户将输入主机名或IP地址。如果用户输入IP地址,我希望保持原样,但如果用户输入主机名,我希望使用以下方法将其转换为IP地址: def convert(hostname): command = subprocess.Popen(['host', hostname], stdout=subprocess.PIPE).communicate()[0] progress1 = re.findall(r'\d+.', command

用户将输入主机名或IP地址。如果用户输入IP地址,我希望保持原样,但如果用户输入主机名,我希望使用以下方法将其转换为IP地址:

def convert(hostname):
    command = subprocess.Popen(['host', hostname],
                           stdout=subprocess.PIPE).communicate()[0]

    progress1 = re.findall(r'\d+.', command)
    progress1 = ''.join(progress1)
    return progress1 

我该怎么做?

您可以使用正则表达式匹配输入,并测试它是否为ip地址

test = re.compile('\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b')
result = test.match(hostname)
if not result:
    # no match -> must be an hostname #
    convert(hostname)

该正则表达式允许使用无效的ip地址(如999.999.999.999),因此您可能需要对其进行一些调整,这只是一个简单的示例

关于验证ip地址,stackoverflow已经有很多问题

  • 我想问一下,既然可以在标准python库中进行通信,为什么还要与子流程通信

    我建议使用python的一些内置功能将主机名解析为IP地址

    可以通过导入并使用

    例如,使用链接1中的代码:

    import socket
    import re
    regex = re.compile(r"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$")
    result = regex.match(address)
    if not result:
        address = socket.gethostbyname(address)
    

    要获取ip,无论输入是ip还是主机名:

    ip4 = socket.gethostbyname(ip4_or_hostname)
    

    看看这个。我已经有一个方法来验证用户输入的IP地址是否有效。所以,你有验证方法和转换方法,你只需要将它们结合起来,那么真正的问题是什么?在发布这个问题之前,我没有转换方法。现在,我有了这个函数socket.gethostbyname(ip4_或_主机名),但这在我的代码中不起作用。请注意,它不包括IPv6地址。在Python3上,您可以使用socket.gethostbyname('555')#->0.0.2.43'@Sergey11g
    2*256+43
    is
    555
    。顶级域按字母顺序排列