I have the script below, use to work, stopped working I've been banging my head on it trying to figure it out or is there a different /better way to get this info. Any help you could be would be much appreciated.
import meraki
import json
import requests
import time
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
from datetime import datetime, timezone
#Put your API key here
apikey =
orgid =
def getNetworks(apikey):
url = "https://api.meraki.com/api/v0/organizations/11111/networks"
payload = ""
headers = {
'X-Cisco-Meraki-API-Key': apikey,
'cache-control': "no-cache",
'Postman-Token': ""
}
response = requests.request("GET", url, data=payload, headers=headers)
return response
def getMarshall(network, apikey):
url = "https://api.meraki.com/api/v0/networks/" + network + "/airMarshal"
querystring = {"timespan":"3600"}
payload = ""
headers = {
'X-Cisco-Meraki-API-Key': apikey,
'cache-control': "no-cache",
'Postman-Token': ""
}
response = requests.request("GET", url, data=payload, headers=headers, params=querystring)
return response
def mail():
time = datetime.now().strftime("%m%d%y")
filename = "airmarshallReport_" + time + ".csv"
subject = "Meraki Airmarshall Report"
recipients = ["test@test.com"]
msg = MIMEMultipart()
msg["Subject"] = subject
msg["From"] = "airmarshall@test.com"
msg["To"] = ", ".join(recipients)
part = MIMEBase("application", "octet-stream")
part.set_payload(open(filename, "rb").read())
encoders.encode_base64(part)
part.add_header("Content-Disposition", "attachment; filename=\"" + filename + "\"")
msg.attach(part)
server = smtplib.SMTP("mail.test.com")
server.sendmail("airmarshall@test.com", recipients, msg.as_string())
response = getNetworks(apikey)
networks = response.json()
index1 = 0
index2 = 0
time = datetime.now().strftime("%m%d%y")
with open("airmarshallReport_" + time + ".csv", "w+") as f:
f.write("network,ssid,bssid,contained,devices,channels,firstseen,lastseen,wiredmacs,wiredlastseen\n")
for line in networks:
try:
x = getMarshall(networks[index1]["id"],apikey)
y = x.json()
index = 0
for i in y:
f.write('"' + str(networks[index1]["name"]) + '"' + "," + '"' + str(y[index]["ssid"]) + '"' + "," + '"' + str(y[index]["bssids"][0]["bssid"]) + '"' + "," + '"' + str(y[index]["bssids"][0]["contained"]) + '"' + ",")
try:
for i in y[index]["bssids"][0]["detectedBy"]:
f.write('"' + str(i["device"]) + " RSSI - " + str(i["rssi"]) + " ")
index2 += 1
f.write('"' + ",")
except:
f.write('"' + "none\"," )
try:
f.write('"' + str(y[index]["channels"][0]) + '"' + ",")
except:
f.write('"' + "none\",")
try:
f.write('"' + str(datetime.fromtimestamp(int(y[index]["firstSeen"]))) + '"' + "," + '"' + str(datetime.fromtimestamp(int(y[index]["lastSeen"]))) + '"' + "," + '"' + str(y[index]["wiredMacs"]) + '"' + "," + '"' + str(datetime.fromtimestamp(int(y[index]["wiredLastSeen"]))) + '"' + "\n")
except:
f.write("\"none\",\"none\",\"none\",\"none\"\n")
index += 1
except:
f.write('"' + str(networks[index1]["name"]) + '"' + "," + "\"none\"\n")
index1 += 1
mail()