如何在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来美化输出。
发布于 2011-04-13 05:50:30
这在很多方面都很糟糕,我甚至无法解释这有多糟糕。
你为什么想要这个?你能告诉我们吗,我们可以想出一个比这个令人难以置信的“解决方案”更好的答案?
如果你有一个Linux/Unix系统,你可以让你的DHCP客户机请求DHCP服务器给你一个特定的IP地址,如果DHCP服务器知道它是空闲的。如何做到这一点取决于发行版。
我认为你的“解决方案”会带来两个问题。
无论它会破坏那台计算机和你的网络,产生大量的工作,并且可能会激怒网络管理员。你不想这样,对吧?
发布于 2011-02-17 10:43:50
好的,如果你想使用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."您可以在python中阅读有关os.system和子流程的更多信息,例如,通过导入它们并编写help(subprocess)。
发布于 2011-02-17 15:57:54
您可以使用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.226https://stackoverflow.com/questions/5024478
复制相似问题