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

Netmonitor (ja, einfach nur viele Hosts schnell an



<< >> 3 Einträge, 1 Seite
Gast Gast
 2004-03-05 20:20
#80595 #80595
Hallöchen,

ich suche eine schnelle Lösung für ein simples Problem.
Man stelle sich vor,

- ein netzwerk mit Switches (managebar), die eine eigen IP besitzen.
- einen Rechner im Netzwerk auf dem XAMPP installiert ist (Apache Mysql und Perl nutze ich davon)
- die passende Software

Die software sollte also eine Latte von Rechnern(im Beispiel mal 20) schnell anpingen können. Jetzt habe ich bisher ein Script welche Net::Ping nutzt. Das ist bei mir aber relativ langsam. Ich habe als timeoutzeit schon 1 eingestellt. nur verkraftet das das Windows 2000 nicht recht und meint irgendwann dass es nix mehr forken könne *krätsche macht es also*.

Soweit so gut. Also beim Pingobjekt ein Timeout von 2 (sek) eingestellt und dann läufts. NUR jetzt braucht das ganze Ding PRO Host ca 2-3 Sekunden.

Wenn man das ganze mal nicht nur auf Switches sondenr auch die Rechner in einem gedachten Netzwerk bezieht kann man sich ausrechnen, dass ein kompletter Durchlauf unter umständen zeimlich lange dauern kann (20 Switches * 24 Ports (Rechner) * 3 sek = 24 Minuten).

So nun hoffe ich, dass jemand schon mal an dem Problem getüftelt hat und mir evtl Tips geben kann, wie ich das ganze ein wenig schneller machen kann.

Eine Idee von mir war, dass ich mehrere Prozesse gleichzeitig laufen lassen kann, aber wie würde so was vom Konzept her am gescheitesten aussehen ?

Hmm
Fragen über Fragen

Danke im voraus
Marc
ptk
 2004-03-05 20:36
#80596 #80596
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
pingomatic kann ein paralleles Massenping durchfuehren. Allerdings benoetigt es Event.pm, und dieses ist fuer Win32 vielleicht noch nicht portiert. Oder mittlerweile doch schon? Ansonsten kann man alternativ versuchen, ueber cygwin was zu machen.
DS
 2004-03-05 20:53
#80597 #80597
User since
2003-08-04
247 Artikel
BenutzerIn
[default_avatar]
Ich hab da mal was für 'ne Session programmiert, das könnte dir helfen...
(Ich weiß, keine fertigen Programme, aber das lag halt schon auf meiner Platte rum... ;))

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
#!perl

################################################################################
### Einstellungen

my $timeout = 0.01;
my $praefix = '192.168.1.';
my @adressen = (2..254);

my $format = ' | %-20s | %-15s | %6s |'."\n";

################################################################################
### Module einbinden

use Net::Ping;
use Socket;
use Benchmark;

################################################################################
### einen "Pinger" initialisieren und konfigurieren

my $np = new Net::Ping('icmp',$timeout);
$np->hires(1);

################################################################################
### und schon geht's los...

print "Suche...

+----------------------+-----------------+--------+
| NAME | IP | ZEIT |
+----------------------+-----------------+--------+\n";
my $startzeit = new Benchmark;
foreach my $ip (map { $praefix.$_ } @adressen) {
my ($erg,$dauer) = $np->ping($ip);
next unless $erg;
my $name = gethostbyaddr(inet_aton($ip),AF_INET) || '[unbekannt]';
$dauer *= 1000;
$dauer = ($dauer > 1) ? '~ '.int($dauer+1).'ms' : '< 1ms';
printf $format,$name,$ip,$dauer;
}
my $endzeit = new Benchmark;
print " +----------------------+-----------------+--------+

fertig!\n";
#print timestr(timediff($endzeit,$startzeit));


Edit: [ perl ] => [ code ]... jedesmal des selbe... *arg*\n\n

<!--EDIT|DS|1078512999-->
<< >> 3 Einträge, 1 Seite



View all threads created 2004-03-05 20:20.