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.
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?
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):
1 | './configure' '--prefix=/root/daily_build/4.0.2/Model/TS-220/../../NasMgmt/HTTP/php5' '--with-config- file-path=/etc/config/php.ini' '--with-config-file-scan-dir' '--with-apxs2=/usr/local/apache/bin/apxs' '--enable-ftp' '--enable-sockets' '--with-gettext' '--with-zlib' '--with-jpeg-dir' '--with-png-dir' '--with-gd' '--with- freetype-dir=/usr' '--enable-gd-native-ttf' '--enable-mbstring' '--with-openssl-dir' '--with-libxml-dir=/opt /cross-project/arm/marvell/arm-none-linux-gnueabi/libc/marvell-f/usr' '--enable-sqlite-utf8' '--with- mysql=/root/daily_build/4.0.2/Model/TS-220/../../DataService/DBMS/mysql' '--enable-shared' '--with- mcrypt' '--enable-zend-multibyte' '--with-iconv=/opt/cross-project/arm/marvell/arm-none-linux-gnueabi /libc/marvell-f/usr' '--enable-exif' '--with-pdo-mysql=/root/daily_build/4.0.2/Model/TS-220/../../DataService /DBMS/mysql' '--with-curl=/root/daily_build/4.0.2/Model/TS-220/../../SysUtil/curl-7.21.0' '--with- curlwrappers=/root/daily_build/4.0.2/Model/TS-220/../../SysUtil/curl-7.21.0' '--with-xsl=/opt/cross-project /arm/marvell/arm-none-linux-gnueabi/libc/marvell-f/usr' '--with-openssl' '--with-pic=yes' '--with-mysqli' '--enable-calendar' '--enable-bcmath' '--with-ldap=/opt/cross-project/arm/marvell/arm-none-linux-gnueabi /libc/marvell-f/usr' '--with-imap=/opt/cross-project/arm/marvell/arm-none-linux-gnueabi/libc/marvell-f/usr' '--with-imap-ssl=/opt/cross-project/arm/marvell/arm-none-linux-gnueabi/libc/marvell-f/usr' '--enable-dba' '--enable-dbase' '--enable-shmop' '--enable-wddx' '--enable-zip' '--with-xmlrpc' '--enable-soap' '--enable- pcntl' |
Auf der Synology (PHP-TCP-Sockets funktionieren nicht) sieht das "configure command" so aus:
1 | './configure.syno' '--host=i686-linux-gnu' '--target=i686-linux-gnu' '--build=i686-pc-linux' '--with- ldap=shared,/usr/syno' '--with-ldap-sasl=/usr/syno' '--prefix=/usr/syno/php' '--with-apxs2=/usr /syno/apache/bin/apxs' '--disable-cgi' '--with-config-file-path=/usr/syno/etc' '--with-config-file-scan- dir=/usr/syno/etc/php' '--with-libxml-dir=/usr/syno' '--with-bz2=/usr/syno' '--with-zlib=shared,/usr/syno' '--enable-bcmath=shared' '--enable-syno_compiler=shared' '--enable-calendar=shared' '--with- curl=shared,/usr/syno' '--enable-dba=shared' '--enable-exif=shared' '--enable-ftp=shared' '--with- gd=shared' '--with-jpeg-dir=/usr/syno' '--with-png-dir=/usr/syno' '--with-freetype-dir=/usr/syno' '--enable- gd-native-ttf' '--with-gettext=shared' '--with-iconv=shared,/usr/syno/libiconv' '--with-imap=shared,/source /imap-2007e' '--with-imap-ssl=shared,/usr/syno' '--enable-mbstring=shared' '--with-mcrypt=shared,/usr /syno' '--with-mysql=shared,/usr/syno/mysql' '--with-mysqli=shared,/usr/syno/mysql/bin/mysql_config' '--with-openssl=shared,/usr/syno' '--with-pdo-mysql=shared,/usr/syno/mysql' '--with- pdo-pgsql=shared,/usr/syno/pgsql' '--with-pgsql=shared,/usr/syno/pgsql' '--enable-shmop=shared' '--enable-soap=shared' '--enable-sockets=shared' '--enable-wddx=shared' '--with-xmlrpc=shared' '--enable-zip=shared' '--with-sqlite3=static,/usr/syno/sqlite3' '--with-pdo-sqlite=static,/usr/syno/sqlit |
Abgesehen davon, dass es sichtbare Unterschiede gibt, wie ändere ich die auf der Synology? Bin kein Linux-Experte ...
@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.
Kannst du in /proc/net/arp nachsehen ob die IP "online" ist? Die Info ist ggf. etwas zeitverzögert. Gruß Roland
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.