IP地址的可用性 - Python

1 投票
3 回答
5144 浏览
提问于 2025-04-16 11:58

如何在Python中检查一个IP地址是否可用?

比如,我想把我电脑的IP地址改成192.168.112.226,覆盖掉自动分配的地址。默认的网关是192.168.112.1。不过在我自己使用这个地址之前,我想先检查一下,看看有没有其他设备在用192.168.112.226。

通常我会在命令行中用bash来做这件事。我会用ping命令去检查192.168.112.226。如果这个地址无法访问,我就会用'ifconfig'和'route'命令把它分配给自己。

那么,如何用Python来自动化这个过程呢?

另外,我比较喜欢用Python,因为这样我可以用python-notify来美化输出,无论是成功还是失败。

3 个回答

0

好的,如果你想使用bash(一个命令行工具),你可以导入os模块或者subprocess模块。

比如说:

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和subprocess的信息,比如写上help(subprocess)来获取帮助。

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"

不过,这段代码有个问题,就是 method.gethostbyaddr() 如果网络上没有使用这个 IP 地址,会花很长时间才会报错 socket.herror。

如果你把这个脚本命名为 isIPAvailable.py,那么你可以这样调用它:

python isIPAvailable.py 192.168.112.226
1

这真的是太糟糕了,糟糕到我都不知道该怎么形容。

你为什么想要这样做呢?能不能告诉我们一下,这样我们可以给你一个比这个完全丑陋的“解决方案”更好的答案?

如果你使用的是Linux或Unix系统,你可以让你的DHCP客户端请求DHCP服务器给你一个特定的IP地址,前提是DHCP服务器知道这个地址是空闲的。具体怎么做要看你用的是什么版本。

我看到你这个“解决方案”会带来两个问题。

  • 正如其他人所说的,你可以检查一下这个IP现在是否“空闲”,但拥有这个IP地址的机器可能会在你测试后立刻启动。这样你就“绑架”了它的IP地址。

  • 如果DHCP服务器不知道你已经“绑架”了这个IP地址,它可能会把这个地址分配给其他人。

无论如何,这样做会导致你和那台电脑的网络都出问题,给网络管理员带来很多麻烦,甚至可能让他们生气。你可不想这样,对吧?

撰写回答