Ich versuche ein einfaches Tool zu schreiben, das den offenen TCP-Port misst, der Code funktioniert gut. Das Problem, das ich habe, ist, dass, wenn ich das TCP-Ping-Ergebnis mit anderen Tools, wie psping (Sysinternals), tcpping, check_tcp (Nagios) vergleichen, bekomme ich viel niedrigere Ergebnisse als mein Code. In meinem Code öffnen TCP-Port offen dauert etwa 9 ~ 10ms, andere Werkzeuge dauert 0,200 ~ 0,500ms am Anfang, dachte, es ist mit dem Fall verbunden, wenn ich mehrere Schnittstellen auf meinem Computer habe ich hinzugefügt, um die richtige Schnittstelle zu binden änderte die Ergebnisse nicht. Darüber hinaus fand ich, dass der Unterschied zwischen Python und anderen Tools, Ich benutzte Wireshark, um sowohl Python und psping zu erfassen, und ich fand, dass der endgültige Handshake von Clientseite FIN, ACK ist viel langsamer in Python als psping und das ist die Unterschied die 10ms. Gibt es ein Flag in Python TCP, um es schneller zu machen? Meine Frage ist, warum ich so unterschiedliche Ergebnisse bekomme? Bitte Beratung DankVerwenden für Python TCP-Ping, Zeitmessung Diffrence von anderen Tools?
1
A
Antwort
0
wie vorgeschlagen Beitrag von babygame0ver die „Latenz“ Problem lösen hinzugefügt Einfädeln und Latenz jetzt viel andere Werkzeuge Dank
#!/usr/bin/env python3
"""
TCP Ping Test (defaults to port 80, 10000 packets)
Usage: ./tcpping.py host [port] [maxCount]
- Ctrl-C Exits with Results
"""
import sys
import socket
import time
import signal
from timeit import default_timer as timer
import threading
host = None
port = 80
a = time.clock()
time.sleep(2)
b = time.clock()
print(b-a)
# Default to 10000 connections max
maxCount = 10000
count = 0
## Inputs
# Required Host
try:
host = sys.argv[1]
except IndexError:
print("Usage: tcpping.py host [port] [maxCount]")
sys.exit(1)
# Optional Port
try:
port = int(sys.argv[2])
except ValueError:
print("Error: Port Must be Integer:", sys.argv[3])
sys.exit(1)
except IndexError:
pass
# Optional maxCount
try:
maxCount = int(sys.argv[3])
except ValueError:
print("Error: Max Count Value Must be Integer", sys.argv[3])
sys.exit(1)
except IndexError:
pass
# Pass/Fail counters
passed = 0
failed = 0
def getResults():
""" Summarize Results """
lRate = 0
if failed != 0:
lRate = failed/(count) * 100
lRate = "%.2f" % lRate
print("\nTCP Ping Results: Connections (Total/Pass/Fail): [{:}/{:}/{:}] (Failed: {:}%)".format((count), passed, failed, str(lRate)))
def signal_handler(signal, frame):
""" Catch Ctrl-C and Exit """
getResults()
sys.exit(0)
# Register SIGINT Handler
signal.signal(signal.SIGINT, signal_handler)
# Loop while less than max count or until Ctrl-C caught
while count < maxCount:
# Increment Counter
count += 1
success = False
# New Socket
s = socket.socket(
socket.AF_INET, socket.SOCK_STREAM)
s.bind(('192.168.10.19', 0))
# 1sec Timeout
s.settimeout(1)
# Try to Connect
try:
# Start a timer
t = threading.Thread(target=s.connect((host, int(port))))
#threads.append(t)
s_start = timer()
t.start()
# Stop Timer
s_stop = timer()
s.shutdown(socket.SHUT_RD)
success = True
# Connection Timed Out
except socket.timeout:
print("Connection timed out!")
failed += 1
except OSError as e:
print("OS Error:", e)
failed += 1
# Stop Timer
#s_stop = timer()
s_runtime = "%.2f" % (1000 * (s_stop - s_start))
if success:
print("Connected to %s[%s]: tcp_seq=%s time=%s ms" % (host, port, (count-1), s_runtime))
passed += 1
# Sleep for 1sec
if count < maxCount:
time.sleep(1)
# Output Results if maxCount reached
getResults()
+1
Code berechnen Zeit der Thread-Startzeit. Verwenden Sie thread.join(), wenn Sie die Verbindungszeit anzeigen möchten. – kain64b
Verwandte Themen
- 1. Zeitmessung? - Kakao
- 2. Verwenden von Build-Tools für Java
- 3. JGroups mit TCPPING (statische Peer-Liste)
- 4. Hochgenaue Zeitmessung in C
- 5. python: pytest für cmd tools
- 6. Python-Debug-Tools für Multiprocessing
- 7. Zeitmessung von C-Programm ist 0
- 8. Genauigkeit der Zeitmessung
- 9. Diffrence requestScope und request.getParameter?
- 10. Python-basierte Build-Tools
- 11. Polymorphismus vs Vererbung. Diffrence?
- 12. JavaScript Subtract Time Diffrence
- 13. pgsql Zeit diffrence?
- 14. C++ Zeitmessung sieht zu langsam
- 15. Zeitmessung im Linux Kernel 2.6
- 16. diffrence zwischen .vimrc und .gvimrc
- 17. Cuda Kernel Zeitmessung mit CudaEventElapsedTime
- 18. Welche Refactoring-Tools verwenden Sie für .NET?
- 19. Zeitmessung Ausführung und Zuordnung in GPU
- 20. Welche Tools verwenden Sie für Sicherheitstests von Webanwendungen?
- 21. Atmega höchste BAUDRATE vs Zeitmessung Genauigkeit
- 22. Verwenden von externen Diff-Tools mit Mercurial
- 23. Verwenden von VueJs Build-Tools mit Laravel
- 24. Verwenden von React Dev Tools mit Preact
- 25. Verwenden visueller C++ - Tools für Windows-Desktop mit Installer
- 26. Manifestzusammenführung fehlgeschlagen, Tools verwenden: overrideLibrary
- 27. Verwenden von Python für die Spracherkennung
- 28. diffrence zwischen Verwendung von Funktions InStrRev() und Instrumente()
- 29. Benchmark-Tools für Delphi
- 30. Welche anderen Webanalyse-Tools gibt es?
Verwendung Multi-Threading-Modul zum Ausführen des Codes – babygame0ver
schneller Warum sollten Sie sich kümmern , an erster Stelle? –
Hallo, ich würde mich kümmern, da Präzision benötigt wird, um genaue TCP-Antwortzeit zu messen, so viel wie möglich. – tbaror