#!/usr/bin/env python import sys import os import re import time import socket def bringup(interface): if os.system("/sbin/ifconfig %s up" % interface) != 0: os.system("/sbin/modprobe iwlagn; sleep 1") else: return os.system("/sbin/route del default dev tap0") if os.system("/sbin/ifconfig %s up" % interface) != 0: raise Exception('Failed bringing up interface') def scan(interface): '''Returns [{bssid, essid, enckey, channel, quality}, ...]''' bringup(interface) pipe = os.popen("/sbin/iwlist %s scan" % interface, 'r') result = [] hasap = False appattern = re.compile('Cell ([0-9]+)') patterns = {'bssid': re.compile('Address:\s?([0-9a-fA-F\:]{17})\s*$'), 'essid': re.compile('ESSID:\s?"([^"]*)"'), 'enckey': re.compile('Encryption key:\s?([A-Za-z]+)'), 'channel': re.compile('Channel:\s?([0-9]+)'), 'quality': re.compile('Quality[:=]([0-9]+)/[0-9]+')} filters = {'bssid': lambda s: s.lower(), 'enckey': lambda s: s.lower() == 'on', 'channel': lambda s: int(s), 'quality': lambda s: int(s)} for line in pipe: if not appattern.search(line): if not hasap: continue else: if hasap and params['bssid'] != None: result.append(params) else: hasap = True params = {'bssid': None, 'essid': None, 'enckey': None, 'channel': 0, 'quality': 0} for key, pattern in patterns.items(): match = pattern.search(line) if match: value = match.group(1) if filters.has_key(key): value = filters[key](value) params[key] = value if hasap and params['bssid'] != None: result.append(params) return result def show_scanlist(lst): lst.sort(lambda a, b: cmp(a['quality'], b['quality'])) columns = [('bssid', 20), ('essid', 20), ('enckey', 8), ('channel', 9), ('quality', 9)] formats = {'enckey': lambda v: v and 'on' or 'off', 'quality': lambda v: "%d%%" % v} line = ' ' * 5 for name, width in columns: line += (' ' * width + name)[-width:] print line for n, params in enumerate(lst): line = '%2d ' % (n + 1) for name, width in columns: value = params[name] if formats.has_key(name): value = formats[name](value) line += (' ' * width + str(value))[-width:] print line def netsettings_toas(interface): os.system("/sbin/ifconfig %s 195.148.186.185 netmask 255.255.255.0" % interface) os.system("/sbin/route add default gateway 195.148.186.1 dev %s" % interface) open("/etc/resolv.conf", "w").write("nameserver 86.50.0.40\nnameserver 193.166.234.15\n") def netsettings_dhcp(interface): if os.system("/sbin/dhclient %s" % interface) != 0: raise Exception("DHCP failed") # TUT import urllib import re def tut_login(user, password): # Get posturl loginpage = urllib.urlopen("https://signin.public.tut.fi/").read() posturl = re.search('''