• Hallo,


    Dit keer zit ik eens vast.
    Ik twijfel of jullie een oplossing weten, maar wie niet waagt, niet wint.


    Doel:
    Ik wil vanaf mijn NAS kunnen pingen naar toestellen in mijn huis, liefst via PHP.


    Probleem:
    Mijn NAS draait een PHP versie vast van Synology. Ik kan er dus geen PEAR ping op zetten en ik kan geen exec uitvoeren.


    Ik kan wel pingen naar een poort met onderstaande code:

    Maar het probleem is wel dat mijn toestellen standaard geen open poorten hebben.
    Ik zou overal bv een webserver op moeten installeren die luistert op poort 12345.


    Weten jullie een eenvoudige manier om toch te kunnen pingen naar lokale toestellen?


    Bedankt!

  • Guest, wil je besparen op je domeinnamen? (ad)
  • Ok, ondertussen heb ik exec kunnen aanzetten op mijn Synology NAS.


    vi /etc/php/php.ini
    En voeg daar onder [PHP] volgende regel toe:
    safe_mode_exec_dir =


    /usr/syno/sbin/synoservicectl --restart php-fpm
    /usr/syno/sbin/synoservicectl --restart httpd-user


    Maar goed, dit doe ik liever niet, want dan kan men via exec als er ooit een bug is meteen alles uitvoeren op de server.
    Iemand een beter idee?

  • Volgens mij kun je geen poorten pingen, "ping" werkt niet met poorten.


    Zoals je zelf al aangeeft, je huidige toestand (NAS zonder ping/exec, toestellen zonder open poorten) biedt geen oplossing.


    Je zult deze vicieuze cirkel dus moeten doorbreken door 1 van de 2 zaken aan te passen, door ofwel ping/exec mogelijk te maken op je NAS ofwel poorten open zetten / software te installeren op je apparaten.


    Ofwel dat, of we zien nog een oplossing over het hoofd. Ik zou in eerste instantie iets met je NAS proberen te doen, omdat je dan maar op 1 plek iets aan hoeft te passen en je niet speciaal hiervoor poorten open hoeft te zetten / extra applicaties hoeft te installeren.


    Vraag is wel: wat voor taken vervullen die apparaten dan precies? Waarom is het belangrijk dat je weet dat deze nog actief zijn en waarom zou het aannemelijk kunnen zijn dat deze uitvallen?


    Oeh ik weet het, hang overal webcams op die de monitors van de apparaten observeert :p.

  • Het doel is om mijn Pulse-Station.com domotica automatisch en zelf te laten weten wanneer wie thuis is.
    Als gsm vriendin online is: is ze thuis.
    Idem voor mijn gsm.


    Ik zit echter nog wel ergens vast, nu denk ik dat exec toegestaan is, maar zelfs dan nog is de output raar.


    Code:
    $output = array();
    $test=exec('ping -w 1 192.168.1.1', $output);
    print_r($output);
    echo "\n";
    foreach( $output as $line ) {
    print $line . PHP_EOL ; }


    Output
    Array( [0] => PING 192.168.1.1 (192.168.1.1): 56 data bytes)


    Verwachtte output:
    Array( [0] =>PING 192.168.1.1 (192.168.1.1): 56 data bytes
    64 bytes from 192.168.1.1: seq=0 ttl=64 time=0.737 ms


    Waarom neemt hij die 2de regel met het antwoord niet mee in de $output variabele?
    Het is vast iets simpel dat ik over het hoofd zie?

  • shell_exec geeft een full output maar is wel dangerous, maar zoals ik begrijp wil je alleen een bevestiging of die persoon 'thuis' is. Dan lijkt me dat dit voldoende is?


    Heb hier ook absoluut geen verstand van, maar je kan het proberen.



    PHP
    /bin/ping -c2 -w2 $ip

    Met vriendelijke groeten,
    Tredgy

    Bewerkt één keer, laatst door Tredgy ().

  • Een aantal zaken die mij nog te binnen schieten:


    - mogelijk moet je een limiet aan ping requests geven zoals Tredgy doet, anders wordt "output" misschien opgespaard totdat het proces wordt onderbroken (wat nooit gebeurt)


    - er lijkt een verschil te zijn tussen -w (lowercase) en -W (uppercase); -w is de deadline (in seconden) wanneer ping gestaakt wordt (ik weet ook niet of er in dat geval uberhaupt iets geretourneerd wordt?); -W is de timeout (in seconden) voor elk request/pakketje waarbinnen gewacht wordt op respons


    - mogelijk staat in jouw distributie ping op een compleet andere plaats; stel via het commando which ping vast waar het ping-commando zich bevindt en zorg dat je daar in je shell script naar verwijst


    Een minimale variant zou dus zoiets kunnen zijn:


    /pad/naar/ping -c 3 192.168.1.1


    - en tot slot moeten de apparaten elkaar kunnen bereiken, als er op een of andere manier een "muur" tussenzit kunnen deze sowieso niet met elkaar communiceren

  • Hallo,


    Perry: bedankt, maar had de return al aangepast naar echo.
    Maar had inderdaad gekunt ;)


    @FagorN
    ik ben zeker dat ping werkt, in ssh werkt het wel.
    Verder ping ik mezelf voorlopig, dus dat moet altijd werken.
    Het werkt in ssh ook.


    Ik denk dat die exec toch niet volledig door gaat tot het systeem of dat daar nog een andere beveiliging staat.


    Ik overweeg nu een volledig andere approach:
    Een shell scriptje dat pingt en de output elke x minuten naar een txt bestand schrijft.
    Php leest dan gewoon de inhoud van het bestand uit.
    Niet super netjes, maar bespaart me veel hoofdzorgen...

  • ik ben zeker dat ping werkt, in ssh werkt het wel.

    Mja maar in een shellscript (of cron, om maar een dwarsstraat te noemen) zijn de paden naar dit soort commando's vaak niet bekend, daarom doe je er volgens mij verstandiger aan om het /pad/naar/het/commando toe te voegen. Probeer dit eens i.c.m. shell_exec(), de opmerking van @GiovanniK klinkt mij wel bekend in de oren.


    Mijn nickname bevat trouwens twee keer de letter n.

  • Klein stukje code die werkt gebruik die zelf ook

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!