Python: effettuare richieste TCP

Python: effettuare richieste TCP

In Python per effettuare una richiesta utilizzando il protocollo TCP, occorre utilizzare il modulo socket della standard library.

Dobbiamo creare un'istanza della classe socket impostando come prima cosa un timeout alla nostra connessione. Se l'operazione supera il tempo massimo impostato, viene sollevata l'eccezione TimeoutError.

La connessione avviene specificando il nome dell'host e la porta remota. Possiamo anche inviare dei dati come payload codificandoli come flusso (stream) di byte usando il metodo encode() delle stringhe. La risposta viene restituita in un buffer di cui possiamo specificare la dimensione in byte con il metodo recv(). A questo punto decodifichiamo la risposta come stringa tramite il metodo decode() e chiudiamo la connessione con l'host remoto.

import socket


def send_tcp_request(host='127.0.0.1', port=80, payload='\r\n', timeout=3):
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.settimeout(timeout)
    try:
        client.connect((host, port))
        client.send(payload.encode())
        response = client.recv(4096)
        output = response.decode()
        client.close()
        return output
    except TimeoutError as e:
        return e


print(send_tcp_request(host='192.168.1.7', port=22))

Un possibile output in caso di successo potrebbe essere il seguente:

SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.1

Qualora venisse sollevata l'eccezione in caso di timeout della connessione, l'output sarĂ :

timed out
Torna su