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

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

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

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

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

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

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'}}
 
 

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

  1. 在windows环境中如何批量添加IP地址 and 求助 : 在CMD命令行中配置IP地址, 提示 : 未能配置DHCP服务, 接口可能已经断开, 系统找不到指定的文件.

    转载csdn: 在windows环境中如何批量添加IP地址_user_yuewu的博客-CSDN博客_windows批量添加ip 求助 : 在CMD命令行中配置IP地址, 提示 : 未能配置DHCP服 ...

  2. Linux网络管理1---(Linux配置IP地址,ifconfig、配置文件)

    1.Linux配置IP 地址 ifconfig命令临时配置IP 地址 ifconfig命令,最常用的功能是查看本机的网络的配置状态(当然也可以配置网络,不过是暂时性的),直接输入ifconfig命令就 ...

  3. linux配置IP地址

    1. ifconfig命令临时配置IP地址 ifconfig命令:查看与配置网络状态命令 如:  ifconfig eht0 192.168.0.200 netmask 255.255.255.0 # ...

  4. windows下脚本配置IP地址

    带着笔记本有时候在固定的地方工作,需要用到同一个的Ip地址.换个地方换个Ip,又要重新输一遍. 开始感觉这个过程很繁琐,因为是window工作环境,一开始想到了vbs脚本. 无意中发现了强大的nets ...

  5. JAVA获取客户端请求的当前网络ip地址(附:Nginx反向代理后获取客户端请求的真实IP)

    1. JAVA获取客户端请求的当前网络ip地址: /** * 获取客户端请求的当前网络ip * @param request * @return */ public static String get ...

  6. 【liunx】使用xshell连接虚拟机上的CentOS 7,使用xhell连接本地虚拟机上的Ubuntu, 获取本地虚拟机中CentOS 7的IP地址,获取本地虚拟机中Ubuntu 的IP地址,Ubuntu开启22端口

    注意,如果想用xshell去连接本地虚拟机中的linux系统,需要本地虚拟机中的系统是启动的才能连接!!!!! ============================================ ...

  7. Linux环境下如何配置IP地址、MAC地址

    Linux环境下如何配置IP地址.MAC地址 1.配置IP地址 进入配置IP地址路径,进行修改即可 cd /etc/network vim interface 加入以下内容: iface eth0 i ...

  8. centos7配置IP地址

    有关于centos7获取IP地址的方法主要有两种,1:动态获取ip:2:设置静态IP地址 在配置网络之前我们先要知道centos的网卡名称是什么,centos7不再使用ifconfig命令,可通过命令 ...

  9. CentOS安装后的第一步:配置IP地址

    有关于centos7获取IP地址的方法主要有两种,1:动态获取ip:2:设置静态IP地址 在配置网络之前我们先要知道centos的网卡名称是什么,centos7不再使用ifconfig命令,可通过命令 ...

  10. linux 手动配置ip地址方法

    手工配置静态的IP地址 也就是手工配置IP地址.子网掩码.网关和DNS. 设置方法如下: vi /etc/sysconfig/network-scripts/ifcfg-eth0 编辑本地网卡的配置文 ...

随机推荐

  1. 批量生成,本地推理,人工智能声音克隆框架PaddleSpeech本地批量克隆实践(Python3.10)

    云端炼丹固然是极好的,但不能否认的是,成本要比本地高得多,同时考虑到深度学习的训练相对于推理来说成本也更高,这主要是因为它需要大量的数据.计算资源和时间等资源,并且对超参数的调整也要求较高,更适合在云 ...

  2. 深入浅出MySQL事务

    Photo by Lukas Hartmann from Pexels 辞职这段时间以来看见了很多工作之外的东西,我认为这是值得的.同时也有时间和机会来好好整理所学所想,准备开启下一段旅途. 事务的定 ...

  3. 图书商城项目练习①管理后台Vue2/ElementUI

    本系列文章是为学习Vue的项目练习笔记,尽量详细记录一下一个完整项目的开发过程.面向初学者,本人也是初学者,搬砖技术还不成熟.项目在技术上前端为主,包含一些后端代码,从基础的数据库(Sqlite).到 ...

  4. Java 基础复习——StringBuffer 和 StringBuilder

    StringBuffer 和 StringBuilder StringBuffer 类 简介 java.lang.StringBuffer 代表可变的字符序列,可以对字符串内容进行增删 很多方法和 S ...

  5. Tauri-Admin通用后台管理系统|tauri+vue3+pinia桌面端后台EXE

    基于tauri+vite4+pinia2跨端后台管理系统应用实例TauriAdmin. tauri-admin 基于最新跨端技术 Tauri Rust webview2 整合 Vite4 构建桌面端通 ...

  6. GaussDB技术解读丨高级压缩

    本文作者|华为云数据库GaussDB首席架构师 冯柯 [背景介绍] 数据压缩与关系数据库的结合,早已不是一个新鲜的话题,当前我们已经看到了各种各样数据库压缩的产品和解决方案.对于GaussDB来说,在 ...

  7. MyBatis使用注解开发(及Sqlsession连接器的本质)

    使用注解开发 底层实现机制是反射和,动态代码.反射可以获得这个类的方法属性还可以创建对象,执行方法. 面向接口编程 之前学过,面向对象编程,也学习过接口.但是真正的开发中,很多时候我们会选择面向接口编 ...

  8. CSDN这么公然爬取(piao qie)cnblogs的文章,给钱了吗?

    在CSDN网站经常看到有博客转载cnblogs的文章,开始还以为是网友自行转载,后来才发现,这些所谓的转载应该都是机器爬取(piao qie)过去的.不知道cnblogs对此怎么看. 下面看看几个示例 ...

  9. python连接 Basler pylon相机遇到的问题

    今天使用下图程序去连接相机 以下是摄像头IP参数 电脑IP参数 在确认电脑能够ping通相机的情况下 以及检查专用软件能否访问之后 依然遇到了以下错误 经过了多番调试之后发现即使能够ping通,子网掩 ...

  10. vlunhub笔记(一)deathnote

    (一)查询靶机ip 通过 arp-scan -l 查询目标靶机ip,查询结果如下图红框所示. (二)信息收集 直接访问目标ip,发现无法访问,只返回网站域名. 网站返回域名,就将该域名添加进hosts ...