Наличие IP-адреса - Python - PullRequest
       33

Наличие IP-адреса - Python

1 голос
/ 17 февраля 2011

Как проверить наличие IP-адреса в python?

Например, я не хочу менять IP-адрес моей системы на 192.168.112.226, статически переопределяя предоставленный адрес dhcp. Шлюз по умолчанию - 192.168.112.1. Но прежде я не хочу проверять, использует ли кто-нибудь 192.168.112.226, прежде чем присваивать себе.

Обычно это делается в командной строке из bash. Я проверяю с помощью ping 192.168.112.226. Если хост недоступен, я использую 'ifconfig' и 'route', чтобы назначить его себе.

Как автоматизировать это с помощью Python?

PS: Я предпочитаю python, чтобы я мог использовать python-notify, чтобы украсить вывод, будь то успех или неудача.

Ответы [ 3 ]

1 голос
/ 13 апреля 2011

Это так плохо во многих отношениях, что я даже не могу объяснить, насколько это ужасно.

Зачем тебе это?Не могли бы вы сказать нам об этом, и мы могли бы придумать гораздо лучший ответ, чем это безобразное «решение»?

Если у вас есть система Linux / Unix, вы можете заставить своего DHCP-клиента запрашивать DHCP-сервер, чтобы дать вам определенный IP-адрес, если сервер DHCP знает, что это бесплатно.Как это сделать, зависит от дистрибутива.

Есть две проблемы, которые, я вижу, вы создадите с помощью своего "решения".

  • Как написали некоторые другие, выМожно проверить, что IP-адрес сейчас «свободен», но машина, которой принадлежит этот IP-адрес, может запуститься сразу после вашего теста.Используя свой IP-адрес, который вы похитили.

  • Если DHCP-сервер не знает, что вы похитили IP-адрес, он может выдать его кому-то другому.

Что бы это ни сломало сеть для этого компьютера и вашего, вызвав много работы и, возможно, гнев на / на администратора сети.А ты этого не хочешь?

0 голосов
/ 17 февраля 2011

Вы можете использовать socket.gethostbyaddr (), чтобы узнать, используется ли IP-адрес или нет.

import sys, os, socket

# Stores the IP Address
ip_address = sys.argv[1]

try:
    socket.gethostbyaddr(ip_address)
    # If previous line doesn't throw exception, IP address is being used by someone
    print "No"
except socket.herror:
    # socket.gethostbyaddr() throws error, so IP is not being used at present
    # You can write os.system() and give it ifconfig and route commands as parameter.
    print "Yes"

Проблема с этим кодом в том, что method.gethostbyaddr () тратит много времени на генерирование socket.herror, если IP-адрес не используется в сети.

Если вы назовете этот скрипт как isIPAvailable.py , то он может быть вызван следующим образом:

python isIPAvailable.py 192.168.112.226
0 голосов
/ 17 февраля 2011

Хорошо, если вы хотите использовать bash, вы можете импортировать модуль os или модуль подпроцесса.

например:

import os
command = os.system('pint 192.168.112.226')
if command == 0: #Sucess
    #write os.system() and give it ifconfig and route commands as parameter.
else: print "This IP is used by another person in your network."

вы можете узнать больше о os.system и подпроцессе в python, импортировав их и написав, например, help(subprocess).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...