2011-01-19 119 views
32

Quiero hacer ping a un servidor desde mi aplicación node.js.¿Cómo hacer "ping" desde la aplicación Node.js?

¿Eso es factible?

Gracias

+2

Elaborar mensajes ICMP generalmente requiere privilegios de raíz, por lo que sus scripts deben ejecutar suid root si se está ejecutando en Unix, y no estoy seguro de querer eso. O necesita poder iniciar un proceso externo (es decir, ping) que es suid root, no sé si eso es posible en node.js pero supongo que debería ser? – falstro

+0

El enfoque de Nikolaus puede ser lento si lo haces mucho porque estás bifurcando procesos (relativamente caros). – Alfred

Respuesta

12

Usted podría utilizar exec para llamar al comando ping sistema

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

Puedes hacerlo de esta manera. Pero si lo haces mucho (al mismo tiempo) va a ser costoso porque el proceso de bifurcación es costoso (relativo). – Alfred

9

Hacer ping (programable) requiere privilegios de root ya que requiere raws tomas que requieren acceso de root. Puede realizar ping siguiendo el fragmento Gradwohl's, pero tenga en cuenta que está creando un nuevo proceso que es costoso (relativamente). Si no necesita hacerlo mucho (concurrencia) esto definitivamente funcionará :)

Para hacerlo en node.js (solo) sin proceso de bifurcación Creo que tiene un par de opciones, que son difíciles para implementar :()

  1. reescriba este ping python library en node.js y luego ejecute el programa como usuario root.
  2. escribe un c++ extension/addon for node.js usando asio c++ library para node.js. También tiene un par de ejemplos de cómo hacer icmp ping.

no (sólo) usando Node.js:

  1. uso python ping library corrieron como root y comunicarse con Node.js ejemplo a través de Redis. =>más fácil de implementar. (Casi ningún trabajo, pero creo que bastante rápido :))
  2. escritura c (++) código de nuevo usando ASIO C++ pero en vez de extensión de la escritura Node.js comunicarse a través de la cual hiredis con Node.js también usa redis.

Como nota lateral cómo utilizar Redis en Node.js:

9

Yo soy el autor de ping-wrapper.

Genera ping y puedes escuchar eventos inmediatamente. Si el proceso se cierra, se generará automáticamente.

2

También puede usar mi contenedor nodejs ping yaping. Algún día obtendremos sockets sin procesar en nodejs y podremos hacer nuestros propios paquetes de ping y mentir sobre nuestros tiempos de respuesta.;-)

Esta función simple debe

  • hacer búsquedas de DNS
  • de ping vez
  • tiempo de espera después de 10 segundos
  • comunican todos los códigos de error aunque así fuera que proporciona ping
  • desove un niño procesa fuera del matrimonio
11

node-net-ping es un módulo impresionante que utiliza conectores sin formato.

Y, si solo está buscando sockets sin formato, el mismo desarrollador también tiene un módulo: node-raw-socket.

+0

¿Alguna idea de cómo hacer ping a una url usando node-net-ping en lugar de la dirección IP? dominio no resolviendo – Bach

+0

Tendrá que resolverlo primero y hacer ping a la IP. – umutm

Cuestiones relacionadas