Manuell zu drahtlosen Netzwerk verbinden

Ich nutze momentan mein altes Netbook zum experimentieren als Server und habe deswegen ein minimales Debian installiert. Um es nicht schon im Leerlauf zu überlasten habe ich keinen X-Server oder etwas ähnliches installiert, welches mir einen Networkmanager bescheren könnte und war daher gezwungen die Verbindung zu meinem lokalen WLAN manuell aufzubauen.

Da die Verbindung automatisch bei jedem Systemstart aufgebaut werden soll, habe ich mir zwei Skripte wlan-start.py und wlan-stop.py geschrieben welche ich in einer /etc/init.d/wlan aufrufe:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#!/bin/bash
#/etc/init.d/wlan

case "$1" in
    start)
        /root/scripts/wlan-start.py
        ;;
    stop)
        /root/scripts/wlan-stop.py
        ;;
    *)
        echo "Usage: /etc/init.d/wlan {start|stop}"
        exit 1
        ;;
esac

exit 0

Ein anschließendendes:

# update-rc.d wlan defaults

sorgt für das Aufrufen beim Systemstart.

Die Zugangsdaten der wpa2 Netze speichere ich unter /etc/wlan/SSID.conf wobei SSID gegen die entsprechende WLAN-SSID zu ersetzen ist:

1
2
3
4
5
6
7
8
9
#!/usr/bin/python3

import os

ssid = input("SSID: ")
password = input("Password: ")

os.system("wpa_passphrase %s %s > /etc/wlan/%s.conf" %(ssid, password, ssid))
print("Config file was written to: /etc/wlan/%s.conf" %ssid)

(wpa_passphrase aus Paket: wpasupplicant)
Das wlan-start.py-Skript muss nun nur noch die gefundenen mit den bekannten SSIDs aus dem /etc/wlan-Verzeichnis abgleichen und ggf. die entsprechende .conf-Datei laden.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/usr/bin/python3

import os
import subprocess
import sys

FNULL = open(os.devnull, 'w')

print("Searching for known wireless networks...")
conffile = ""
try:
    subprocess.check_call(["ifconfig", "wlan0", "up"], stdout=FNULL, stderr=subprocess.STDOUT)
    output = subprocess.check_output(["iwlist", "wlan0", "scan"], universal_newlines=True)
    ssids = [line.strip()[7:-1] for line in output.split('\n') if 'ESSID:' in line]
    for ssid in ssids:
        f = "/etc/wlan/" + ssid + ".conf";
        if os.path.isfile(f):
            conffile = f
            break
    if conffile == "":
        print("No known wireless networks found")
        sys.exit(0)
    print("Found network: %s" %ssid)
except:
    print("An error occured while searching for wireless networks.")
    sys.exit(1)

print("Connecting...")
try:
    subprocess.check_call(["wpa_supplicant", "-B", "-iwlan0", "-c" + conffile, "-Dwext"], stdout=FNULL, stderr=subprocess.STDOUT)
    subprocess.check_call(["dhclient", "wlan0"], stdout=FNULL, stderr=subprocess.STDOUT)
except:
    print("An error occured. Cannot connect to wireless network.")
else:
    print("Successfully connected to %s" %ssid)

(Für den Scann-Vorgang mit iwlist wird das Paket wireless-tools benötigt.)

Der vollständigkeitshalber hier auch noch das wlan-stop.py-Skript:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#!/usr/bin/python3

import subprocess

try:
    subprocess.check_call(["dhclient", "-r", "wlan0"])
    subprocess.check_call(["ifconfig", "wlan0", "down"])
except:
    print("An error occured while shutting down wlan0")
else:
    print("Shutting down wlan0 was successful")

Letzte Aktualisierung: 2014-02-24 18:30:43