IP地址的可用性 - Python

时间:2011-02-17 02:33:24

标签: python networking ip-address static-ip-address

如何在python中检查IP地址的可用性?

例如,我不想将系统的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 个答案:

答案 0 :(得分:1)

这在很多方面都很糟糕,我甚至无法解释这是多么糟糕。

你为什么要这个?能不能告诉我们,我们可以提出一个比这完全“解决”更好的答案吗?

如果您有Linux / Unix系统,如果DHCP服务器知道它是免费的,您可以让DHCP客户端请求DHCP服务器为您提供特定的IP地址。如何做到这一点取决于分布。

我发现有两个问题你会用“sollution”创建。

  • 正如其他人写的那样,您现在可以检查IP是否“免费”,但拥有该IP地址的计算机可能会在您的测试后立即启动。使用它的IP地址,你被绑架了。

  • 如果DHCP服务器不知道您绑架了IP地址,则可以将其发送给其他人。

无论它会破坏该计算机和您的网络,为网络管理员带来大量工作和可能的愤怒。而且你不想那样,是吗?

答案 1 :(得分:0)

好的,如果你想使用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."

您可以通过导入它们并编写help(subprocess)来了解有关python中os.system和subprocess的更多信息。

答案 2 :(得分:0)

您可以使用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"

此代码的问题是如果网络上没有使用IP地址,method.gethostbyaddr()会花费大量时间抛出socket.herror。

如果您将此脚本命名为 isIPAvailable.py ,则可以通过以下方式调用该脚本:

python isIPAvailable.py 192.168.112.226