Advertisement
Guest User

wi-probe.py

a guest
Jun 1st, 2017
234
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.26 KB | None | 0 0
  1. import sys
  2. import getopt
  3. import requests
  4. import json
  5. import shodan
  6.  
  7. ####
  8. #### GLOBAL VARIABLES
  9. ####
  10.  
  11. # Wigle
  12. user = '' # conf
  13. password = '' # conf
  14. parameters = {'onlymine':'false','freenet':'false','paynet':'false','ssid':'ssid'}
  15. url = 'https://api.wigle.net/api/v2/network/search'
  16. ssid = ''
  17. doSearch = 0
  18.  
  19. # Google
  20. googleParameters = {'latlng':'latlng','key':'key'} # conf
  21. gurl = 'https://maps.googleapis.com/maps/api/geocode/json'
  22. coords = ''
  23.  
  24. # Shodan
  25. shodanKey = shodan.Shodan('key') # conf
  26. useShodan = 0
  27.  
  28. ####
  29. # Help
  30. def usage():
  31.     print
  32.     print "#-------------------------------------------------------------------#"
  33.     print "|                     WI-PROBE: SSID PROFILER                       |"
  34.     print "#-------------------------------------------------------------------#"
  35.     print
  36.     print "#-------------------------------------------------------------------#"
  37.     print "|                              USAGE:                               |"
  38.     print "|                                                                   |"
  39.     print "| -h, --help                                     Displays this page |"
  40.     print "| -s, --shodan                                 Toggle Shodan search |"
  41.     print "| -e, --essid                               Target ESSID (required) |"
  42.     print "|                                                                   |"
  43.     print "#-------------------------------------------------------------------#"
  44.     print
  45.     print "#-------------------------------------------------------------------#"
  46.     print "|                            EXAMPLES:                              |"
  47.     print "|                                                                   |"
  48.     print "| wi-probe.py -e xfinitywifi                                        |"
  49.     print "| wi-probe.py -s --essid MyWifi                                     |"
  50.     print "|                                                                   |"
  51.     print "#-------------------------------------------------------------------#"
  52.     print
  53.     sys.exit(0)
  54.  
  55. ####
  56. # Wigle functions
  57. def setWigleData():
  58.     parameters['ssid'] = ssid
  59.  
  60. def getWigleData():
  61.     return requests.get(url, auth = (user, password), params = parameters)
  62.  
  63. def makeWigleRequest():
  64.     global coords
  65.  
  66.     setWigleData()
  67.     req = getWigleData()
  68.  
  69.     # LOOP FOR EACH WiGLE RESULT
  70.     # pull coords from Wigle
  71.     json_string = req.text
  72.     parsed_json = json.loads(json_string)
  73.  
  74.     if parsed_json["success"] == 'true':
  75.         end = parsed_json["resultCount"]
  76.         for i in range(0, end):
  77.             lat = str(parsed_json["results"][i]["trilat"])
  78.             lon = str(parsed_json["results"][i]["trilong"])
  79.             coords = lat + "," + lon
  80.  
  81.             # pull MAC from Wigle
  82.             tmpMac = parsed_json["results"][i]["netid"]
  83.  
  84.             if useShodan == 1:
  85.                 mac = tmpMac
  86.                 #mac = 'FF:54:00:12:00:5c' # for debug; does not return IP
  87.                 getShodanData(mac)
  88.             print ''
  89.  
  90.             makeGoogleRequest()
  91.     else:
  92.         print "ERROR: " + parsed_json["error"]
  93.  
  94. ####
  95. # Google functions
  96. def setGoogleData():
  97.     googleParameters['latlng'] = coords
  98.  
  99. def getGoogleData():
  100.     return requests.get(gurl, params = googleParameters)
  101.  
  102. def makeGoogleRequest():
  103.     setGoogleData()
  104.     json_string = getGoogleData().text
  105.     parsed_json = json.loads(json_string)
  106.     addr = parsed_json["results"][0]["formatted_address"]
  107.     print addr
  108.  
  109. ####
  110. # Shodan methods
  111. def getShodanData(mac):
  112.     query = 'mac:\"' + mac + '\"'
  113.     try:
  114.         result = shodanKey.search(query)
  115.         message = ''
  116.         noResults = "MAC " + mac + " not found in Shodan"
  117.         # Loop through the matches and print each IP
  118.         for service in result['matches']:
  119.                 message += service['ip_str']
  120.                 message += '\n'
  121.         if message == '':
  122.             print noResults
  123.         else:
  124.             # strip last return
  125.             i = len(message) - 1
  126.             message = message[0:i]
  127.             print message
  128.     except Exception as e:
  129.         print 'Error: %s' % e
  130.         sys.exit(1)
  131.  
  132. ####
  133. # Preconfiguration
  134. def preconf():
  135.     global user
  136.     global password
  137.     global googleParameters
  138.     global shodanKey
  139.  
  140.     json_data=open("wi-probe.conf").read()
  141.     data = json.loads(json_data)
  142.  
  143.     user = data["wigle_user"]
  144.     password = data["wigle_password"]
  145.     googleParameters["key"] = data["google_key"]
  146.     shodanKey = shodan.Shodan(data["shodan_key"])
  147.  
  148. ####
  149. # ENTRY POINT
  150. def main():
  151.     global useShodan
  152.     global ssid
  153.     global doSearch
  154.  
  155.     if not len(sys.argv[1:]):
  156.         usage()
  157.     # read the commandline options
  158.     try:
  159.         opts, args = getopt.getopt(sys.argv[1:],"hse:", ["help","shodan","essid"])
  160.     except getopt.GetoptError as err:
  161.         print str(err)
  162.         usage()
  163.  
  164.     for o,a in opts:
  165.         if o in ("-h", "--help"):
  166.             usage()
  167.         elif o in ("-s", "--shodan"):
  168.             useShodan = 1
  169.         elif o in ("-e", "--essid"):
  170.             ssid = a
  171.             doSearch = 1
  172.         else:
  173.             assert False,"Unhandled Option"
  174.  
  175.     if doSearch == 1:
  176.         preconf()
  177.         makeWigleRequest()
  178.  
  179. if __name__=="__main__":main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement