Schrift
[thread]7232[/thread]

Probleme mit doppelter for-Schleife



<< |< 1 2 >| >> 11 Einträge, 2 Seiten
An0
 2005-08-26 04:06
#57389 #57389
User since
2005-08-26
2 Artikel
BenutzerIn
[default_avatar]
Hallo erstmal.

Also, das was ich hier mache, soll so eine Art provisorischer WLAN-Scanner werden.
Ich suche also permanent mit iiwlist wlan0 scan nach Accesspoints.

Der ganze Murks kommt dann in einen Array und der wird dann nach MAC, ESSID und Encryption-Status durchsucht.

Jedenfalls habe ich zum Schluss 3 neue Arrays. (@MAC @ESSID @ENC)

Jetzt kommt auch schon mein Problem.

Wird ein neuer Accesspoint gefunden, wird dieser dann ausgegeben. Es ist aber die Regel, dass man bei dem ganzen gescanne den gleichen Accesspoint mehrmals findet.

Dieser soll dann aber nicht hundert mal ausgebenen werden.
Ich kam daher auf die genieale Idee alle gefundenen AP's in einen Extra-Array zu schreiben.
Da verschiedene AP's auch die gleichen ESSID's haben können entschied ich mich sie durch die MAC's
zu unterscheiden.


Meine Variante:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
my @known_mac = ("foo","bar");
my @last_scan_mac = ("foo","karl","heinz","bar");
# Hier sind also nur karl und heinz neu
    for my $a (@last_scan_mac) {
        for my $b (@known_mac) {
            if ($a =~ $b) {
               
 print "$a ist bekannt";
            }
        }
    }


Meine Frage ist jetzt, wie bekomme ich $a aus @last_scan_mac raus und,
wie bekomme ich die zu der MAC gehörende ESSID und ENC aus den anderen
Arrays?

$MAC[1] entspricht hier $ESSID[1].

Besten Dank\n\n

<!--EDIT|An0|1125014989-->
J-jayz-Z
 2005-08-26 04:45
#57390 #57390
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Lass doch einfach einen "counter" mitlaufen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
my $count = 0;
my @known_mac = ("foo","bar");
my @last_scan_mac = ("foo","karl","heinz","bar");
# Hier sind also nur karl und heinz neu
for my $a (@last_scan_mac) {
for my $b (@known_mac) {
if ($a =~ $b) {
print "$a ist bekannt\n";
print "ESSID:$ESSID[$counter]\n";
print "ENC:$ENC[$counter]\n";
}
$count++;
}
}
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
esskar
 2005-08-26 04:47
#57391 #57391
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
ich würde das ganze über einen hash von hashes lösen...
der key des "haupthashes" ist die MAC addresse; der wert ist dann eine hashreferenz mit ESSID und ENC (ggf. nochmal MAC) als schlüssel

wenn du neu scannst, kannst du somit relative schnell entscheiden, ob der AP schon vorhanden ist
J-jayz-Z
 2005-08-26 05:38
#57392 #57392
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Das hatte ich auch überlegt. Aber so ist das schwierig, zu testen, welche schon gefunden worden sind.
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
vayu
 2005-08-26 11:31
#57393 #57393
User since
2005-01-13
782 Artikel
BenutzerIn
[default_avatar]
wieso? soll er halt die MAC adresse als key nehmen und jedes mal abrufen.

wenn undef kommt, gibts des no ned
Taulmarill
 2005-08-26 12:33
#57394 #57394
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
die existenz eines hashkeys sollte man mit der funktion exists prüfen, da dies auch dann funktioniert, wenn der wert zu dem hashkey undef ist.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
vayu
 2005-08-26 14:19
#57395 #57395
User since
2005-01-13
782 Artikel
BenutzerIn
[default_avatar]
ahjo ich hätt halt hinter mit defined() den wert abgefragt, aber hast natürlich recht. Ist sauberer so.
esskar
 2005-08-26 16:45
#57396 #57396
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=vayu,26.08.2005, 12:19]ahjo ich hätt halt hinter mit defined() den wert abgefragt, aber hast natürlich recht. Ist sauberer so.[/quote]
nein;
es ist so gemeint

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
use strict;
use warnings;

my %hash = (
foo => undef,
);

print exists($hash{foo})."\n";
print defined($hash{foo})."\n";
print exists($hash{bar})."\n";
print defined($hash{bar})."\n";
Gast Gast
 2005-08-26 16:55
#57397 #57397
@esskar: Der Vollständigkeit halber hätte ich noch ein
Code: (dl )
print exists( $hash{bar} ) . "\n";

drangehängt. Sobald man sich nämlich auf exists verlassen möchte, wird das wohl wichtig ;)
An0
 2005-08-26 19:22
#57398 #57398
User since
2005-08-26
2 Artikel
BenutzerIn
[default_avatar]
Vielen Dank für die Vorschläge, allerdings reicht für meinen Zweck die Idee mit dem Counter völlig aus.

Mit Hash & Co hatte ich auch schon rumgespielt, es war aber weinger von Erfolg gekrönt.

Das mag jedoch an meinen relativ geringen Perlkenntnissen gelegen haben :D.\n\n

<!--EDIT|An0|1125069943-->
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2005-08-26 04:06.