通过snmp获取设备每个接口的配置IP地址,网段信息和VLAN接口号

这篇具有很好参考价值的文章主要介绍了通过snmp获取设备每个接口的配置IP地址,网段信息和VLAN接口号。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第一部分,观察通过snmp OID能获取的信息,对信息进行关联。

1、通过 snmp获取到接口IP地址和掩码信息,发现IP地址作为索引值;

2、每个IP地址的索引,都可以关联到接口的索引

3、每个接口索引,都可以通过snmp获取到接口的名称,

降这个3个数据进行关联,可以得到接口名称和网段信息的关联。

通过snmp获取设备每个接口的配置IP地址,网段信息和VLAN接口号

第二部分:通过代码实现。

get_vlan_network.py

import re,os,ipaddress


#get the interface Vlan value
def get_Vlanif_value(host,SNMP_community):


    vlan_dict = {}
    pattern = re.compile(r'(\d+)\s*=\s*STRING:\s*(\S+)')


    cmd = "snmpwalk -v 2c -c " + SNMP_community  +" "+ host + " ifname | grep Vlan" # 进行过滤,仅显示VLAN接口
    tmp = os.popen(cmd).readlines()
    # print("begin:",tmp)


    for i in tmp:
        matches = re.search(pattern, i)


        if matches:
            if_id = matches.group(1) #if_id: interface_snmp_ID
            Vlan_value = re.search(r'\d+', matches.group(2)).group()
            # print(if_id,Vlan_value)
            vlan_dict[if_id] = Vlan_value
   
    return vlan_dict



# VLAN = get_Vlan_value(host)
# print(VLAN)



# get the interface ip address and inetface snmp ID
def get_if_ip(host,SNMP_community):


    if_dict = {}
    pattern = r'(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) = INTEGER: (\d+)'


    cmd = "snmpwalk -v 2c -c " + SNMP_community +" "+ host + " .1.3.6.1.2.1.4.20.1.2"
    tmp = os.popen(cmd).readlines()


    for i in tmp:
        matches = re.search(pattern, i)


        if matches:
            ip_address = matches.group(1)
            if_id = matches.group(2)
            if_dict[ip_address] = if_id


    return if_dict


# IF_value = get_if_ip(host)
# print(IF_value)



def get_network_value(host,SNMP_community):
   
    network_dict = {}
    pattern = r'(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) = IpAddress: (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})'


    cmd = "snmpwalk -v 2c -c " + SNMP_community +" " + host + " .1.3.6.1.2.1.4.20.1.3 | grep -wv -e 255.255.255.255"
    tmp = os.popen(cmd).readlines()


    for i in tmp:
        matches = re.search(pattern, i)


        if matches:
            ip_address = matches.group(1)
            subnet_mask = matches.group(2)
            network_str = f"{ip_address}/{subnet_mask}"
            network = ipaddress.IPv4Network(network_str, strict=False)


            network_dict[ip_address] = network.with_prefixlen
   
    return network_dict



def get_network_subnet_Vlan(host,SNMP_community):
    # 将网段信息与VLAN ID进行关联


    Netowrk_Vlan ={}
    Vlan_info = get_Vlanif_value(host, SNMP_community)
    If_info =  get_if_ip(host, SNMP_community)
    Network_info = get_network_value(host, SNMP_community)
   
    # print(host,SNMP_community)


    for k ,v_net in Network_info.items():
        # print(k)
        if k in If_info:
            # Netowrk_Vlan[v_net]
            if If_info[k] in Vlan_info: #Vlan_info 进行了过滤,
                # print( v_net, Vlan_info[If_info[k]])
                Netowrk_Vlan[v_net]=Vlan_info[If_info[k]]


    return Netowrk_Vlan



if __name__ == '__main__':


   
    with open('host_snmp.txt', 'r', encoding='utf8') as f:
       
        for line in f:
            dict = {}
            host = line.split(" ")[0]
            snmp_community = (line.split(" ")[1]).strip()
             
            # print(host,snmp_community)
            #将所有数据放入字典
            dict[host] = get_network_subnet_Vlan(host,snmp_community)   
            print(dict)
 
将设备IP地址、snmp团体字保存再host_snmp.txt 文件中,每行一台设备,通过脚本遍历进行查询。
将结果保存为字典格式,便于后续对数据进行利用。
文件存储格式:
host_ip snmp_commuinty
 
数据数据格式:
{'host_ip':{network/mask':'vlan_id',network/mask':'vlan_id'}}
 
 

 文章来源地址https://www.toymoban.com/news/detail-706224.html

到了这里,关于通过snmp获取设备每个接口的配置IP地址,网段信息和VLAN接口号的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【wireshark】如何获取一个设备的IP地址

    开发中往往会出现无法知道设备正确的IP地址,从而无法连接到设备。 使用软件工具wireshark来获取设备IP地址。 可以实现不同网段捕获设备IP 1. 下载wireshark抓包程序 https://www.wireshark.org/download.html 以管理员的身份打开wireshark。(否则要点击一堆授权) 电脑用网线直连设备,然

    2024年01月21日
    浏览(30)
  • Java-通过IP获取真实地址

    最近写了一个日志系统,需要通过访问的 IP 地址来获取真实的地址,并且存到数据库中,我也是在网上看了一些文章,遂即整理了一下供大家参考。 这个是获取正确 IP 地址的方法,可以直接使用的。 通过以上方法你可以获取到访问者的 IP 地址,只有获取到了 IP 地址,才能

    2024年02月15日
    浏览(34)
  • vue2获取当前设备的 IP 地址以及位置信息

    data数据:

    2024年04月25日
    浏览(33)
  • java实现通过IP地址获取mac(物理地址)

    java实现通过IP地址获取mac(物理地址),只能获取到局域网的mac地址,具体代码如下:

    2024年02月16日
    浏览(39)
  • uniapp通过ip获取其地址、经纬度、详细地址:

    1.方法: 查看ip内容:http://pv.sohu.com/cityjson?ie=utf-8 【1】js获取ip地址: 【2】uni-app获取ip地址:(此方法会跨域报错=后续找到解决方法再补充) 【3】使用H5自带的获取位置 【4】使用百度地图获取位置 【5】微信js-sdk自带的API 2.案例: 3.最终效果:

    2024年02月12日
    浏览(34)
  • 通过IP获取准确地址,精确到县/区

    1、传入HttpServletRequest 2、通过HttpServletRequest获取IP 3、通过IP获取具体位置 4、具体效果 2023年2月15日更新: 确实部分ip只能获取到市,但是大部分还是能够获取到县/区的,这取决于ip,而不是api的问题 –我是“三七有脾气”,一个在互联网\\\"苟且偷生\\\"的Java程序员 “如果感觉博客

    2024年02月12日
    浏览(30)
  • 通过网线连接获取树莓派的ip地址

    如果你手头有一个显示屏, 那么直接把树莓派接上显示屏, 进行图像化界面的操作, 自然是最方便的方法了。 没有显示屏的话, 操作起来就麻烦一点, 但是别担心, 总是有办法可以解决的。 解决方法之一就是通过网线连接电脑的网口,再通过简单的设置就可以让树莓派

    2024年02月14日
    浏览(37)
  • C# 通过IP获取Mac地址(ARP)

    C# 通过IP获取Mac地址

    2024年02月03日
    浏览(36)
  • java获取真实的请求接口ip地址

    在Java程序中获取请求的真实IP地址可以使用以下方法: 使用javax.servlet.http.HttpServletRequest类中的getRemoteAddr()方法,这个方法可以获取请求的IP地址。 可以检查X-Forwarded-For,如果请求是通过代理服务器发送的,那么X-Forwarded-For将包含被代理客户端的IP地址。可以使用HttpServletReque

    2024年02月11日
    浏览(39)
  • Java通过SNMP4J管理设备

    一、Windows开启SNMP服务 这里以Windows11为例: 1、安装SNMP服务 (1)通过win+x快捷键打开电脑“设置”,然后在“应用”中选择”可选功能“。 (2)点击”可选功能“的”查看功能“ (3)找到并勾选“WMI SNMP 供应商\\\",再点击”下一步“。这里借用下百度的图,因为本人已经安装好。

    2024年02月14日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包