2011-01-19 13 views
32

Desidero eseguire il ping di un server dalla mia app node.js.Come eseguire il "ping" da un'app Node.js?

È fattibile?

Grazie

+2

La creazione di messaggi ICMP richiede in genere privilegi di root, quindi gli script devono eseguire suid root se si sta eseguendo su unix e non sono sicuro che lo si desideri. O devi essere in grado di avviare un processo esterno (cioè ping) che è suid root, non so se è possibile in node.js ma suppongo che dovrebbe essere? – falstro

+0

L'approccio di Nikolaus potrebbe rallentare se lo si fa molto perché si stanno modificando dei processi (relativamente costosi). – Alfred

risposta

12

Si potrebbe utilizzare exec per chiamare il comando di sistema ping

var sys = require('sys') 
var exec = require('child_process').exec; 
function puts(error, stdout, stderr) { sys.puts(stdout) } 
exec("ping -c 3 localhost", puts); 
+8

Puoi farlo in questo modo. Ma se lo fai molto (contemporaneamente) sarà costoso perché il processo di biforcazione è costoso (relativo). – Alfred

9

Facendo ping (programmabile) richiede privilegi di root perché richiede prese raws che richiedono accesso root. È possibile eseguire il ping seguendo lo snippet Gradwohl's, ma tenere presente che si sta creando un nuovo processo che è costoso (relativamente). Se non hai bisogno di farlo molto (concorrenza) questo sicuramente funzionerà :)

Per farlo in node.js (solo) senza processo di biforcazione Penso che tu abbia un paio di opzioni, che sono entrambe difficili per implementare :()

  1. riscrivere questo ping python library su node.js e quindi eseguire il programma come utente root.
  2. scrivere un c++ extension/addon for node.js utilizzando asio c++ library per node.js. Ha anche un paio di esempi su come fare icmp ping.

Non (solo) utilizzando node.js:

  1. uso python ping library corse come root e comunicano con istanza node.js via redis. =>più semplice da implementare. (Quasi nessun lavoro, ma penso piuttosto veloce :))
  2. scrittura c (++) Codice nuovo utilizzando ASIO C++, ma invece di estensione scrittura node.js comunicano via hiredis con node.js che usa anche redis.

Come un lato nota come usare Redis su node.js:

3

So che questa risposta è stata data risposta un po 'di tempo fa, ma per le persone che cercano la stessa risposta, ho scritto un modulo su github per provare a semplificarlo di più :)

https://github.com/bscarvell/pingwrap

+1

Il tuo collegamento sembra essere rotto ..... – starbeamrainbowlabs

+0

Risolto grazie. Ho cambiato il mio nome utente. – Menztrual

9

Sono autore di ping-wrapper.

Genera ping ed è possibile ascoltare gli eventi immediatamente. Se il processo si chiude, verrà generato automaticamente.

2

È anche possibile utilizzare il mio wrapper ping nodejs yaping. Un giorno otterremo socket raw in nodejs e saremo in grado di creare i nostri pacchetti ping e mentire sui nostri tempi di risposta.;-)

Questa semplice funzione dovrebbe

  • fare ricerche DNS
  • ping volta
  • timeout dopo 10 secondi
  • comunicano tutte le ben però codici di errore su che fornisce ping
  • escursione un bambino elabora fuori dal matrimonio
11

node-net-ping è un modulo fantastico che utilizza socket raw.

E, se state cercando solo socket raw, lo stesso sviluppatore ha un modulo anche per questo: node-raw-socket.

+0

Qualche idea su come eseguire il ping di un url utilizzando node-net-ping anziché l'indirizzo IP? dominio non risolvibile. – Bach

+0

Dovrai prima risolverlo e eseguire il ping dell'IP. – umutm

Problemi correlati