Python: проверить, если IP или DNS - PullRequest
4 голосов
/ 28 марта 2011

как можно проверить, содержит ли переменная DNS-имя или IP-адрес в python?

Ответы [ 4 ]

9 голосов
/ 28 марта 2011

Это будет работать.

import socket
host = "localhost"
if socket.gethostbyname(host) == host:
    print "It's an IP"
else:
    print "It's a host name"
7 голосов
/ 28 марта 2011

Вы можете использовать re модуль Python, чтобы проверить, является ли содержимое переменной IP-адресом.

Пример для IP-адреса:

import re

my_ip = "192.168.1.1"
is_valid = re.match("^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$", my_ip)

if is_valid:
    print "%s is a valid ip address" % my_ip

Пример для имени хоста:

import re

my_hostname = "testhostname"
is_valid = re.match("^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$", my_hostname)

if is_valid:
    print "%s is a valid hostname" % my_hostname
1 голос
/ 28 марта 2011

Я бы проверил ответ на этот вопрос SO:

Регулярное выражение для соответствия имени хоста DNS или IP-адресу?

Главное, чтобы этидва регулярных выражения и ИЛИ их вместе, чтобы получить желаемый результат.

0 голосов
/ 28 марта 2011
print 'ip' if s.split('.')[-1].isdigit() else 'domain name'

Это не проверяет, является ли один из них правильно сформированным.

...