| 1 | import string
|
|---|
| 2 | import cPickle
|
|---|
| 3 | import sys
|
|---|
| 4 | sys.path.append("/usr/lib/enigma2/python/Plugins/SystemPlugins/WirelessLan")
|
|---|
| 5 | sys.path.append("/usr/lib/enigma2/python")
|
|---|
| 6 | from iwlibs import Wireless, Iwscan
|
|---|
| 7 | from string import maketrans, strip
|
|---|
| 8 |
|
|---|
| 9 | a = ''; b = ''
|
|---|
| 10 | scanfile="/tmp/wlanscan"
|
|---|
| 11 | for i in range(0, 255):
|
|---|
| 12 | a = a + chr(i)
|
|---|
| 13 | if i < 32 or i > 127:
|
|---|
| 14 | b = b + ' '
|
|---|
| 15 | else:
|
|---|
| 16 | b = b + chr(i)
|
|---|
| 17 | try:
|
|---|
| 18 | iface=sys.argv[1];
|
|---|
| 19 | except:
|
|---|
| 20 | msg = "No interface to scan\n";
|
|---|
| 21 | o_file=open(scanfile,"w");
|
|---|
| 22 | o_file.write(msg);
|
|---|
| 23 | o_file.close();
|
|---|
| 24 | print msg;
|
|---|
| 25 | sys.exit();
|
|---|
| 26 |
|
|---|
| 27 | asciitrans = maketrans(a, b)
|
|---|
| 28 | ifobj = Wireless(iface) # a Wireless NIC Object
|
|---|
| 29 | stats, quality, discard, missed_beacon = ifobj.getStatistics()
|
|---|
| 30 | snr = quality.signallevel - quality.noiselevel
|
|---|
| 31 | scanresults = ifobj.scan()
|
|---|
| 32 |
|
|---|
| 33 | if scanresults is not None:
|
|---|
| 34 | aps = {}
|
|---|
| 35 | for result in scanresults:
|
|---|
| 36 |
|
|---|
| 37 | bssid = result.bssid
|
|---|
| 38 |
|
|---|
| 39 | encryption = map(lambda x: hex(ord(x)), result.encode)
|
|---|
| 40 |
|
|---|
| 41 | if encryption[-1] == "0x8":
|
|---|
| 42 | encryption = True
|
|---|
| 43 | else:
|
|---|
| 44 | encryption = False
|
|---|
| 45 |
|
|---|
| 46 | extra = []
|
|---|
| 47 | for element in result.custom:
|
|---|
| 48 | element = element.encode()
|
|---|
| 49 | extra.append( strip(element.translate(asciitrans)) )
|
|---|
| 50 |
|
|---|
| 51 | if result.quality.sl is 0 and len(extra) > 0:
|
|---|
| 52 | begin = extra[0].find('SignalStrength=')+15
|
|---|
| 53 |
|
|---|
| 54 | done = False
|
|---|
| 55 | end = begin+1
|
|---|
| 56 |
|
|---|
| 57 | while not done:
|
|---|
| 58 | if extra[0][begin:end].isdigit():
|
|---|
| 59 | end += 1
|
|---|
| 60 | else:
|
|---|
| 61 | done = True
|
|---|
| 62 | end -= 1
|
|---|
| 63 |
|
|---|
| 64 | signal = extra[0][begin:end]
|
|---|
| 65 | #print "[Wlan.py] signal is:" + str(signal)
|
|---|
| 66 |
|
|---|
| 67 | else:
|
|---|
| 68 | signal = str(result.quality.sl)
|
|---|
| 69 |
|
|---|
| 70 | aps[bssid] = {
|
|---|
| 71 | 'active' : True,
|
|---|
| 72 | 'bssid': result.bssid,
|
|---|
| 73 | 'channel': result.frequency.getChannel(result.frequency.getFrequency()),
|
|---|
| 74 | 'encrypted': encryption,
|
|---|
| 75 | 'essid': strip(result.essid.translate(asciitrans)),
|
|---|
| 76 | 'iface': iface,
|
|---|
| 77 | 'maxrate' : result.rate[-1],
|
|---|
| 78 | 'noise' : result.quality.getNoiselevel(),
|
|---|
| 79 | 'quality' : str(result.quality.quality),
|
|---|
| 80 | 'signal' : signal,
|
|---|
| 81 | 'custom' : extra,
|
|---|
| 82 | }
|
|---|
| 83 | print aps[bssid]
|
|---|
| 84 | cPickle.dump(aps, open(scanfile, 'wb'))
|
|---|