2011-01-19 11 views
32

Chcę pingować serwer z mojej aplikacji node.js.Jak "Ping" z aplikacji Node.js?

Czy to możliwe?

Dzięki

+2

Tworzenie komunikatów ICMP zwykle wymaga uprawnień administratora, więc twoje skrypty muszą uruchamiać suid root, jeśli używasz systemu UNIX i nie jestem pewien, czy tego chcesz. Lub musisz być w stanie uruchomić proces zewnętrzny (tj. Ping), który jest suid root, nie wiem, czy jest to możliwe w node.js, ale przypuszczam, że powinno to być? – falstro

+0

Podejście Nikolausa może być powolne, jeśli robisz to dużo, ponieważ jesteś rozwidleniem procesów (względnie drogich). – Alfred

Odpowiedz

12

Można użyć exec wywołać komendę System 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

Możesz to zrobić w ten sposób. Ale jeśli zrobisz to dużo (jednocześnie), będzie to kosztowne, ponieważ rozwidlanie jest kosztowne (względne). – Alfred

9

robi ping (programowalny) wymaga uprawnień roota, ponieważ wymaga raws gniazd, które wymagają dostępu do konta roota. Możesz wykonać polecenie ping po kodzie Gradwohl's, ale pamiętaj, że tworzysz nowy proces, który jest drogi (względnie). Jeśli nie musisz tego robić dużo (współbieżność) to na pewno zadziała :)

Aby zrobić to w node.js (tylko) bez procesu rozwidlenia Myślę, że masz kilka opcji, które są zarówno trudne zaimplementować :()

  1. przepisać tę ping python library na node.js, a następnie uruchomić program jako użytkownik root.
  2. napisać c++ extension/addon for node.js przy użyciu asio c++ library dla node.js. Zawiera również kilka przykładów jak wykonać icmp ping.

nie (tylko) przy użyciu node.js:

  1. użycie python ping library prowadził jako root i komunikować się z node.js przykład poprzez REDiS. =>EASIEST do wdrożenia. (Prawie żadna praca, ale myślę raczej szybko :))
  2. Napisz ponownie kod c (++) za pomocą asio C++, ale zamiast pisać node.js rozszerzenie komunikacji za pośrednictwem hiredis z node.js które również używa redis.

Jako marginesie jak wykorzystać Redis na node.js:

3

wiem ta odpowiedź została udzielona odpowiedź Jakiś czas temu, ale dla osób, które szukają tej samej odpowiedzi, napisałem moduł na githubie, aby spróbować go uprościć jeszcze bardziej :)

https://github.com/bscarvell/pingwrap

+1

Twój link wydaje się być uszkodzony ..... – starbeamrainbowlabs

+0

Naprawiono dziękuję. Zmieniłem nazwę użytkownika. – Menztrual

9

Jestem autorem ping-wrapper.

Odradza się ping i można natychmiast słuchać wydarzeń. Jeśli proces zostanie zakończony, zostanie automatycznie odrodzony.

2

Możesz również użyć mojego opakowania ping nodejs yaping. Pewnego dnia otrzymamy surowe gniazda w nodejs i będziemy mogli tworzyć własne pakiety ping i kłamać na temat naszych czasów odpowiedzi.;-)

Ta prosta funkcja powinna

  • zrobić zapytań DNS
  • ping raz
  • limit czasu po 10 sekundach
  • komunikować wszystkie dobrze przemyślana kody błędów, które ping zapewnia
  • ikry dziecko przetwarza poza związek małżeński
11

node-net-ping to niesamowity moduł wykorzystujący surowe gniazda.

A jeśli szukasz tylko gniazd surowych, ten sam programista ma moduł również do tego: node-raw-socket.

+0

Każdy pomysł, jak pingować adres URL za pomocą polecenia node-net-ping zamiast adresu IP? domena nie rozwiązuje problemu. – Bach

+0

Najpierw musisz rozwiązać problem i wysłać polecenie ping do IP. – umutm