Palo Alto Networks – XML API verwenden mit Python

Die Palo Alto Jungs haben eine exzellente XML API implementiert die für die Firewalls als auch Panorama usw. funktioniert.

Um auf die API Dokumentation zuzugreifen einfach https://<firewall_ip>/api aufrufen.

Der User muss API Rechte haben.

Hier ein Beispiel zum Auslesen der ARP Tabelle.

Ich habe den SSL Zertifikatscheck in Python deaktiviert in meiner Lab Umgebung. Bitte nicht in Produktionsumgebungen verwenden!

#!/usr/bin/env python

# required pip packages: lxml, beautifulsoup4, tabulate

from bs4 import BeautifulSoup as BS
import urllib2
import ssl
import urllib
from tabulate import tabulate

username = "api_test"
password = "supersecurepassword"
firewall = "192.168.111.1"

#####################
# SSL ignore Cert Check (Lab Environment only!)

ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE

#####################
# Req function

def req_api(command, key):
    url = "https://%s/api/?key=%s&type=op&cmd=" % (firewall, key) + urllib.quote_plus(command)
    res = urllib2.urlopen(url, context=ctx)
    return res.read()

#####################
# API Key request


req_api_url = "https://%s/api/?type=keygen&user=%s&password=%s" % (firewall, username, password)
res_api_key = urllib2.urlopen(req_api_url, context=ctx)
soup = BS(res_api_key.read(), "lxml")
key = soup.find('key').text

#####################
# Get arp entrys

soup = BS(req_api("<show><arp><entry name = 'all'/></arp></show>", key), "lxml")

arp_buffer = []

for e in soup("entry"):
    arp_buffer.append([e.status.text, e.ip.text, e.ttl.text, e.interface.text, e.port.text, e.mac.text])

print "#" * 120 + "\n> ARP Cache Count: %s\n" %(len(arp_buffer)) + "#" * 120
print tabulate(arp_buffer, headers=['Status', 'IP', 'TTL', 'Interface', 'Port', 'MAC'], tablefmt='orgtbl')

Ergebnis:

>.\palo_xml.py
########################################################################################################################
> ARP Cache Count: 14
########################################################################################################################
| Status   | IP            |   TTL | Interface   | Port        | MAC               |
|----------+---------------+-------+-------------+-------------+-------------------|
| c        | 192.168.0.1   |  1560 | ethernet1/3 | ethernet1/3 | c0:ff:ee:c0:ff:ee |
| c        | 192.168.0.2   |  1058 | ethernet1/3 | ethernet1/3 | c0:ff:ee:c0:ff:ee |
| c        | 192.168.0.5   |  1797 | ethernet1/3 | ethernet1/3 | c0:ff:ee:c0:ff:ee |
| c        | 192.168.0.11  |  1779 | ethernet1/3 | ethernet1/3 | c0:ff:ee:c0:ff:ee |
| c        | 192.168.0.12  |  1581 | ethernet1/3 | ethernet1/3 | c0:ff:ee:c0:ff:ee |
| c        | 192.168.0.13  |  1787 | ethernet1/3 | ethernet1/3 | c0:ff:ee:c0:ff:ee |
| c        | 192.168.0.30  |  1055 | ethernet1/3 | ethernet1/3 | c0:ff:ee:c0:ff:ee |
| c        | 192.168.0.33  |  1542 | ethernet1/3 | ethernet1/3 | c0:ff:ee:c0:ff:ee |
| c        | 192.168.0.40  |  1121 | ethernet1/3 | ethernet1/3 | c0:ff:ee:c0:ff:ee |
| c        | 192.168.0.42  |   173 | ethernet1/3 | ethernet1/3 | c0:ff:ee:c0:ff:ee |
| c        | 192.168.0.44  |  1799 | ethernet1/3 | ethernet1/3 | c0:ff:ee:c0:ff:ee |
| c        | 192.168.0.45  |   910 | ethernet1/3 | ethernet1/3 | c0:ff:ee:c0:ff:ee |
| c        | 192.168.0.52  |  1788 | ethernet1/3 | ethernet1/3 | c0:ff:ee:c0:ff:ee |
| c        | 192.168.0.57  |  1671 | ethernet1/3 | ethernet1/3 | c0:ff:ee:c0:ff:ee |

 

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.