IP地址的可用性 - Python
如何在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 个回答
好的,如果你想使用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)
来获取帮助。
你可以使用 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
这真的是太糟糕了,糟糕到我都不知道该怎么形容。
你为什么想要这样做呢?能不能告诉我们一下,这样我们可以给你一个比这个完全丑陋的“解决方案”更好的答案?
如果你使用的是Linux或Unix系统,你可以让你的DHCP客户端请求DHCP服务器给你一个特定的IP地址,前提是DHCP服务器知道这个地址是空闲的。具体怎么做要看你用的是什么版本。
我看到你这个“解决方案”会带来两个问题。
正如其他人所说的,你可以检查一下这个IP现在是否“空闲”,但拥有这个IP地址的机器可能会在你测试后立刻启动。这样你就“绑架”了它的IP地址。
如果DHCP服务器不知道你已经“绑架”了这个IP地址,它可能会把这个地址分配给其他人。
无论如何,这样做会导致你和那台电脑的网络都出问题,给网络管理员带来很多麻烦,甚至可能让他们生气。你可不想这样,对吧?