J'ai une liste de serveur Je n'ai trouvé aucun mode de mise en œuvre tout droit de la mise en œuvre, et il semble y avoir quelques problèmes pour calculer avec précision la latence. P>
Des idées? P>
6 Réponses :
Si vous souhaitez éviter de mettre en œuvre tous les détails de la communication réseau, vous pouvez probablement essayer de construire quelque chose sur FPP A>: p>
fing est un programme similaire qui utilise le
Protocole de messages de contrôle Internet
(ICMP) ECHO Demande de déterminer si un
L'hôte ciblé répond. ping
diffère de ping dans ce que vous pouvez
Spécifiez un nombre quelconque d'objectifs sur le
ligne de commande ou spécifier un fichier
contenant les listes d'objectifs à
ping. Au lieu d'envoyer à une cible
jusqu'à ce que cela puisse sortir ou répond, fingd envoyer
sortir un paquet de ping et passer à la
Cible suivante dans une mode ronde. P>
blockQuote>
Merci, fonctionne bien. De plus, je souhaite noter que "contrairement à Ping, fing est destiné à être utilisé dans des scripts. Sa sortie est donc conçue pour être facile à analyser".
Y a-t-il un moyen de donner deux adresse IP manuellement et de trouver la latence entre eux à l'aide de FPP?
Pouvez-vous fournir un exemple de comment utiliser FPP?
Si vous êtes déjà à l'aise avec des chaînes d'analyse, vous pouvez utiliser le module de sous-processus pour obtenir les données que vous recherchez dans une chaîne, comme ceci:
>>> import subprocess >>> p = subprocess.Popen(["ping.exe","www.google.com"], stdout = subprocess.PIPE) >>> print p.communicate()[0] Pinging www.l.google.com [209.85.225.99] with 32 bytes of data: Reply from 209.85.225.99: bytes=32 time=59ms TTL=52 Reply from 209.85.225.99: bytes=32 time=64ms TTL=52 Reply from 209.85.225.99: bytes=32 time=104ms TTL=52 Reply from 209.85.225.99: bytes=32 time=64ms TTL=52 Ping statistics for 209.85.225.99: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 59ms, Maximum = 104ms, Average = 72ms
Ce n'est pas une très bonne approche car il va évidemment être spécifique à la plate-forme (mais il n'y a pas besoin de cela).
Et si nous voulons extraire le temps de réponse comme une variable?
C'est là que "si vous êtes à l'aise avec analyse" entre ... Commencez par quelque chose comme: importer re; Timestrs = repeublement ("Time = [0-9] + MS"). RÉSUCTALL (STR (P.COMMUNICE () [0])) et affinez-le si de là ... Le module Regex (RE) est plutôt génial
>>> Timestr ['Time = 12ms', 'Time = 12ms', 'Time = 14ms', 'Time = 13ms']
suivant suggestion de Hlovdal pour fonctionner avec FPPRES , voici ma solution que j'utilise pour tester les proxies. Je n'ai essayé que sous Linux. Si aucun temps de ping ne peut être mesuré, une grande valeur est renvoyée. Utilisation: Imprimer get_ping_time ('
import shlex
from subprocess import Popen, PIPE, STDOUT
def get_simple_cmd_output(cmd, stderr=STDOUT):
"""
Execute a simple external command and get its output.
"""
args = shlex.split(cmd)
return Popen(args, stdout=PIPE, stderr=stderr).communicate()[0]
def get_ping_time(host):
host = host.split(':')[0]
cmd = "fping {host} -C 3 -q".format(host=host)
res = [float(x) for x in get_simple_cmd_output(cmd).strip().split(':')[-1].split() if x != '-']
if len(res) > 0:
return sum(res) / len(res)
else:
return 999999
Je pense que processus. Code> est une faute de frappe dans cet extrait
Combien de temps cela attend-il avant de terminer une demande?
Remarque: dans Python 3, le résultat de la popen doit être décodé: popen (args, stdout = pipe, starr = stardr) .Communicate () [0] .Decode () code>
https://github.com/matthieu-lapeyre/network-benchmark Ma solution basée sur le travail de flipperpa: https://github.com/flipperpa/latency-Tester A> import numpy
import pexpect
class WifiLatencyBenchmark(object):
def __init__(self, ip):
object.__init__(self)
self.ip = ip
self.interval = 0.5
ping_command = 'ping -i ' + str(self.interval) + ' ' + self.ip
self.ping = pexpect.spawn(ping_command)
self.ping.timeout = 1200
self.ping.readline() # init
self.wifi_latency = []
self.wifi_timeout = 0
def run_test(self, n_test):
for n in range(n_test):
p = self.ping.readline()
try:
ping_time = float(p[p.find('time=') + 5:p.find(' ms')])
self.wifi_latency.append(ping_time)
print 'test:', n + 1, '/', n_test, ', ping latency :', ping_time, 'ms'
except:
self.wifi_timeout = self.wifi_timeout + 1
print 'timeout'
self.wifi_timeout = self.wifi_timeout / float(n_test)
self.wifi_latency = numpy.array(self.wifi_delay)
def get_results(self):
print 'mean latency', numpy.mean(self.wifi_latency), 'ms'
print 'std latency', numpy.std(self.wifi_latency), 'ms'
print 'timeout', self.wifi_timeout * 100, '%'
if __name__ == '__main__':
ip = '192.168.0.1'
n_test = 100
my_wifi = WifiLatencyBenchmark(ip)
my_wifi.run_test(n_test)
my_wifi.get_results()
Merci de Jabba mais ce code ne fonctionne pas correctement pour moi, donc je change quelque chose comme suit
import shlex from subprocess import Popen, PIPE, STDOUT def get_simple_cmd_output(cmd, stderr=STDOUT): """ Execute a simple external command and get its output. """ args = shlex.split(cmd) return Popen(args, stdout=PIPE, stderr=stderr).communicate()[0] def get_ping_time(host): host = host.split(':')[0] cmd = "fping {host} -C 3 -q".format(host=host) # result = str(get_simple_cmd_output(cmd)).replace('\\','').split(':')[-1].split() if x != '-'] result = str(get_simple_cmd_output(cmd)).replace('\\', '').split(':')[-1].replace("n'", '').replace("-", '').replace( "b''", '').split() res = [float(x) for x in result] if len(res) > 0: return sum(res) / len(res) else: return 999999 def main(): # sample hard code for test host = 'google.com' print([host, get_ping_time(host)]) host = 'besparapp.com' print([host, get_ping_time(host)]) if __name__ == '__main__': main()
Cela fonctionne-t-il sur Windows? Ou est-ce spécifique à Linux?
Ce message est un peu vieux et je pense que de meilleures façons existe aujourd'hui. Je suis nouveau à Python, mais voici ce que j'ai fait sur mon projet: résultat: p> Vous pouvez trouver la bibliothèque Pythonping ici : https://pypi.org/project/pythonping/ p> p>
Cela a quelques conseils utiles: Stackoverflow.com/questions/316866/ping-a-site-in- Python
@Dan: Ils appellent tous des commandes OS ...
En fait, la meilleure réponse sur ce fil est une implémentation python python qui semble faire exactement ce que vous voulez.
@Fogle: Je ne sais pas comment je l'ai manqué ... merci
Dupliqué possible de ping un site à Python?