Hi,
Genaueres Thema Die Aufgabe lautet mittels PHP alle verfügbaren Clients im Netz zu ermitteln und möglichst viele Daten dieser Clients anzuzeigen.
Das funktioniert nicht. Überhaupt nicht.
Du kannst über Clients nur etwas erfahren, wenn sie bei Dir anklopfen, nicht umgekehrt.
Anders, wenn es sich um Server handelt. Der Begriff "Server" ist hier ganz allgemein und meint nur, das der Rechner auf Anfrage reagiert. Wie und womit ist hier nebensächlich.
Hier hüpft nun das Thema "Netzwerksicherheit" in's Bild und damit auch der Sinn hinter Deiner Aufgabe: es sollen alle lokalen Netzwerkknoten darauf überprüft werden, ob sie als Server fungieren. Tun sie das ist etwas faul im Staate Dänemark, das weiterer Überprüfung bedarf. Meist ist es zwar nur ein ausschließlich lokal betriebener Messaging-Service o.ä., kann aber auch ein Trojaner o.ä. sein.
Zu diesem Zwecke und Behufe gibt es sehr gute Tools (am bekanntesten dürfte da wohl NMAP sein). Wenn Du bei denen mal unter die Haube schaust wirst Du feststellen, das das alles sehr viel ist. Viel zuviel, um das "mal eben" in PHP zu schreiben. Es geht also nur um's Verstehen.
Und wenn's um's Verstehen geht bist Du hier bei selfhtml.org schonmal bestens aufgehoben ;-)
Es gibt im Normalfall 2^16 Ports. Die unteren 1024 (Port 0-1023) sind zwar die interessanteren, es sollte sich in diesem Fall aber nicht drauf beschränkt werden. Die wichtigen Datenübertragungsprotokolle sind UDP und TCP. Macht also 2^17 Prüfstellen pro IP. Dazu kämen dann noch die verschiedenen Protokolle der Dienste, aber auf Offenheit eines Ports kann auch so geprüft werden (es gibt aber einige Ausnahmen).
Manche Dienstprotokolle sind einfach zu testen, wie z.B. HTTP. Da antwortet der Webserver immer mit irgendwas (auch hier:es gibt aber einige Ausnahmen). Auch ist es evt möglich z.B. mit HEAD einige Informationen über den Web-Server abzufragen, wenn er das zuläßt.
Einige der o.a. Ausnahmen:
- der Server hinter der befragten IP kann alle Anfragen von Deiner IP zurückweisen (REJECT) oder gar fallenlassen (DROP). Bei letzterem weißt Du noch nicht einmal, ob hinter der IP überhaupt eine aktive Kiste sitzt.
- der Server ist evt nicht sehr gesprächig oder fälscht gar seine Identität oder ist gar kein "richtiger" Server sondern ein sogenannter "honeypot".
- der Port öffnet sich evt nur mit "geheimem Klopfzeichen"
Alleine schon aufgrund dieser Ausnahmen kann die eingangs erfolgte Beschränkung auf Clients vollständig entfallen. Es gilt auch für Server: es funktioniert prinzipiell nicht.
Und bitte nicht um Antworten die z.B. lauten „Dafür ist PHP nicht geeignet“ oder „Vielleicht solltest du erstmal PHP erlernen“… denn diese bringen mich nicht weiter und da ich nicht mehr soviel Zeit habe wäre es nett wenn ich hier Support bekommen würde.
Nunja, so ganz ohne PHP Kenntnisse geht's nicht, aber das dürfte Dir schon klar sein. Du hast ja auch schon ein Snippet zusammengefummelt (Ich geh' einfach mal davon aus, das Du das auch tatsächlich selber warst). Einfach den Loop auf alle Ports erweitern und noch UDP mit in's Boot nehmen (bitte beachte dabei die Hinweise auf http://de3.php.net/manual/en/function.fsockopen.php).
Dann evt bei allen zugewiesenen Ports noch zusätzlich das Protokoll des zugewiesenen Dienstes ausprobieren. Zwei einfache Beispiele (einmal TCP, einmal UDP) sollten da reichen.
so short
Christoph Zurnieden