翼度科技»论坛 编程开发 python 查看内容

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

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
第一部分,观察通过snmp OID能获取的信息,对信息进行关联。
1、通过 snmp获取到接口IP地址和掩码信息,发现IP地址作为索引值;
2、每个IP地址的索引,都可以关联到接口的索引
3、每个接口索引,都可以通过snmp获取到接口的名称,
降这个3个数据进行关联,可以得到接口名称和网段信息的关联。

第二部分:通过代码实现。
get_vlan_network.py
  1. import re,os,ipaddress
  2. #get the interface Vlan value
  3. def get_Vlanif_value(host,SNMP_community):
  4.     vlan_dict = {}
  5.     pattern = re.compile(r'(\d+)\s*=\s*STRING:\s*(\S+)')
  6.     cmd = "snmpwalk -v 2c -c " + SNMP_community  +" "+ host + " ifname | grep Vlan" # 进行过滤,仅显示VLAN接口
  7.     tmp = os.popen(cmd).readlines()
  8.     # print("begin:",tmp)
  9.     for i in tmp:
  10.         matches = re.search(pattern, i)
  11.         if matches:
  12.             if_id = matches.group(1) #if_id: interface_snmp_ID
  13.             Vlan_value = re.search(r'\d+', matches.group(2)).group()
  14.             # print(if_id,Vlan_value)
  15.             vlan_dict[if_id] = Vlan_value
  16.    
  17.     return vlan_dict
  18. # VLAN = get_Vlan_value(host)
  19. # print(VLAN)
  20. # get the interface ip address and inetface snmp ID
  21. def get_if_ip(host,SNMP_community):
  22.     if_dict = {}
  23.     pattern = r'(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) = INTEGER: (\d+)'
  24.     cmd = "snmpwalk -v 2c -c " + SNMP_community +" "+ host + " .1.3.6.1.2.1.4.20.1.2"
  25.     tmp = os.popen(cmd).readlines()
  26.     for i in tmp:
  27.         matches = re.search(pattern, i)
  28.         if matches:
  29.             ip_address = matches.group(1)
  30.             if_id = matches.group(2)
  31.             if_dict[ip_address] = if_id
  32.     return if_dict
  33. # IF_value = get_if_ip(host)
  34. # print(IF_value)
  35. def get_network_value(host,SNMP_community):
  36.    
  37.     network_dict = {}
  38.     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})'
  39.     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"
  40.     tmp = os.popen(cmd).readlines()
  41.     for i in tmp:
  42.         matches = re.search(pattern, i)
  43.         if matches:
  44.             ip_address = matches.group(1)
  45.             subnet_mask = matches.group(2)
  46.             network_str = f"{ip_address}/{subnet_mask}"
  47.             network = ipaddress.IPv4Network(network_str, strict=False)
  48.             network_dict[ip_address] = network.with_prefixlen
  49.    
  50.     return network_dict
  51. def get_network_subnet_Vlan(host,SNMP_community):
  52.     # 将网段信息与VLAN ID进行关联
  53.     Netowrk_Vlan ={}
  54.     Vlan_info = get_Vlanif_value(host, SNMP_community)
  55.     If_info =  get_if_ip(host, SNMP_community)
  56.     Network_info = get_network_value(host, SNMP_community)
  57.    
  58.     # print(host,SNMP_community)
  59.     for k ,v_net in Network_info.items():
  60.         # print(k)
  61.         if k in If_info:
  62.             # Netowrk_Vlan[v_net]
  63.             if If_info[k] in Vlan_info: #Vlan_info 进行了过滤,
  64.                 # print( v_net, Vlan_info[If_info[k]])
  65.                 Netowrk_Vlan[v_net]=Vlan_info[If_info[k]]
  66.     return Netowrk_Vlan
  67. if __name__ == '__main__':
  68.    
  69.     with open('host_snmp.txt', 'r', encoding='utf8') as f:
  70.        
  71.         for line in f:
  72.             dict = {}
  73.             host = line.split(" ")[0]
  74.             snmp_community = (line.split(" ")[1]).strip()
  75.              
  76.             # print(host,snmp_community)
  77.             #将所有数据放入字典
  78.             dict[host] = get_network_subnet_Vlan(host,snmp_community)   
  79.             print(dict)
复制代码
 将设备IP地址、snmp团体字保存再host_snmp.txt 文件中,每行一台设备,通过脚本遍历进行查询。将结果保存为字典格式,便于后续对数据进行利用。文件存储格式:host_ip snmp_commuinty 数据数据格式:{'host_ip':{network/mask':'vlan_id',network/mask':'vlan_id'}}   

来源:https://www.cnblogs.com/niu525/p/17693436.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具