如何在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来美化输出是成功还是失败。
答案 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