Tenable GET scanner targets - dishplate/blog GitHub Wiki
import requests
# === CONFIGURATION ===
ACCESS_KEY = 'YOUR_ACCESS_KEY'
SECRET_KEY = 'YOUR_SECRET_KEY'
SCANNER_NAME = 'YOUR_SCANNER_NAME' # e.g., 'Internal Scanner 1'
BASE_URL = 'https://cloud.tenable.com'
HEADERS = {
'X-ApiKeys': f'accessKey={ACCESS_KEY}; secretKey={SECRET_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
# === GET SCANNERS ===
def get_scanner_id(scanner_name):
response = requests.get(f'{BASE_URL}/scanners', headers=HEADERS)
response.raise_for_status()
for scanner in response.json()['scanners']:
if scanner['name'].lower() == scanner_name.lower():
return scanner['id']
return None
# === GET SCANS FOR THAT SCANNER ===
def get_scans_for_scanner(scanner_id):
response = requests.get(f'{BASE_URL}/scans', headers=HEADERS)
response.raise_for_status()
scans = response.json().get('scans', [])
return [scan for scan in scans if scan.get('scanner_id') == scanner_id]
# === GET TARGETS FROM EACH SCAN ===
def get_targets(scan_id):
response = requests.get(f'{BASE_URL}/scans/{scan_id}', headers=HEADERS)
response.raise_for_status()
return response.json()['info'].get('targets', '')
# === MAIN ===
def main():
scanner_id = get_scanner_id(SCANNER_NAME)
if not scanner_id:
print(f"Scanner '{SCANNER_NAME}' not found.")
return
scans = get_scans_for_scanner(scanner_id)
print(f"\nFound {len(scans)} scans for scanner '{SCANNER_NAME}':\n")
for scan in scans:
scan_id = scan['id']
scan_name = scan['name']
targets = get_targets(scan_id)
print(f"- Scan: {scan_name} (ID: {scan_id})")
print(f" Targets: {targets}\n")
if __name__ == '__main__':
main()