скрипт 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)`