通过snmp获取设备每个接口的配置IP地址,网段信息和VLAN接口号
第一部分,观察通过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)
通过snmp获取设备每个接口的配置IP地址,网段信息和VLAN接口号的更多相关文章
- 在windows环境中如何批量添加IP地址 and 求助 : 在CMD命令行中配置IP地址, 提示 : 未能配置DHCP服务, 接口可能已经断开, 系统找不到指定的文件.
转载csdn: 在windows环境中如何批量添加IP地址_user_yuewu的博客-CSDN博客_windows批量添加ip 求助 : 在CMD命令行中配置IP地址, 提示 : 未能配置DHCP服 ...
- Linux网络管理1---(Linux配置IP地址,ifconfig、配置文件)
1.Linux配置IP 地址 ifconfig命令临时配置IP 地址 ifconfig命令,最常用的功能是查看本机的网络的配置状态(当然也可以配置网络,不过是暂时性的),直接输入ifconfig命令就 ...
- linux配置IP地址
1. ifconfig命令临时配置IP地址 ifconfig命令:查看与配置网络状态命令 如: ifconfig eht0 192.168.0.200 netmask 255.255.255.0 # ...
- windows下脚本配置IP地址
带着笔记本有时候在固定的地方工作,需要用到同一个的Ip地址.换个地方换个Ip,又要重新输一遍. 开始感觉这个过程很繁琐,因为是window工作环境,一开始想到了vbs脚本. 无意中发现了强大的nets ...
- JAVA获取客户端请求的当前网络ip地址(附:Nginx反向代理后获取客户端请求的真实IP)
1. JAVA获取客户端请求的当前网络ip地址: /** * 获取客户端请求的当前网络ip * @param request * @return */ public static String get ...
- 【liunx】使用xshell连接虚拟机上的CentOS 7,使用xhell连接本地虚拟机上的Ubuntu, 获取本地虚拟机中CentOS 7的IP地址,获取本地虚拟机中Ubuntu 的IP地址,Ubuntu开启22端口
注意,如果想用xshell去连接本地虚拟机中的linux系统,需要本地虚拟机中的系统是启动的才能连接!!!!! ============================================ ...
- Linux环境下如何配置IP地址、MAC地址
Linux环境下如何配置IP地址.MAC地址 1.配置IP地址 进入配置IP地址路径,进行修改即可 cd /etc/network vim interface 加入以下内容: iface eth0 i ...
- centos7配置IP地址
有关于centos7获取IP地址的方法主要有两种,1:动态获取ip:2:设置静态IP地址 在配置网络之前我们先要知道centos的网卡名称是什么,centos7不再使用ifconfig命令,可通过命令 ...
- CentOS安装后的第一步:配置IP地址
有关于centos7获取IP地址的方法主要有两种,1:动态获取ip:2:设置静态IP地址 在配置网络之前我们先要知道centos的网卡名称是什么,centos7不再使用ifconfig命令,可通过命令 ...
- linux 手动配置ip地址方法
手工配置静态的IP地址 也就是手工配置IP地址.子网掩码.网关和DNS. 设置方法如下: vi /etc/sysconfig/network-scripts/ifcfg-eth0 编辑本地网卡的配置文 ...
随机推荐
- Github疯传!谷歌师兄的LeetCode刷题笔记开源了!
有小伙伴私聊我说刚开始刷LeetCode的时候,感到很吃力,刷题效率很低.我以前刷题的时候也遇到这个问题,直到后来看到这个谷歌师兄总结的刷题笔记,发现LeetCode刷题都是套路呀,掌握这些套路之后, ...
- 安装vue后 vue -V查不到版本号 添加环境变量没反应
萌新一枚,今天听老大说后续有项目要用vue,于是找教程自己先看看, 验证vue是否安装成功时,提示 'vue' 不是内部命令,也不是可运行的程序 有说把vue路径添加环境变量的,试了一下,不行(后来看 ...
- 数据库SQL复习
数据库SQL介绍 Def:SQL是一种极其高效的数据库系统语言:可以实现对数据库中的数据进行增删改查等操作 增加操作:使用create命令: 可以create table 可以create View ...
- 手摸手带你 在Windows系统中安装Istio
Istio简介 通过负载均衡.服务间的身份验证.监控等方法,Istio 可以轻松地创建一个已经部署了服务的网络,而服务的代码只需很少更改甚至无需更改. 通过在整个环境中部署一个特殊的 sidecar ...
- 文档在线预览(三)使用js前端实现word、excel、pdf、ppt 在线预览
@ 目录 实现方案 一.docx文件实现前端预览 1.docx-preview 2.Mammoth 二.PDF文件实现前端预览 1.pdf.js 2.pdfobject.js 3.vue-pdf 4. ...
- 国际顶刊《PNAS》:爱发朋友圈的人,更容易长寿
点上面关注我们,每日获取前沿新知 近几十年来,智能手机和网络的普及率越来越高,与此同时,"朋友圈"应运而生. 在这个朋友圈里,有人十分活跃,而也有些人是"国家级潜水运动员 ...
- Kubernetes(k8s)使用ingress发布服务
目录 一.系统环境 二.前言 三.Kubernetes ingress简介 四.Ingress vs NodePort vs LoadBalancer 五.安装部署Nginx Ingress Cont ...
- RabbitMQ快速使用代码手册
本篇博客的内容为RabbitMQ在开发过程中的快速上手使用,侧重于代码部分,几乎没有相关概念的介绍,相关概念请参考以下csdn博客,两篇都是我找的精华帖,供大家学习.本篇博客也持续更新~~~ 内容代码 ...
- JVM源码分析:深入剖析java.c文件中JavaMain方法中InitializeJVM的实现
经过前文<从JDK源码级深入剖析main方法的运行机制>的分析,我们知道了实现JavaMain方法的四个主要步骤: 初始化Java虚拟机 加载主运行类 通过加载的主运行类,获取main方法 ...
- 力扣 662 https://leetcode.cn/problems/maximum-width-of-binary-tree/
需要了解树的顺序存储 如果是普通的二叉树 ,底层是用链表去连接的 如果是满二叉树,底层用的是数组去放的,而数组放的时候 会有索引对应 当前父节点是索引i,下一个左右节点就是2i,2i+1 利用满二叉树 ...