Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]7026[/thread]

thread-problem

Leser: 1


<< >> 6 Einträge, 1 Seite
supersucker
 2005-05-31 20:00
#55233 #55233
User since
2005-03-17
118 Artikel
BenutzerIn
[default_avatar]
hallöchen,

ich versuch mir gerade eine sammlung ip-tools zu schreiben, um mehr über perl zu lernen und weil mir nichts besseres als programmierprojekt eingefallen ist....:-)

ein teil dieser tools ist ein portscanner:

Code: (dl )
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#!/usr/bin/perl

use warnings;
use strict;

package IPToolCollection;

use IO::Socket;
use Thread;
#-----------------------------------------------------------------------#
# subroutines # #-----------------------------------------------------------------------#


sub scanPorts() {

our ($remoteHost, $protocol, $startPort, $stopPort) = @_;
my %portStatusH = ();

sub scanSinglePort() {

my $remotePort = shift;
my $portStatusB = "open";


my $socket = new IO::Socket::INET (
PeerAddr => $remoteHost,

PeerPort => $remotePort,
Proto => $protocol,

Type => SOCK_STREAM
);
$portStatusB = "closed" if(!defined($socket));
return ($remotePort,$portStatusB);
}

for my $i ($startPort..$stopPort) {
my $scanPortThread = Thread->new (

\&scanSinglePort,$i
);
}

for my $t (Thread->list()) {
my ($port, $portStatusB) = $t->join();
$portStatusH{$port} = $portStatusB;
}

return %portStatusH;

}

#-----------------------------------------------------------------------#
# main script #
#-----------------------------------------------------------------------#


my %resultH = &scanPorts("127.0.0.1", "TCP", 0, 100);

while(my ($k,$val) = each(%resultH)) {
print "port $k is $val \n";
}


das problem ist nun das die threads überhaupt nichts zurückgeben, mein hash also nach dem durchlaufen immer noch komplett leer ist.

als ausgabe krieg ich:

Code: (dl )
1
2
3
4
Use of uninitialized value in concatenation (.) or string at ./portscanner.pl line 72.
port closed is
Use of uninitialized value in concatenation (.) or string at ./portscanner.pl line 72.
port open is


versteh ich nicht, im hash müsste doch auf jeden fall was stehen, oder hab ich beim thread-erzeugen irgendwas falsch gemacht?

danke für jede hilfe

p.s.: sorry wegen der codeformatierung, der ist eigentlich ordentlich eingerückt, aber die code-tags vom board zerstören meine formatierung regelmässig.......:-(
betterworld
 2005-05-31 20:44
#55234 #55234
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Wenn ich richtig gezählt habe, hast Du gar nicht 72 Zeilen gepastet. Zeig doch bitte einfach mal Zeile 72. Ich vermute nämlich, dass die Variable $kristallkugel in Zeile 72 noch nicht definiert wurde.\n\n

<!--EDIT|betterworld|1117558010-->
supersucker
 2005-05-31 21:01
#55235 #55235
User since
2005-03-17
118 Artikel
BenutzerIn
[default_avatar]
sorry, daran hatt ich nicht gedacht:

Code: (dl )
print "port $k is $val \n";


ist zeile 72, also die vorletzte zeile in meinem code

und mehr als die oben gepostete ausgabe krieg ich nicht, die while-schleife läuft also nur genau zweimal durch.
ptk
 2005-05-31 22:42
#55236 #55236
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
"use Thread" ist deprecated, man benutzt heutzutage "use threads".
supersucker
 2005-06-01 00:13
#55237 #55237
User since
2005-03-17
118 Artikel
BenutzerIn
[default_avatar]
ok,

ich verwende jetzt threads statt Thread.
hab jetzt überall print-anweisungen zum debuggen eingefügt, das macht mich aber auch auch nicht schlauer, die threads scheinen beim joinen nichts zurückzugeben

kann es sein, dass der fehler in folgendem codesegment steckt:

Code: (dl )
1
2
3
4
5
6
for my $i ($startPort..$stopPort) {
my $scanPortThread = threads->new (

\&scanSinglePort,$i
);
}


hier weise ich ja jeden thread der gleichen variablen zu, ich dachte das wäre kein fehler, da meines wissens jeder thread eigenständig ist und ich demzufolge nicht den einen thread mit einem anderen thread überschreiben kann auch wenn ich ihn der gleichen variable zuweise...

oder täusche ich mich da? ich hab leider nur das kamel-buch da was nicht wirklich erhellend bezüglich threads ist.....
und ein gutes tutorial zu threads im netz hab ich auch noch nicht gefunden...

noch jemand ne idee?
ptk
 2005-06-01 13:00
#55238 #55238
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=supersucker,31.05.2005, 22:13]hier weise ich ja jeden thread der gleichen variablen zu, ich dachte das wäre kein fehler, da meines wissens jeder thread eigenständig ist und ich demzufolge nicht den einen thread mit einem anderen thread überschreiben kann auch wenn ich ihn der gleichen variable zuweise...[/quote]
Das sollte stimmen.
<< >> 6 Einträge, 1 Seite



View all threads created 2005-05-31 20:00.