def check_interfaces(): global wlan, ppp print('Verifying interfaces') s = cli.execute_shell('ifconfig') lines = s.splitlines() bwlan = False bppp = False for l in lines: line = str(l) if not line.startswith(' ') and len(line) > 0: text = line.split(' ')[0] if text.startswith(wlan): bwlan = True elif text.startswith(ppp): bppp = True if not bwlan: print(wlan + ' interface was not found. Make sure your wifi is on.') return False elif not bppp: print( ppp + ' interface was not found. Make sure you are connected to the internet.' ) return False else: print('done.') return True
def pre_start(): try: # oper = platform.linux_distribution() # if oper[0].lower()=='ubuntu' and oper[2].lower()=='trusty': # trusty patch # print( 'applying hostapd workaround for ubuntu trusty.') #29-12-2014: Rather than patching individual distros, lets make it a default. result = cli.execute_shell('nmcli radio wifi off') if "error" in result.lower(): cli.execute_shell('nmcli nm wifi off') cli.execute_shell('rfkill unblock wlan') cli.execute_shell('sleep 1') print('done.') except: pass
def configure(): global wlan, ppp, IP, Netmask #CHECK WHETHER WIFI IS SUPPORTED OR NOT print('Verifying connections') wlan = '' ppp = '' s = cli.execute_shell('iwconfig') if s != None: lines = s.splitlines() #print( 'and it is:' + s) for l in lines: line = str(l) if not line.startswith(' ') and not line.startswith( 'mon.') and 'IEEE 802.11' in line: wlan = line.split(' ')[0] print('Wifi interface found: ' + wlan) if wlan == '': print('Wireless interface could not be found on your device.') return #print( 'Verifying Internet connections') s = cli.execute_shell('ifconfig') lines = s.splitlines() iface = [] for l in lines: line = str(l) if not line.startswith(' ') and not line.startswith( wlan) and not line.startswith('lo') and not line.startswith( 'mon.') and len(line) > 0: iface.append(line.split(' ')[0]) #print( 'f::' + line) if len(iface) == 0: print( 'No network nic could be found on your deivce to interface with the LAN' ) elif len(iface) == 1: ppp = iface[0] print('Network interface found: ' + ppp) else: rniface = range(len(iface)) s = '' while True: for i in rniface: print(i, iface[i]) try: s = int(input("Enter number for internet supplying NIC :")) except: continue if s not in rniface: continue ppp = iface[s] break while True: IP = input('Enter an IP address for your ap [192.168.45.1] :') #except: continue #print( type(IP)) #sys.exit(0) if IP == None or IP == '': IP = '192.168.45.1' if not validate_ip(IP): continue break Netmask = '255.255.255.0' #CONFIGURE SSID, PASSWORD, ETC. SSID = input('Enter SSID [joe_ssid] :') if SSID == '': SSID = 'joe_ssid' password = input('Enter 10 digit password [1234567890] :') if password == '': password = '******' f = open('run.dat', 'r') lout = [] for line in f.readlines(): lout.append(line.replace('<SSID>', SSID).replace('<PASS>', password)) f.close() f = open('run.conf', 'w') f.writelines(lout) f.close() print('created hostapd configuration: run.conf') dc = { 'wlan': wlan, 'inet': ppp, 'ip': IP, 'netmask': Netmask, 'SSID': SSID, 'password': password } json.dump(dc, open('hotspotd.json', 'w')) print(dc) print('Configuration saved. Run "hotspotd start" to start the router.')
def stop_router(): #bring down the interface cli.execute_shell('ifconfig mon.' + wlan + ' down') #TODO: Find some workaround. killing hostapd brings down the wlan0 interface in ifconfig. #~ #stop hostapd #~ if cli.is_process_running('hostapd')>0: #~ cli.writelog('stopping hostapd') #~ cli.execute_shell('pkill hostapd') #stop dnsmasq if cli.is_process_running('dnsmasq') > 0: cli.writelog('stopping dnsmasq') cli.execute_shell('killall dnsmasq') #disable forwarding in iptables. cli.writelog('disabling forward rules in iptables.') cli.execute_shell('iptables -P FORWARD DROP') #delete iptables rules that were added for wlan traffic. if wlan != None: cli.execute_shell('iptables -D OUTPUT --out-interface ' + wlan + ' -j ACCEPT') cli.execute_shell('iptables -D INPUT --in-interface ' + wlan + ' -j ACCEPT') cli.execute_shell('iptables --table nat --delete-chain') cli.execute_shell('iptables --table nat -F') cli.execute_shell('iptables --table nat -X') #disable forwarding in sysctl. cli.writelog('disabling forward in sysctl.') r = cli.set_sysctl('net.ipv4.ip_forward', '0') print(r.strip()) #cli.execute_shell('ifconfig ' + wlan + ' down' + IP + ' netmask ' + Netmask) #cli.execute_shell('ip addr flush ' + wlan) print('hotspot has stopped.') return
def start_router(): if not check_dependencies(): return elif not check_interfaces(): return pre_start() s = 'ifconfig ' + wlan + ' up ' + IP + ' netmask ' + Netmask print('created interface: mon.' + wlan + ' on IP: ' + IP) r = cli.execute_shell(s) cli.writelog(r) #cli.writelog('sleeping for 2 seconds.') print('wait..') cli.execute_shell('sleep 2') i = IP.rindex('.') ipparts = IP[0:i] #stop dnsmasq if already running. if cli.is_process_running('dnsmasq') > 0: print('stopping dnsmasq') cli.execute_shell('killall dnsmasq') #stop hostapd if already running. if cli.is_process_running('hostapd') > 0: print('stopping hostapd') cli.execute_shell('killall hostapd') #enable forwarding in sysctl. print('enabling forward in sysctl.') r = cli.set_sysctl('net.ipv4.ip_forward', '1') print(r.strip()) #enable forwarding in iptables. print('creating NAT using iptables: ' + wlan + '<->' + ppp) cli.execute_shell('iptables -P FORWARD ACCEPT') #add iptables rules to create the NAT. cli.execute_shell('iptables --table nat --delete-chain') cli.execute_shell('iptables --table nat -F') r = cli.execute_shell('iptables --table nat -X') if len(r.strip()) > 0: print(r.strip()) cli.execute_shell('iptables -t nat -A POSTROUTING -o ' + ppp + ' -j MASQUERADE') cli.execute_shell('iptables -A FORWARD -i ' + ppp + ' -o ' + wlan + ' -j ACCEPT -m state --state RELATED,ESTABLISHED') cli.execute_shell('iptables -A FORWARD -i ' + wlan + ' -o ' + ppp + ' -j ACCEPT') #allow traffic to/from wlan cli.execute_shell('iptables -A OUTPUT --out-interface ' + wlan + ' -j ACCEPT') cli.execute_shell('iptables -A INPUT --in-interface ' + wlan + ' -j ACCEPT') #start dnsmasq s = 'dnsmasq --dhcp-authoritative --interface=' + wlan + ' --dhcp-range=' + ipparts + '.20,' + ipparts + '.100,' + Netmask + ',4h' print('running dnsmasq') print(s) r = cli.execute_shell(s) cli.writelog(r) #~ f = open(os.getcwd() + '/hostapd.tem','r') #~ lout=[] #~ for line in f.readlines(): #~ lout.append(line.replace('<SSID>',SSID).replace('<PASS>',password)) #~ #~ f.close() #~ f = open(os.getcwd() + '/hostapd.conf','w') #~ f.writelines(lout) #~ f.close() #writelog('created: ' + os.getcwd() + '/hostapd.conf') #start hostapd #s = 'hostapd -B ' + os.path.abspath('run.conf') s = 'hostapd -B ' + os.getcwd() + '/run.conf' print(s) cli.writelog('running hostapd') #cli.writelog('sleeping for 2 seconds.') cli.writelog('wait..') cli.execute_shell('sleep 2') r = cli.execute_shell(s) cli.writelog(r) print('hotspot is running.') return