9
votes

Comment ping adresses IP en utilisant JavaScript

Je souhaite exécuter un code JavaScript pour ping 4 adresses IP différentes, puis récupérer la perte de paquets et la latence de ces demandes de ping et les afficher sur la page.

Comment puis-je faire cela?


2 commentaires

question.


Stackoverflow .Com / Questions / 4282151 / ... doit vérifier la solution ci-dessus. Jolie lisse.


8 Réponses :


20
votes

Vous ne pouvez pas faire de JS. Ce que vous pouvez faire est la suivante:

 client --AJAX-- yourserver --ICMP ping-- targetservers
  • cela vous indique si les serveurs cibles sont pingable de votre serveur, pas de client de l'utilisateur
    • de sorte que le client ne sera pas en mesure d'hôtes tester son réseau local li>
    • mais vous ne devriez pas laisser les hôtes de contrôle d'hôte sur le réseau interne du serveur, le cas échéant exist li>
    • certains hôtes peuvent bloquer le trafic de certains hôtes et pas d'autres li> ul> li>
    • vous devez limiter le nombre de ping par machine:
      • pour éviter la demande d'AJAX de synchronisation sur li>
      • certains opérateurs de site peut être très bouleversé lorsque vous gardez pinger leurs sites tout le temps li> ul> li> ressources
        • de longue date des requêtes HTTP pourrait fonctionner dans la limite maximale de connexion de votre serveur, vérifier à quelle hauteur il est li>
        • de nombreux utilisateurs qui tentent de ping à la fois pourrait générer du trafic suspect à la recherche (tous les ICMP et rien d'autre) li> ul> li>
        • concurrency - vous souhaitez peut-être piscine / cache le haut / bas statut pendant quelques secondes au moins, de sorte que plusieurs clients qui souhaitent ping la même cible ne lancera pas une inondation de pings li> Ul> p>


0 commentaires

5
votes

La seule méthode à laquelle je peux penser est chargée par ex. un fichier image du serveur externe. Lorsque cette charge échoue, vous "savez" le serveur ne répond pas (vous ne le savez pas, car le serveur peut simplement vous bloquer).

Jetez un oeil à cet exemple de code pour voir ce que je veux dire: < / p> xxx


5 commentaires

Ce n'est pas ping, c'est une demande HTTP (donc TCP / IP). De plus, si la cible n'exécute pas un serveur HTTP, la demande prendra un loooong temps à tendre. De plus, le chargement est asynchrone - à moins que l'image soit déjà dans le cache, ImageObject.Height retournera 0 si vous vérifiez juste après la définition du SRC ; Et si c'est est dans le cache, il retournera "ping travaillé", que la cible soit levée ou non. EN.Wikipedia.org/wiki/ping


Détendez-vous Piskvor - vous êtes parfaitement exact que ce n'est pas un ping REAL (ni est votre solution) - vous devez être en mesure de sockets ouverts et envoyer des paquets TCP / IP arbitraires pour simuler un ping - Je viens d'appeler le ping pour la simplicité de la méthode . Vous êtes aussi exact que si la cible ne fonctionne pas un serveur HTTP, il faudra beaucoup de temps - d'où je l'ai écrit « URL à une image connue » ... Aussi la mise en cache est un problème. C'était simple, démonstration d'une approche que vous pourriez prendre, même principe que hacks CSS histoire. Merci pour le downvote.


Ne prenez pas le Downvote personnellement, je n'ai pas bownvote vous ; Je viens de sentir que cela ne répond pas vraiment à la question - bien que est un moyen simple de vérifier si un serveur HTTP connu pourrait être élevé, il ne répond pas vraiment à la perte de ping ou à la latence. Je conviens que mon approche ne pique pas de l'ordinateur du client, qui nécessiterait de nombreuses autorisations abaissées et de nombreux trous de sécurité (et ActiveX).


Ne pas le prendre personnellement :-) merci pour le suivi


Avertissement: Le cache de volonté ci-dessus. Assurez-vous d'ajouter quelque chose d'unique à la fin de l'URL. En outre, un / domaine IP seul fonctionnera tout aussi bien pour l'image src : "http: //" "? Pingedat =". + IpOrHost + + new Date () getTime () ; .



1
votes
function ping(url){
 new Image().src=url
}
Above pings the given Url.
Generally used for counters / analytics.
It won't encounter failed responses to client(javascript) 

2 commentaires

Cela n'enverra pas le paquet ICMP


Cela vérifiera si un serveur répond à une demande, telle qu'une demande HTTP. Un ping est une chose complètement différente.



3
votes

Le plus proche que vous allez accéder à un Ping dans JS utilise AJAX et récupérer les préparatifs, le statut et les en-têtes. Quelque chose comme ceci:

url = "<whatever you want to ping>"
ping = new XMLHttpRequest();    
ping.onreadystatechange = function(){

    document.body.innerHTML += "</br>" + ping.readyState;

    if(ping.readyState == 4){
        if(ping.status == 200){
            result = ping.getAllResponseHeaders();
            document.body.innerHTML += "</br>" + result + "</br>";
        }
    }

}
ping.open("GET", url, true);    
ping.send();


1 commentaires

L'IDE d'utiliser Ajax et de récupérer les états prêts est de travailler pour moi. Puis-je demander comment puis-je ajouter un autre Statetemen dans ce contenu. Comme si l'URL n'est pas disponible, j'aimerais imprimer un massage à l'utilisateur. Comme document.getElementyid ("div"). Innerhtml = "ping n'est pas le succès!";



4
votes

Je suis inspiré par le dernier commentaire, j'ai donc écrit ce morceau rapide de code.

Ceci est une sorte de « HTTP ping » que je pense peut être très utile d'utiliser avec des appels XMLHttpRequest (), par exemple à savoir quel est le serveur le plus rapide à utiliser dans certains cas, ou pour recueillir des statistiques brutes de la vitesse de connexion Internet de l'utilisateur. p>

Cette petite fonction est simplement de se connecter à un serveur HTTP sur une URL non-existante ( qui devrait retourner une 404), puis est la mesure du temps jusqu'à ce que le serveur répond à la requête HTTP, et fait en moyenne sur le temps cumulé et le nombre d'itérations. p>

l'URL est modifié randomely à chaque appel depuis que je l'ai remarqué que p>

(probablement) des proxys transparents ou des mécanismes de mise en cache où feindre des résultats dans certains cas, ce qui donne des réponses supplémentaires rapides (plus rapide que ICMP fait un peu bizarre qui). Gardez-vous à utiliser FQDNs qui correspondent à un vrai serveur HTTP! Les résultats afficheront à un élément de corps avec id "résultat", par exemple: p>

fp = new http_ping("www.linux.com.au"); 


0 commentaires

-2
votes

Vous ne pouvez pas PING avec Javascript. J'ai créé servlet Java qui renvoie une image verte de pixels 10x10 si elle est vivante et une image rouge morte. https://github.com/pla1/Misc/blob/master/README.md


0 commentaires


0
votes

J'ai monté quelque chose parce que je m'ennuyais de la recherche d'heures après des heures après quelque chose que tout le monde disait "impossible", seule une chose que j'ai trouvée utilisait JQuery. J'ai trouvé un nouveau moyen simple à l'aide de Vanilla JS (rien d'autre que la base JavaScript).

Voici mon jsfiddle: https://jsfiddle.net/thenolle/5qjpmrxg/74/ p>

Fondamentalement, je crée une variable appelée "début" que je donne l'horodatage, puis j'essaie de Définissez une source d'image invisible sur mon site Web (qui n'est pas une image) [peut être modifiée sur n'importe quel site Web], car ce n'est pas une image qui crée une erreur que j'utilise pour exécuter la deuxième partie du code, à ce moment-là. Je crée une nouvelle variable appelée "fin" que je donne l'horodatage d'ici (qui est différent de "Démarrer"). Ensuite, je fais simplement une soustraction (je soustrayez "Démarrer" de "fin") qui me donne la latence qu'il a fallu à Ping Ce site Web. Après avoir le choix, vous pouvez stocker cela dans une valeur, collez-la sur votre page Web, la coller dans la console, etc. p>

p>

Ping:
<el id="pingSpan">Waiting</el>
<img id="pingTester">

<br> <br>

<button onclick="start()">
  Start Ping Test
</button>
<button onclick="stop()">
  Stop
</button>


0 commentaires