Neue Antwort schreiben 
 
Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
[Perl] Jemand ne Idee, was an diesem Script nicht stimmt?
mrshadowtux
Unregistered

 
Beitrag #1
[Perl] Jemand ne Idee, was an diesem Script nicht stimmt?
Hallo Leute,
bin momentan dabei ein kleines Script zu schreiben, welches entsprechend des gewünschten WLANs eine woa_supplicant.conf erstellt, sodass sich auch ohne NetworkManager eine Verbindung in ein wpa-geschütztes WLAN herstellen läßt. Leider funktioniert die Ausführung des Scriptes nicht, es kommen folgende Fehler:
Zitat:print() on closed filehandle WPACONFIG at magic.pl line 91, <STDIN> line 4.
print() on closed filehandle WPACONFIG at magic.pl line 92, <STDIN> line 4.
print() on closed filehandle WPACONFIG at magic.pl line 93, <STDIN> line 4.
print() on closed filehandle WPACONFIG at magic.pl line 94, <STDIN> line 4.
print() on closed filehandle WPACONFIG at magic.pl line 95, <STDIN> line 4.
print() on closed filehandle WPACONFIG at magic.pl line 96, <STDIN> line 4.
print() on closed filehandle WPACONFIG at magic.pl line 97, <STDIN> line 4.
Use of uninitialized value $wlan_key in concatenation (.) or string at magic.pl line 98, <STDIN> line 4.
print() on closed filehandle WPACONFIG at magic.pl line 98, <STDIN> line 4.
print() on closed filehandle WPACONFIG at magic.pl line 99, <STDIN> line 4.
Initializing interface 'eth1-D' conf '/etc/conf.d/wpa_supplicant' driver 'default' ctrl_interface 'N/A' bridge 'N/A'
Configuration file '/etc/conf.d/wpa_supplicant' -> '/etc/conf.d/wpa_supplicant'
Reading configuration file '/etc/conf.d/wpa_supplicant'
Failed to read or parse configuration '/etc/conf.d/wpa_supplicant'.
Failed to add interface eth1-D
Cancelling scan request
Cancelling authentication timeout

Hier mal der Quelltext:
Code:
#!/usr/bin/perl -w

# MagicWLAN
# Autor: Alexander Feld <shadowing@fsfe.org>

system("clear");

print "Willkommen bei MagicWLAN!\n";
print "=========================\n\n";


if($> == 0 || $< == 0)
{ #UID prüfen
    print "Dieses Tool wurde geschrieben, um bei der Verbindung mit WLAN-Netzen ohne Networkmanager zu helfen. Damit die Verbindung auch zu verschlüsselten WLANs klappt, muss wpa supplicant installiert sein.\n\n";
    print "Bitte halte ein paar Informationen bereit, damit dieses Tool seinen Dienst verrichten kann:\n";
    print "- Name deines WLAN-Interfaces (in der Regel wlan0 oder eth1)\n";
    print "- SSID deines WLANs\n";
    print "- Verwendete Verschlüsselung (Keine / WEP / WPA / WPA2)\n";
    print "- (falls verschlüsselt) den notwendigen Key\n\n";


    print "Wollen wir beginnen? (J/N) ";
    $antwort=<STDIN>;
    chomp($antwort);
    print "\n";
    if($antwort eq "J" || $antwort eq "j")
    {
        print "\n\n";
        print "Alles klar, dann wollen wir mal!\n";
        print "Welches Interface wird für WLAN verwendet?\t";
        $wlan_dev=<STDIN>;
        chomp($wlan_dev);
        print "\nWie lautet die SSID deines WLANs?\t";
        $wlan_ssid=<STDIN>;
        chomp($wlan_ssid);
        print "\n\nWelche Verschlüsselung wird verwendet?\n";
        print "a\t Keine\n";
        print "b\t WEP\n";
        print "c\t WPA Personal\n";
        print "d\t WPA2 Personal\n\n";
        $wlan_crypt=<STDIN>;
        chomp($wlan_crypt);
        
        unless($wlan_crypt eq "a")
        {
            print "Wie lautet der Key?\t";
            $wlan_key=<STDIN>;
            chomp($wlan_key);
        };
        
        system("ifconfig ".$wlan_dev." up");
        
        if($wlan_crypt eq "a")
        { # Unverschlüsselt
            system("iwconfig ".$wlan_dev." essid ".$wlan_ssid);
        }
        
        elsif($wlan_crypt eq "b")
        { # WEP
            open(WPACONFIG, ">/etc/conf.d/wpa_supplicant");
            print WPACONFIG "network={\n";
            print WPACONFIG "ssid=\"".$wlan_ssid."\"\n";
            print WPACONFIG "scan_ssid=1\n";
            print WPACONFIG "key_mgmt=NONE\n";
            print WPACONFIg "wep_tx_keyidx=0\n";
            print WPACONFIG "wep_key0=\"".$wlan_key."\"\n";
            print WPACONFIG "}\n";
            close(WPACONFIG);
            system("sudo wpa_supplicant -i ".$wlan_dev."-D wext -c /etc/conf.d/wpa_supplicant -d");
        }
        
        elsif($wlan_crypt eq "c")
        { # WPA1
            open(WPACONFIG, ">/etc/conf.d/wpa_supplicant");
            print WPACONFIG "network={\n";
            print WPACONFIG "ssid=\"".$wlan_ssid."\"\n";
            print WPACONFIG "scan_ssid=1\n";
            print WPACONFIG "proto=WPA\n";
            print WPACONFIG "key_mgmt=WPA-PSK\n";
            print WPACONFIG "pairwise=TKIP\n";
            print WPACONFIG "group=TKIP\n";
            print WPACONFIG "psk=\"".$wlan_key."\"\n";
            print WPACONFIG "}\n";
            close(WPACONFIG);
            system("sudo wpa_supplicant -i ".$wlan_dev."-D wext -c /etc/conf.d/wpa_supplicant -d");
        }
        
        elsif($wlan_crypt eq "d")
        { # WPA2
            open(WPACONFIG, ">/etc/conf.d/wpa_supplicant");
            print WPACONFIG "network={\n";
            print WPACONFIG "ssid=\"".$wlan_ssid."\"\n";
            print WPACONFIG "scan_ssid=1\n";
            print WPACONFIG "proto=RSN\n";
            print WPACONFIG "key_mgmt=WPA-PSK\n";
            print WPACONFIG "pairwise=CCMP\n";
            print WPACONFIG "group=TKIP\n";
            print WPACONFIG "psk=\"".$wlan_key."\"\n";
            print WPACONFIG "}\n";
            close(WPACONFIG);
            system("sudo wpa_supplicant -i ".$wlan_dev."-D wext -c /etc/conf.d/wpa_supplicant -d");
        };
        
        print "\n\nSoll die Verbindung bei jedem Bootvorgang hergestellt werden? (J/N)\t";
        $jederstart=<STDIN>;
        chomp($jederstart);
        if($jederstart eq "J" || $jederstart eq "j")
        {
            open(RCLOCAL, ">>/etc/rc.local");
            if($wlan_crypt eq "a")
            {
                print RCLOCAL "sudo wpa_supplicant -i ".$wlan_dev."-D wext -c /etc/conf.d/wpa_supplicant -d";
            }
            else
            {
                print RCLOCAL "iwconfig ".$wlan_dev." essid ".$wlan_ssid;
            };
            close(RCLOCAL);
        };
    };
}
else
{
    die("Dieses Programm muss als root ausgeführt werden\n\n");
};

Hat hier zufällig jemand eine Idee, was da nicht stimmt?

Schöne Grüße
mrshadowtux
25.06.2010 19:42
Diese Nachricht in einer Antwort zitieren
LukeGee Offline
Misanthrop

Beiträge: 2.021
Registriert seit: Dec 2009
Beitrag #2
[Perl] Jemand ne Idee, was an diesem Script nicht stimmt?
Wann genau tritt denn der Fehler auf? Habs kurz bei mir probiert und d ausgewählt und das ging. Auf Anhieb seh ich da nicht direkt was falsches.

Aber ich würde dir btw empfelen auf jeden Fall
Code:
use strict;

zu nutzen und auch bei so sachen wie open() oder close() sowas machen wie:

Code:
open(my $fh, ">", "foobar") or die $!;

Damit er im Falle eines Fehlers nicht weitermacht.
25.06.2010 22:16
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
mrshadowtux
Unregistered

 
Beitrag #3
[Perl] Jemand ne Idee, was an diesem Script nicht stimmt?
Danke für die Antwort!
Der Tipp mit dem or die hat auf jeden Fall geholfen, daran hab ich gesehen, dass er das ganze nur bei Dateien macht, die auch bisher existieren. Das konnte ich durch touchs in den Griff bekommen. An der einen oder andern Stelle waren noch Kleinigkeiten falsch, nun macht das Script was es soll. Lediglich der wpa_supplicant macht mit der erzeugten Datei noch nicht so ganz was er soll - aber damit gehe ich wohl besser in den Linux/Unix Bereich des Forums.
Naja hier mal der aktuelle Quelltext:
Code:
#!/usr/bin/perl -w

# MagicWLAN
# Autor: Alexander Feld <shadowing@fsfe.org>

system("clear");

print "Willkommen bei MagicWLAN!\n";
print "=========================\n\n";


if($> == 0 || $< == 0)
{ # UID prüfen
    print "Dieses Tool wurde geschrieben, um bei der Verbindung mit WLAN-Netzen ohne Networkmanager zu helfen. Damit die Verbindung auch zu verschlüsselten WLANs klappt, muss wpa supplicant installiert sein.\n\n";
    print "Bitte halte ein paar Informationen bereit, damit dieses Tool seinen Dienst verrichten kann:\n";
    print "- Name deines WLAN-Interfaces (in der Regel wlan0 oder eth1)\n";
    print "- SSID deines WLANs\n";
    print "- Verwendete Verschlüsselung (Keine / WEP / WPA / WPA2)\n";
    print "- (falls verschlüsselt) den notwendigen Key\n\n";


    print "Wollen wir beginnen? (J/N) ";
    $antwort_start=<STDIN>;
    chomp($antwort_start);
    print "\n";
    if($antwort_start eq "J" || $antwort_start eq "j")
    {
        print "\n\n";
        print "Alles klar, dann wollen wir mal!\n";
        print "Welches Interface wird für WLAN verwendet?\t";
        $wlan_dev=<STDIN>;
        chomp($wlan_dev);
        print "\nWie lautet die SSID deines WLANs?\t";
        $wlan_ssid=<STDIN>;
        chomp($wlan_ssid);
        print "\n\nWelche Verschlüsselung wird verwendet?\n";
        print "a\t Keine\n";
        print "b\t WEP\n";
        print "c\t WPA Personal\n";
        print "d\t WPA2 Personal\n\n";
        $wlan_crypt=<STDIN>;
        chomp($wlan_crypt);
        
        unless($wlan_crypt eq "a")
        {
            print "Wie lautet der Key?\t";
            $wlan_key=<STDIN>;
            chomp($wlan_key);
        };
        
        system("ifconfig ".$wlan_dev." up");
        
        if($wlan_crypt eq "a")
        { # Unverschlüsselt
            system("iwconfig ".$wlan_dev." essid ".$wlan_ssid);
        };
        
        if($wlan_crypt eq "b")
        { # WEP
            system("touch /etc/wpa_supplicant_magic.conf");
            open(WPACONFIG, ">/etc/wpa_supplicant_magic.conf") or die $!;
            print WPACONFIG "network={\n";
            print WPACONFIG "ssid=\"".$wlan_ssid."\"\n";
            print WPACONFIG "scan_ssid=1\n";
            print WPACONFIG "key_mgmt=NONE\n";
            print WPACONFIg "wep_tx_keyidx=0\n";
            print WPACONFIG "wep_key0=\"".$wlan_key."\"\n";
            print WPACONFIG "}\n";
            close(WPACONFIG);
            system("sudo wpa_supplicant -i ".$wlan_dev." -D wext -c /etc/wpa_supplicant_magic.conf -d");
        };
        
        if($wlan_crypt eq "c")
        { # WPA1
            system("touch /etc/wpa_supplicant_magic.conf");
            open(WPACONFIG, ">/etc/wpa_supplicant_magic.conf") or die $!;
            print WPACONFIG "network={\n";
            print WPACONFIG "ssid=\"".$wlan_ssid."\"\n";
            print WPACONFIG "scan_ssid=1\n";
            print WPACONFIG "proto=WPA\n";
            print WPACONFIG "key_mgmt=WPA-PSK\n";
            print WPACONFIG "pairwise=TKIP\n";
            print WPACONFIG "group=TKIP\n";
            print WPACONFIG "psk=\"".$wlan_key."\"\n";
            print WPACONFIG "}\n";
            close(WPACONFIG);
            system("sudo wpa_supplicant -i ".$wlan_dev." -D wext -c /etc/wpa_supplicant_magic.conf -d");
        };
        
        if($wlan_crypt eq "d")
        { # WPA2
            system("touch /etc/wpa_supplicant_magic.conf");
            open(WPACONFIG, ">/etc/wpa_supplicant_magic.conf") or die $!;
            print WPACONFIG "network={\n";
            print WPACONFIG "ssid=\"".$wlan_ssid."\"\n";
            print WPACONFIG "scan_ssid=1\n";
            print WPACONFIG "proto=RSN\n";
            print WPACONFIG "key_mgmt=WPA-PSK\n";
            print WPACONFIG "pairwise=CCMP\n";
            print WPACONFIG "group=TKIP\n";
            print WPACONFIG "psk=\"".$wlan_key."\"\n";
            print WPACONFIG "}\n";
            close(WPACONFIG);
            system("sudo wpa_supplicant -i ".$wlan_dev." -D wext -c /etc/wpa_supplicant_magic.conf -d");
        };
        
        
        print "\n\nSoll ich per DHCP eine IP holen? (J/N)\t";
        $antwort_ip=<STDIN>;
        chomp($antwort_ip);
        if($antwort_ip eq "J" || $antwort eq "j")
        {
            system("dhclient ".$wlan_dev);    
        };
        
        
        print "\n\nSoll die Verbindung bei jedem Bootvorgang hergestellt werden? (J/N)\t";
        $antwort_jederstart=<STDIN>;
        chomp($antwort_jederstart);
        if($antwort_jederstart eq "J" || $antwort_jederstart eq "j")
        {
            open(RCLOCAL, ">>/etc/rc.local");
            unless($wlan_crypt eq "a")
            {
                print RCLOCAL "sudo wpa_supplicant -i ".$wlan_dev." -D wext -c /etc/wpa_supplicant_magic.conf -d";
            }
            else
            {
                print RCLOCAL "iwconfig ".$wlan_dev." essid ".$wlan_ssid;
            };
            close(RCLOCAL);
        };
    };
}
else
{
    die("Dieses Programm muss als root ausgeführt werden\n\n");
};

Eine feste Variablendeklaration mittels my / use strict werde ich in nächster Zeit auch noch einbauen..
25.06.2010 22:54
Diese Nachricht in einer Antwort zitieren
Neue Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste