скрипт python для разделения IP-адресов для подачи в qualys

Ниже скрипт будет выполнять парсинг gcp и, таким образом, кучу преобразований и, наконец, создавать группы активов в qualys, если заголовок не существует, и это добавит IP-адреса, если заголовок существует. Мне нужна помощь. изменение скрипта для разделения общего списка IP-адресов на несколько вызовов API, если мой IP-канал достигает 8000 символов. Как мне это сделать?

      import csv
import json
import requests
from requests.auth import HTTPBasicAuth
import xmltodict
url = "https://qualysapi.qg2.apps.qualys.com"
uri = "/api/2.0/fo/asset/group/"
endpoint = url + uri
headers = {"X-Requested-With": "Curl"}
output = {}
qualys_titles = {}
def convert_gcp_csv_to_json():
    with open('my.csv') as csv_file:
        csv_reader = csv.reader(csv_file, delimiter=',')
        line_count = 0
        for row in csv_reader:
            if line_count == 0:
                #print(f'Column names are {", ".join(row)}')
                print('Column names are',", ".join(row))
                line_count += 1
            else:
                temp = "GCP-" + row[1] + "-" + row[2] + "-dynamic"
                if temp not in output:
                    output[temp] = []
                output[temp].append(row[3])
                line_count += 1
       # print(f'Processed {line_count} lines.')
    print(json.dumps(output, indent = 3)) 
    return output
def convert_qualys_xml_to_json():
    params = {"action": "list", "output_format": "xml"}
    response = requests.get(endpoint, params=params, auth=HTTPBasicAuth("user", "password"), headers=headers)
    my_dict=xmltodict.parse(response.text)
    return my_dict
gcp_ips = convert_gcp_csv_to_json()
qualys_json = convert_qualys_xml_to_json()
# Obtain all title names from Qualys
for i in qualys_json["ASSET_GROUP_LIST_OUTPUT"]["RESPONSE"]["ASSET_GROUP_LIST"]["ASSET_GROUP"]:
    # qualys_titles.append(i["TITLE"])
    qualys_titles.update({i["TITLE"]:i["ID"]})
# Create a "SET" of the qualys titles, this converts everything to be unique values
# qualys_titles = set(qualys_titles)
# loop over GCP values and compare if the title exists in  QUALYS, if it exists, do an update, if it does not do an add
for i in gcp_ips:
    if i in qualys_titles:
        joined_ips = ",".join(gcp_ips[i])
        params_edit = {'action': 'edit', "id": qualys_titles[i], "set_ips" : joined_ips }
        print("params edit : " + json.dumps(params_edit))
        response = requests.post(endpoint, params=params_edit, auth=HTTPBasicAuth("user", "password"), headers=headers)
    else:
        joined_ips = ",".join(gcp_ips[i])
        params_add = {'action': 'add', "title": i, "ips" : joined_ips }
        print("params add : " + json.dumps(params_add))
        response = requests.post(endpoint, params=params_add, auth=HTTPBasicAuth("user", "password"), headers=headers)`

0 ответов

Другие вопросы по тегам