当前位置: 首页 > 面试题库 >

如何检查ip是否在Python网络中?

徐阳炎
2023-03-14
问题内容

给定一个IP地址(例如192.168.0.1),如何在Python中检查它是否在网络中(例如192.168.0.0/24)?

Python中是否有用于IP地址操作的通用工具?诸如主机查找,将IP地址添加到int,将网络地址与netmask转换为int之类的东西?希望可以在标准Python库中找到2.5。


问题答案:

本文显示您可以使用socketstruct模块完成此操作,而无需付出太多额外的努力。我在文章中添加了一些内容,如下所示:

import socket,struct

def makeMask(n):
    "return a mask of n bits as a long integer"
    return (2L<<n-1) - 1

def dottedQuadToNum(ip):
    "convert decimal dotted quad string to long integer"
    return struct.unpack('L',socket.inet_aton(ip))[0]

def networkMask(ip,bits):
    "Convert a network address to a long integer" 
    return dottedQuadToNum(ip) & makeMask(bits)

def addressInNetwork(ip,net):
   "Is an address in a network"
   return ip & net == net

address = dottedQuadToNum("192.168.1.1")
networka = networkMask("10.0.0.0",24)
networkb = networkMask("192.168.0.0",24)
print (address,networka,networkb)
print addressInNetwork(address,networka)
print addressInNetwork(address,networkb)

输出:

False
True

如果您只想要一个采用字符串的函数,则它将看起来像这样:

import socket,struct

def addressInNetwork(ip,net):
   "Is an address in a network"
   ipaddr = struct.unpack('L',socket.inet_aton(ip))[0]
   netaddr,bits = net.split('/')
   netmask = struct.unpack('L',socket.inet_aton(netaddr))[0] & ((2L<<int(bits)-1) - 1)
   return ipaddr & netmask == netmask


 类似资料:
  • 问题内容: 我需要确定给定的IP地址是否来自某个特殊的网络才能自动进行身份验证。 问题答案: Apache的百科全书网有出现,以满足您的需求。看起来您正在执行以下操作: 请注意,正如carson所指出的那样,Apache Commons Net有一个错误,使它在某些情况下无法提供正确的答案。卡森建议使用SVN版本来避免此错误。

  • 问题内容: 在Python中,有没有办法来检测是否给定 的网络接口 是 向上 ? 在我的脚本中,用户指定了一个网络接口,但在执行其他操作之前,我想确保该接口已启动并且已分配IP地址。 我在 Linux上 并且我是 root 。 问题答案: 如@Gabriel Samfira所建议,我使用。当IP地址与给定接口关联时,以下函数返回True。 文档在这里

  • 我有一个IP地址,我得到了另外两个IP地址,它们一起创建了一个IP范围。我想检查第一个IP地址是否在这个范围内。我怎么能在不使用循环的情况下在Python中找到它?

  • 问题内容: 我想检查某个网站是否存在,这就是我正在做的事情: 如果该页面不存在(错误402或其他任何错误),我可以在该行中做什么以确保正在读取的页面退出? 问题答案: 您可以使用HEAD请求而不是GET。它将仅下载标题,而不下载内容。然后,您可以从标题中检查响应状态。 或者你可以使用 或者你可以使用

  • 问题内容: 我想检查一个变量是否存在。现在我正在做这样的事情: 是否有其他方法无一例外? 问题答案: 要检查是否存在局部变量: 要检查是否存在全局变量: 要检查对象是否具有属性:

  • 我想检查IP地址是否在最小和最大IP地址的范围内。我怎样才能在德尔福做到这一点? 例如,我想做这样的事情: 127.0.0.1是范围的起始值,127.0.0.255是范围的结束值,127.0.0.15是将要检查的IP地址。