SSID Reporting

Walkerish
New here

SSID Reporting

Hello,

 

Our organization holds many different networks (over 200) all with between 3-25 access points each. 

 

Pretty simple question I have. I would like to see if there is a report that shows the enabled SSIDs for each network.

 

Thank you!

7 Replies 7
BrandonS
Kind of a big deal

It looks like you could pull this with the API: https://developer.cisco.com/meraki/api/#/rest/api-endpoints/ssids/get-network-ssid

 

 

- Ex community all-star (⌐⊙_⊙)
Walkerish
New here

I will take a look and see what I can do with that. Thank you
Raphael_M
Here to help

I've written a small Python script for this exact same need. It goes through all our organizations and their attached networks and lists all SSIDs in a csv file.

You can PM me if you want the script, it'll probably need some adjustments but that's not a lot of work.

 

The script is probably ugly so I prefer not to attach it to this thread, but it does the job.

MarcP
Kind of a big deal

@Raphael_M Go ahead and share it with us 🙂

NolanHerring
Kind of a big deal

Yeah nobody is going to judge you if its not pretty. They might make recommendations to clean it up, but you could be helping out a good number of others having to do the same thing 😃
Nolan Herring | nolanwifi.com
TwitterLinkedIn
Raphael_M
Here to help

Alright, here it is.

A few comments:

  • Just update everything that is between <> and the script should run fine
  • We only have 3 organizations so I decided to hard code the org name and org ids in the script out of laziness ; now of course you can use an API endpoint to get this information and put it in an array instead of hardcoding it
  • The scripts only reports SSID information that I cared about but of course you can update it to collect more/everything
import json
import requests
import sys
import csv

    # Define organizations 
orgs={'<orgName 1>':'<org Id 1>','<orgName 2>':'<org Id 2>','<orgName 3>':'<org Id 3>'}
org_names=orgs.keys()
# Define API URL and API key base_url='https://api.meraki.com/api/v0/' API_KEY = '<ApiKey>' with open('<filepath>', mode='w',newline='') as report_csv: report = csv.writer(report_csv, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL) report.writerow(['Org name','Network name','SSID name','SSID Authmode','SSID Encryption mode','WPA mode','VLAN','RADIUS servers']) for org_name in org_names: #Get list of networks in each organization print("Cycling through organization " + org_name) session = requests.session() headers = {'X-Cisco-Meraki-API-Key': API_KEY, 'Content-Type': 'application/json'} networks = json.loads(session.get(base_url + 'organizations/' + orgs[org_name] + '/networks', headers=headers).text) #Get list of SSIDs in each network for net in networks: ssids=json.loads(session.get(base_url + 'networks/' + net['id'] + '/ssids', headers=headers).text) #Write csv file with various information for ssid in ssids: if "Unconfigured" in ssid['name']: break elif '8021x' in ssid['authMode'] and ssid['useVlanTagging']: row=[org_name,net['name'],ssid['name'],ssid['authMode'],ssid['encryptionMode'],ssid['wpaEncryptionMode'],ssid['defaultVlanId']] for index,radius in enumerate(ssid['radiusServers']): row.insert(7+index,radius['host']) report.writerow(row) elif '8021x' in ssid['authMode']: row=[org_name,net['name'],ssid['name'],ssid['authMode'],ssid['encryptionMode'],ssid['wpaEncryptionMode'],'No tagging'] for index,radius in enumerate(ssid['radiusServers']): row.insert(7+index,radius['host']) report.writerow(row) elif ssid['useVlanTagging']: report.writerow([org_name,net['name'],ssid['name'],ssid['authMode'],'','',ssid['defaultVlanId']]) else: report.writerow([org_name,net['name'],ssid['name'],ssid['authMode'],'','','No tagging']) report_csv.close

 

rdbaker31
Comes here often

Hi folks,

 

I'm really new to Python programming but I just put this together to achieve a similar thing, I think. I have used colleagues ideas and trawled the StackOverflow site for ideas and inspiration. It will return any enabled SSID and print details about it. Of course it can be sent to a file if needed rather than just printed to a screen. Hope it helps someone.

 

from time import sleep
from rich import print as rprint

try:
networksResponse = dashboard.organizations.getOrganizationNetworks(
orgId, total_pages='all'
)

for network in networksResponse:
z = network['productTypes'].count('wireless')
if z > 0:
response = dashboard.wireless.getNetworkWirelessSsids(
network['id']
)
configured = [n for n in response if n['enabled'] == True]
rprint(network['name'], "-", configured)
sleep(.1)

except meraki.APIError as e:
print(e)

 

Kind regards

Richard

Get notified when there are additional replies to this discussion.