IP地址的可用性-Python

IP地址的可用性-Python,python,networking,ip-address,static-ip-address,Python,Networking,Ip Address,Static Ip Address,如何在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,这样我就可以使用pyth

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

好的,如果您想使用bash,可以导入操作系统模块或子流程模块

例如:

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中的子流程并编写
帮助(子流程)
来阅读更多关于它们的信息。

好的,如果您想使用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中的子进程并编写
帮助(子进程)
来阅读有关它们的更多信息。

您可以使用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地址,那么gethostbyaddr()方法会花费大量时间抛出socket.herror

如果将此脚本命名为isIPAvailable.py,则可以通过以下方式调用它:

python isIPAvailable.py 192.168.112.226

您可以使用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地址,那么gethostbyaddr()方法会花费大量时间抛出socket.herror

如果将此脚本命名为isIPAvailable.py,则可以通过以下方式调用它:

python isIPAvailable.py 192.168.112.226

这在很多方面都很糟糕,我甚至无法解释这有多糟糕

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

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

有两个问题,我看到你将创造你的“解决方案”

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

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


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

这在很多方面都很糟糕,我甚至无法解释这有多糟糕

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

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

有两个问题,我看到你将创造你的“解决方案”

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

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


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

这种方法有几个问题。一个是ping命令,因为它永远不会结束。您需要使用-c选项限制ping的数量
ping-c1192.168.112.226
。在Unix上,system命令不仅返回errorlevel,还返回一个包含状态和原因的压缩返回值。您必须这样解包:
rv=WEXITSTATUS(os.system(cmd))==0
某些计算机将禁用ICMP,即不会响应ping;某些计算机可能暂时脱机。这个问题的最佳解决方案是DHCP。@Bharat您是否尝试询问您的系统管理员是否可以在DHCP服务器中将永久IP分配给您的主机?这是可能的,但是系统管理员可以访问它。同样,这也没有多大意义,因为你想要一个永久的IP,但是如果你选择的那个已经被占用了,你必须自己改变它,无论如何。所以它不是永久性的。坦率地说,它也是一个坏的网络公民。一些系统管理员可能不得不花时间在某个点上跟踪你…@Bharathwaaj,我不鼓励这样做,因为其他海报已经说明了这些原因。但是,在Linux上,您可以ping主机,然后检查ARP以查看表中是否有条目。如果存在ARP条目,您可以确保其他人正在使用该IP地址,即使ping没有响应。对您感兴趣的IP地址尝试ping命令,然后使用
cat/proc/net/arp | tail--lines=+2 | awk'{print$1}'| grep^192.168.112.226$
(当然,使用您在
grep
命令中感兴趣的IP地址)。如果它打印出一个IP地址,它就在使用中。这个方法有几个问题。一个是ping命令,因为它永远不会结束。您需要使用-c选项限制ping的数量
ping-c1192.168.112.226
。在Unix上,system命令不仅返回errorlevel,还返回一个包含状态和原因的压缩返回值。您必须这样解包:
rv=WEXITSTATUS(os.system(cmd))==0
某些计算机将禁用ICMP,即不会响应ping;有些计算机可能暂时关闭