Расчет RTT с использованием IP-адреса - PullRequest
0 голосов
/ 13 июля 2020

Привет, я пытаюсь найти способ вычислить время прохождения туда и обратно для определенного c IP, используя python. Все, что я могу найти, это использование URL-адреса, но я бы не хотел, чтобы он работал так, и пока никакой информации не было.

Я нашел только этот код:

import time 
import requests 
  
# Function to calculate the RTT 
def RTT(url): 
  
    # time when the signal is sent 
    t1 = time.time() 
  
    r = requests.get(url) 
  
    # time when acknowledgement of signal  
    # is received 
    t2 = time.time() 
  
    # total time taken 
    tim = str(t2-t1) 
  
    print("Time in seconds :" + tim) 
  
# driver program  
# url address 
url = "http://www.google.com"
RTT(url) 

Кто-нибудь может пожалуйста скажите мне, как я могу настроить этот код, чтобы он принимал IP-адрес, а не URL-адрес? Спасибо

1 Ответ

0 голосов
/ 13 июля 2020

URL-адрес следует в заданном c формате: протокол + поддомен + домен + путь + имя файла. Доменная часть URL-адреса - это, по сути, удобный IP-адрес, а это означает, что DNS будет / может разрешить его на точный IP-адрес. Это должно означать, что мы можем заменить доменную часть нашего URL-адреса нашим IP-адресом / портом, и этот код должен работать нормально. Используя протокол HTTP с нашим локальным IP-адресом, мы должны внести следующие изменения:

url = "http://127.0.0.1"

Здесь мы используем порт 80, по умолчанию для протокола HTTP, но мы можем добавить также настраиваемый номер порта для URL-адреса: url = "http://127.0.0.1:8000"

Другой вариант - открыть сокет, отправить данные и дождаться ответа. Вот пример использования TCP-соединения:

import time
import socket
def RTT(host="127.0.0.1", port=80, timeout=40):
    # Format our parameters into a tuple to be passed to the socket
    sock_params = (host, port)
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
        # Set the timeout in the event that the host/port we are pinging doesn't send information back
        sock.settimeout(timeout)
        # Open a TCP Connection
        sock.connect(sock_params)
        # Time prior to sending 1 byte
        t1 = time.time()
        sock.sendall(b'1')
        data = sock.recv(1)
        # Time after receiving 1 byte
        t2 = time.time()
        # RTT
        return t2-t1
...