2017-02-20 35 views
-2
import socket 

def is_valid_ipv4_address(address): 
    try: 
     socket.inet_pton(socket.AF_INET, address) 
    except AttributeError: # no inet_pton here, sorry 
     try: 
      socket.inet_pton() 
     except socket.error: 
      return False 
     return address.count('.') == 3 
    except socket.error: # not a valid address 
     return False 

    return True 

def is_valid_ipv6_address(address): 
    try: 
     socket.inet_pton(socket.AF_INET6, address) 
    except AttributeError: # no inet_pton here, sorry 
     try: 
      socket.inet_pton() 
     except socket.error: 
      return False 
     return address.count('.') == 3 
    except socket.error: # not a valid address 
     return False 

    return True 

def checkStatus(): 
    websiteToCheck = input("Enter IP: ").replace(" ", "") 
    if is_valid_ipv4_address(websiteToCheck) or is_valid_ipv6_address(websiteToCheck): 
     print("Valid") 
    elif len(websiteToCheck) == 0: 
     print("Please input something") 
    else: 
     print("Invalid") 

checkStatus() 

Это дает ожидаемый результат, если это не действует, например, когда число превышает 255, когда входной содержит буквы алфавита и т. д. Однако допустим, что я вводил 10.111.111.111 в качестве своего IP. Он печатает «Valid», хотя, если вы попытаетесь получить доступ к этому IP прямо сейчас, вы потерпите неудачу.Мой IP шашка проверка, если IP технически действительно, я хочу, чтобы проверить, если это онлайн

Как проверить, включен ли IP-адрес, а не является ли он действительным?

+0

Define «онлайн». Нужно ли предлагать общедоступный сервер/порт, чтобы считать «онлайн» ...? Если да, то какой? – deceze

+0

@deceze Лицо, выполняющее программу, должно иметь возможность ввести этот IP-адрес в свой браузер и иметь что-то другое, кроме загрузки 404. –

+0

404 уже указывает на работающий HTTP-сервер, который очень «онлайн». Итак, вы ожидаете, что IP-сервер будет запускать HTTP-сервер? Или HTTP-сервер, который будет обслуживать ответ 2xx? – deceze

ответ

1

Вы не можете узнать, доступен ли доступ к IP, просто взглянув на него. Вам нужно будет попытаться подключиться или выполнить ping. Последний один довольно легко, хотя и не 100% точные (не все IP-адреса реагируют на пинг)

Быстрый способ:

import os 
response = os.system("ping -c 1 " + address) 

#check the response... 
if response == 0: 
    return True 
else: 
    return False 
+0

Возможность отвечать на ping не означает, что на данном IP-адресе фактически работает веб-сервер на порту 80. – tripleee

+0

@tripleee: true , но он отвечает на вопрос «Как проверить, включен ли IP-адрес», не так ли? Часть веб-сервера появилась позже. – Burkhard

+0

Это, к сожалению, повторяющаяся проблема с этими плохо заданными вопросами для начинающих. В любом случае, есть несколько дубликатов с хорошими ответами на оба вопроса. – tripleee