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

时间:2012-12-20 10:26:05

标签: python

用户将输入主机名或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 

我该怎么做?

3 个答案:

答案 0 :(得分:5)

获取ip是输入是ip还是主机名:

ip4 = socket.gethostbyname(ip4_or_hostname)

答案 1 :(得分:1)

您可以使用正则表达式来匹配您的输入并测试它是否是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),所以你可能想稍微调整一下,这只是一个简单的例子

答案 2 :(得分:0)

stackoverflow上有很多关于验证IP地址的问题。

  1. IP Address validation in python
  2. Validating IP Addresses in python
  3. 我想问一下,当您可以在标准python库中执行此操作时,为什么要与子进程通信。

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

    您可以通过导入和使用python sockets library

    来执行此操作

    例如,使用链接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)