收集网络管理软件上的网段信息

收集网络管理软件上的网段信息

收集网络管理软件上的网段信息 需要用到pubapi来写入数据库 不适用于所有环境,脚本只做技术储备

import mysql.connector
import requests, json
from requests.packages import urllib3
from Basicinterface import executeMysqlData
#从地址库系统里定时拉数据出来,更新到自己的数据库里,如果有自己的网段也可以手动加进去,后续如果地址用处变更则会自动更新相关的条目,如果没有则会新建
apiToken = '33cbb6a54b5fa924e5be1a0917d0b856'
server=  '<serverUrl>'
serverQuery = [{'serverIP':server,'apiToken':apiToken}]
urllib3.disable_warnings()
n = 1
subnetDict = {}
for i in serverQuery:
    while 1:
        try:
            response = requests.get(f'https://{i['serverIP']}:8861/api/json/ipam/getAllSubnetSummary?apiKey={i['apiToken']}&&rows=100&page={n}',verify= False)
            #print (json.loads(response.text)[" records"])
        except:
            print(f'{i['serverIP']}获取失败!'
        try:
            jsonServerData = json.loads(response.text)['rows']
        except:
            print(f'{i['serverIP']}转换成 json失败!!')
            jsonServerData = []
            if len(jsonServerData) != θ:
                for j in jsonServerData:
                    subnetCidr = j['subnet-address-cidr']
                    if subnetCidr not in subnetDict:
                        subnetDict[subnetCidr] = {}
                    subnetDict[subnetCidr]['subnetName'] = j['subnet-name']
                n += 1
            else:
                n = 1
                break
for i in subnetDict:
    #查询数据是否有重复,如没有就写入,否则跳过
    subnets = "'"+ i + "'"
    nameOfSubnet = "'" + subnetDict[i]['subnetName'] + "'"
    querySubnet = f"SELECT * from IPStatus WHERE subnet = {subnets}"
    result = readMysqlData(1,querySubnet)
    if len(result) == θ :
        sql= f"""INSERT INTO IPStatus (subnet, name) VALUES ({"'"+ i + "'"},{"'" + name + "'"})"""
        executeMysqlData(3,'write',sql)
    elif result[θ][2] == "" or result[θ][2] != subnetDict[i]['subnetName']:
        sql= f"""UPDATE IPStatus set name = {"'" + nameOfSubnet + "'"} WHERE subnet = {"'" + subnet + "'"}"""
        executeMysqlData(3,'write',sql)