1

如何在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来美化输出。

4

3 回答 3

1

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

你为什么要这个?你能告诉我们,我们能想出一个比这个完全丑陋的“解决方案”更好的答案吗?

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

我看到您将使用“解决方案”创建两个问题。

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

  • 如果 DHCP 服务器不知道您已经绑架了一个 IP 地址,它可能会将其提供给其他人。

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

于 2011-04-12T21:50:30.257 回答
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."

你可以阅读更多关于 os.system 和 python 中的子进程的信息,help(subprocess)例如通过导入它们并编写它们。

于 2011-02-17T02:43:49.550 回答
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
于 2011-02-17T07:57:53.693 回答