Ich habe mir für das per VPN erreichbare NAS in der Firma ein PHP-Script
gebaut, das per WOL den Server wecken kann. Das finktioniert im Prinzip.
Nun, auf den Geschmack bekommen, möchte ich auch sehen, ob der Server
nun schon gestartet ist. Da ein echtes ICMP per purem PHP wohl nicht
möglich ist, habe ich ein Socket erzeugt und versuche mit diesem auf den
Port 139 ("windows net share") zu connecten. Klappt das, trenne ich die
Verbindung sofort wieder und ich kann das Ergebnis in Form einer
grafischen "LED" anzeigen.
Bei mir zuhause mit einem XP-Rechner und einem Qnap-NAS als Webserver
klappt das problemlos. In der Firma läuft WinServer 2012 R2 und eine
Synology als Webserver - da geht das nicht. Da bekomme ich immer den
Error 101 ("Network is unreachable"), was aber so dirket Quatsch ist.
Wohl gemerkt, die WOL-Routine funktioniert in beiden Umgebungen, nur das
Pseudo-Ping nicht. Woran könnte das liegen? Die Firewall ist für lokale
Adressen auf dem Server aus.
Jörg Esser schrieb:> Ich meine Socket für Ping benötigen unter linux auch root rechte.> Dort> geht es leider ohne root auch nicht.> Warum sollte es unter windows anders sein?
Ich mache ja kein echtes Ping, sondern versuche per TCP auf einen
offenen Port der Windows-PC zu connecten.
Zuhause benutze ich ein Qnap-NAS (Linux) und einen XP-PC. Geht.
Im Büro benutze ich ein Synology-NAS (Linux) und einen W2K12-Rechner.
Heht nicht.
Win-Firewalls sind aus.
Ich sehe da nicht wirklich einen tiefgreifenden Unterschied, obwohl er
offenbar besteht. Nur wo?
Ich würde mal stattdessen Port 445 versuchen (SMB/CIFS direkt über TCP),
Kommunikation über Port 139 ist mit mehr Overhead verbunden und
eigentlich veraltet (aber aus Kompatibilitätsgründen manchmal zusätzlich
aktiv)
Jörg Esser schrieb:> Ich meine Socket für Ping benötigen unter linux auch root rechte. Dort> geht es leider ohne root auch nicht.> Warum sollte es unter windows anders sein?
Raw-Sockets sind dort (unter halbwegs aktuellen Windows-Versionen)
selbst mit Admin-Rechten stark eingeschränkt ;D
Es gibt zum Pingen allerdings APIs die keine speziellen Berechtigungen
erfordern (Die "IcmpSendEcho"-Funktionen - oder eben "ping.exe" aufrufen
;D)
Frank schrieb:> Ich mache ja kein echtes Ping, sondern versuche per TCP auf einen> offenen Port der Windows-PC zu connecten.
Du hast bislang nicht erwähnt, wo Dein PHP-Script läuft. Auf dem
Webserver des jeweiligen NAS? Daß der bei NAS unterschiedlicher
Hersteller unterschiedlich konfiguriert sein könnte, das hast Du schon
in Betracht gezogen?
Irgendwie habe ich wohl nicht genau genug beschrieben, was mein Problem
ist, denn die Antworten gehen ziemlich durcheinander - so dass ich nicht
einschätzen kann, welche Hinwiese nützlich sind und welche unpassend.
Also nochmal:
Mittels PHP-Skript, das auf dem Webserver eines NAS läuft, soll per WOL
ein Windows-Server geweckt werden. DAS funktioniert.
Zusätzlich soll auf der Mini-Webseite dargestellt werden, ob bzw. wann
der Server "erwacht" und betriebsbereit ist. Dazu würde sich ein Ping
anbieten, was aber per PHP nativ nicht möglich ist.
Also habe ich nach einer Alternative gesucht. Die besteht darin, einen
TCP-Socket zu öffnen und ein Connect auf einen offenen Port der
Windows-Maschine zu versuchen, ohne irgendwelche Protokolle
nachzustellen. Alleine die Tatsache, dass ein Connect möglich ist (und
der ohne jede Kommunikation gleich wieder geschlossen wird - wie bei
einem Portscanner), sollte ja nachweisen, dass der Server "lebt".
Diese Technik habe ich zuhause zwischen einem Qnap und einem XP-PC
getestet und sie funktioniert. Im Büro zwischeneiner Synology und einem
Windows-Server 2012 geht Nichts.
Vermutlich liegt das an der Konfiguratuion der Synology, denn der Server
hat offene Ports (ist ja im LAN), wie ein Portscan beweist.
Aber wo kann ich da suchen? Wer konfiguriert ein PHP so, dass keine
Sockets funktionieren?
Frank schrieb:> Aber wo kann ich da suchen?
Lad auf beiden mal eine PHP-Datei mit
1
<?php
2
phpinfo();
3
?>
hoch und vergleich die Einstellungen. Achtung, dieses Wissen ist noch
aus PHP4-Zeiten, kann also veraltet sein.
> Wer konfiguriert ein PHP so, dass keine> Sockets funktionieren?
Braucht man die für einen "normalen" Webserver? Ja eigentlich nicht, und
was abgeschalten ist kann auch nicht missbraucht werden.
Ich habe das mit der Funktion phpinfo gemacht und es gibt tatsächlich
Unterschiede zwischen Qnap und Synology. In der Wirkung muss das aber
nur TCP-Sockets betreffen, denn die WOL-Funktion klappt auf beiden
Systemen - die wird mit UDP-Sockets realisiert.
Auf den Qnap (PHP-TCP-Sockets funktionieren) sieht das "configure
command" so aus (sorry für das unformatierte Chaos, is aber so):
@Uhu
Genau so habe ich es nach missglückten Versuchen mit der PingSocket
Version von php.net auch gemacht. Allerdings braucht php die rechte für
exec. ;)
Kann bei ihm also auch nach hinten losgehen.