Tex
got r00t?
|
hat irgendjemand eine ahnung, wie man dieses script noch beschleunigen könnte: <?
for ($i=0;$i<10;$i++)
{
$host = "ping 192.168.6.".$i." -n 1 -w 5";
$xyz = `$host`;
$string = "Antwort";
$container = $xyz;
echo $host;
if(strstr($container,$string)) {
echo " found it.<br>";
} else {
echo " not found.<br>";
}
}
?>
es schaut einfach, ob 10 aufeinanderfolgende hosts vorhanden sind... es dauert ca. 4 sekunden. bei 100 hosts dauert es dann schon sehr lange. wie könnte man es beschleunigen.
Bearbeitet von Tex am 11.11.2001, 11:54
|
Bimminger
christoph-bimminger.at
|
php is halt mal langsam... wie wärs mit ner andren umgebung? zB eine in c++ geschriebene .exe, die am server als CGI arbeitet? wär wohl schneller.
mfG CB
|
Guest
Deleted User
|
php is halt mal langsam... wie wärs mit ner andren umgebung? zB eine in c++ geschriebene .exe, die am server als CGI arbeitet? wär wohl schneller.
mfG CB hm, in dem fall ists wohl eher die responsegeschwindigkeit des pings, der das ding verlangsamt. um eine ping-response zu beschleunigen, kannst wohl recht wenig machen, wennst nicht gerade auf eine T3 leitung umsteigen willst. oder du schreibst das ping proggi um, sodass die gesendeten pakete kleiner werden. ist wohl aber auch nicht sinn der sache...
|
Tex
got r00t?
|
nein, das ist wirklich php, das so langsam ist... das ganze befindet sich in einem lokalen netzwerk und über die command-line geht es viel schneller. das script soll ja in ein php-projekt eingebunden werden und so ist eine andere sprache keine gute lösung. (später soll er mir in ein drop-down-menü die vorhandenen hosts anzeigen und dann mit php weiterverarbeiten)
|
JonnyB
Blutiger Neubei
|
Wie wär's damit, daß Du in der for-Schleife nur die Hosts abfragst und die Adressen, von denen eine Antwort kommt, in einem Feld speicherst. Die Ausgabe machst Du dann außerhalb der Schleife. Hat in meinen Augen den Sinn, daß das Speichern eines Wertes in einem Feld (oder notfalls auch in einem String, den Du dann für die Ausgabe wieder zerlegst) AFAIK deutlich schneller geht als eine Ausgabe. Den Ausdruck >>$string="Antwort"<< Würde ich oberhalb der for-Schleife verwenden, daran ändert sich ja nix und es ist nur eine unnötige zusätzliche Anweisung, die er bis zu 255 mal ausführen muß.
|
xdfk
pädagogisch wertvoll
|
naja theoretisch müsstest du die pings nur in kurzen abständen hintereinander los senden und danach wieder getrennt empfangen..... dadurch blockieren sich die pings nicht gegenseitig.. wie man das aber praktisch ausführt.. null ahnung
|
Bimminger
christoph-bimminger.at
|
einfach als CGI schreiben, und die CGI App gibt dann mit cout (in c++) den html source retour der angezeigt wird - also als php script mit combo box und so - das könnt gehn.
mfG CB
|
Tex
got r00t?
|
@johnny: thx, für deinen tip, aber es geht auch nicht wirklich schneller @xdfk: naja, ob das mit php geht
|
Tex
got r00t?
|
@bimminger: sorry, ich kenn mich mit cgi und c++ im web etc. nicht aus. könntest du mir da ein tutorial oder eine seite empfehlen, wo man so etwas ähnliches ansehen könnte.
|
Bimminger
christoph-bimminger.at
|
grundvoraussetzung is mal dass... der webserver deine .EXE CGI-Anwendung erlaubt. dann einfach über cin die "Eingaben" aus dem HTML abfragen, und mit count wieder eine HTML page aufbauen. eine richtige doku dafür is ma net bekannt, aber die CGI-Grundlagen werdn in selfhtml behandelt: http://www.teamone.de/selfhtmlwerde aber bei weiteren fragen gerne helfen - habs zwar selber nu nie gmacht, wird aber gehn... mfG CB
|
Tex
got r00t?
|
eine frage:
wie kann man in c++ am einfachsten einen ping setzen? ich stelle mir das ungefähr so vor:
if(ping(192.168.6.1)){...
|
Tex
got r00t?
|
ich bin gerade draufgekommen, dass das ganze tatsächlich an dem ping programm unter dos liegt. wenn ich nur gültige ip-adressen abfrage geht es extrem schnell. es nützt auch nichts, wenn ich dem ping befehl parameter anhänge, sodass er das timeout bereits nach 1 ms gibt bzw. er nur 1 byte sendet. es dauert immer so lange...
|
Bimminger
christoph-bimminger.at
|
musss dann unbedingt ein PING sein? oder geht vielleicht a einfach a socket connection zum andren rechner aufbauen und schaun welche fehlermeldung kommt... sorry, bei detailfragen weis i da a net weiter, aber eine idee wärs ja.
mfG CB
|
that
Hoffnungsloser Optimist
|
Das einzige was hier wirklich hilft ist, die Pings parallel abzusetzen. Was willst du eigentlich bezwecken? Es ist eher unüblich, dass ein Webserver ein Subnet scannen muss....
|
Tex
got r00t?
|
naja, ich will schaun, welche rechner im netz laufen und dann bei denen, die laufen informationen abfragen, die ein winziger dort installierter webserver dort schickt...
edit: aber ich glaub' ich lass es jetzt so. länger wie 30-40 sekunden muss man ja nicht warten. und so oft muss das ja auch nicht durchgeführt werden.
|