Autor Zpráva
David1256
Profil
Dobrý den,

mám Raspberry Pi a na něm webový server, který zpřístupňuji na internet přes https://ngrok.com/. Nicméně mám nestabilní internet, tak jsem si chtěl udělat statistiku, jak často je server přístupný a jak často není. Tzn. chci spustit každých 15 minut cron, který by zjistil, jestli adresa xxxx.ngrok.com, kde je zpřístupněný webový server, v daný okamžik vrací např. "It works!" nebo 403ku. Údaje bych ukládal do DB a vyšlo by mi z toho % přístupnosti serveru na internetu.

Ovšem problém je, že ngrok neumožňuje file_get_contents, a tak nemám skriptem jak zjistit, co se v daný okamžik spuštění skriptu cronem na adrese nachází za obsah. Nenapadá vás nějaký způsob, jak file_get_contents obejít a dosáhnout výsledku?

Děkuji.
Dan Charousek
Profil
Podívej se po CURL knihovně.
David1256
Profil
I proti CURL je Ngrok odolný.
Keeehi
Profil
David1256:
A ten script bude běžet kde? Zase na tom raspberry? Protože tak tu přístupnost moc neotestuješ. Když si ten script vyžádá adresu ngrok.com, tak mu DNS server odpoví IP adresou. No a jelikož to je jeho IP adresa, tak při zjišťování obsahu to bude stejné, jako bys zadal 127.0.0.1. Tudíž ověříš zda server běží, ale neověříš, zda je z venku dostupný.
Případně mě někdo opravte. Se síťařinou si nejsem nikdy 100% jistý.

Abys to otestoval, měl bys to testovat z nějakého externího zdroje. A když si na svém servru pustím script s file_get_contents s tvojí url, tak obsah dostanu.


Edit: nedošlo mi, že ngork.com není adresa tvého servru. Takže by se hodilo napsat, jaká to je ať se na to můžeme podívat.
weroro
Profil
David1256:
Nestačí ti danú adresu pingovať?
Môžeš použiť exec v PHP
exec("/bin/ping -n 3 173.255.204.192", $outcome, $status);
David1256
Profil
Keeehi:
Ano, spouštím z externího zdroje. Stačí to vyzkoušet na ngrok.com, na které nefunguje file_get_contents() stejně tak jako na všech jeho subdoménách (tunelech).


weroro:
Ten ping vyzkouším, to by mohlo fungovat. Jen budu muset počkat na situaci, kdy bude server ve stavu 403ky, což dělá právě můj "inteligentní" router. Když totiž tunel (ngrok) manuálně vypnu, tak si ngrok místo obsahu webserveru na Raspberry doplní html stránku, kde je napsáno, že tunel nefunguje, což mi v případě pingu vrátí stejný výsledek jako kdyby web normálně běžel a já rozdíl nepoznám.

EDIT: Tak ani toto nebude fungovat, protože to naráží na stejnou chybu jako file_get_contents. Ten Ngrok je imunní úplně na všechno:

Warning: fsockopen(): unable to connect to 173.255.204.192:80 (Operation not permitted) in /data/www/router.php on line 5
Davex
Profil
David1256:
Není to spíš problém místa, ze kterého se snažíš připojovat, že blokuje připojení na jiný server? Obecně by nemělo záležet na použité funkci v PHP - buď budou fungovat všechny nebo žádná (pokud nebudu uvažovat vypnuté allow_url_fopen nebo zakázané funkce).
Keeehi
Profil
David1256:
Jak píše Davex, je to problém toho externího zdroje. ngork.com nic neblokuje ani se tomu nebrání (ověřeno tím, že mě to funguje) takže problém bude někde v konfiguraci toho servru na kterém se to snažíš spouštět. Stáhnout obsah třeba úvoní stránky seznamu ti jde? Co je to ten externí zdroj?
David1256
Profil
Davex, Keeehi:
Aha, zajímavé. Tak problém byl opravdu na hostingu. Spouštěl jsem z Blueboardu, kde tento kód:

<?php
$host = '173.255.204.192'; // Ngrok.com IP
$port = 80; 
$waitTimeoutInSeconds = 1; 
if($fp = fsockopen($host,$port,$errCode,$errStr,$waitTimeoutInSeconds)){   
   echo "OK";
} else {
   echo "KO"; 
} 
fclose($fp);

$homepage = file_get_contents('http://www.ngrok.com');
echo $homepage;
?>

Vrátí:

Warning: fsockopen(): unable to connect to 173.255.204.192:80 (Operation not permitted) in /data/www/20389/xxx/router.php on line 5
KO
Warning: fclose() expects parameter 1 to be resource, boolean given in /data/www/20389/xxx/router.php on line 10

Warning: file_get_contents(http://www.ngrok.com): failed to open stream: Operation not permitted in /data/www/20389/xxx/router.php on line 12


Zatímco stejný kód na Wedosu vrátí OK a obsah homepage Ngroku.

Asi dořeším s hostingem, očividně mají na Blueboardu něco "špatně".
David1256
Profil
Tak vyřešeno, Blueboard má ve firewallu zablokovaný přístup na zahraniční servery kvůli bezpečnosti, takže jsem si odblokoval v administraci ngrok.com a nyní již vše funguje jak má.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: