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. P>
Comment puis-je faire cela? P>
8 Réponses :
Vous ne pouvez pas faire de JS. Ce que vous pouvez faire est la suivante:
client --AJAX-- yourserver --ICMP ping-- targetservers
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>
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 i> 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 code>; Et si c'est est i> 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, b> 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 i>; Je viens de sentir que cela ne répond pas vraiment à la question - bien que est i> 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: b> 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 code>:
"http: //" "? Pingedat =". + IpOrHost + + new Date () getTime () ; code>.
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)
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.
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();
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!";
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");
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 p>
Down Voting Cette réponse n'a pas de sens. La question était de savoir comment ping utiliser JavaScript et le lien vous indique comment effectivement ping utiliser JavaScript. Je ne sais pas quoi d'autre que quelqu'un pouvait attendre. Merci pour la soustraction REP cependant, très appréciée. Wow.
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>
question.
Stackoverflow .Com / Questions / 4282151 / ... doit vérifier la solution ci-dessus. Jolie lisse.