Exemple #1
0
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
Exemple #2
0
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
Exemple #3
0
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.')
Exemple #4
0
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
Exemple #5
0
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