Ho un semplice script che verifica periodicamente (una volta ogni pochi secondi) se c'è una connessione Internet da quel server. Per essere chiari, non si tratta di verificare se un sito/servizio/server esterno è vivo. Come destinazioni internet affidabili utilizzo IP di siti come google, yahoo, ecc. Normalmente utilizzo 3 destinazioni (LAN, rete ISP, fuori ISP)Come verificare la presenza della connessione internet in Perl?
Il mio codice corrente responsabile di questo è solo una semplice e sporca chiamata a ping
:
my $pingResponse = `ping -c 1 -w 1 123.123.123.123`;
my $isConnected = parsePingResponse($pingResponse);
Sembra funzionare, ma sono sicuro che non è il modo giusto/migliore per eseguire questo compito. Ci sono almeno 3 inconvenienti: chiamata di sistema esterna, è lenta, ha una scadenza relativamente di 1 secondo.
Quindi, la mia domanda è: come implementare semplice ed efficiente un ping funzionalità la Perl modo al fine di verificare se la connessione Internet è vivo?
(credo LWP è un eccessivo. Non è importante se un sito o una pagina è disponibile, solo se alcuni IP esterni sono raggiungibili. Probabilmente dovrebbe essere qualcosa di semplice che coinvolge rete di basso livello)
Grazie, sembra essere esattamente ciò di cui ho bisogno. I timeout e le destinazioni non sono un problema. Un'altra domanda, se potessi aiutare con questo: 'new' e' close' dovrebbero essere chiamati per ogni * ping *? (Voglio dire che il mio script è in esecuzione quasi 24 ore su 24 e mantenere le connessioni aperte non è un buon comportamento e probabilmente le macchine di destinazione le chiuderanno dopo un po ', gli IP sono diversi, quindi sto provando a non * flood * nessuno). – ArtM
Supponendo che si stiano facendo ping TCP (impostazione predefinita), è possibile creare un singolo oggetto per la durata dello script e richiamare ripetutamente 'ping'. Non manterrà connessioni aperte. – rjh
non so perché restituisco sempre false, ma in realtà posso eseguire il ping da console/terminale. –