Invia e ricevi i pacchetti UDP tramite Python

Invia e ricevi i pacchetti UDP tramite Python
Sappiamo già due protocolli di strati di trasporto principali come TCP e UDP. Per ulteriori informazioni su TCP e UDP è possibile controllare la sezione di riferimento. In questo articolo impareremo come inviare e ricevere pacchetti UDP usando il programma Python.

Aspettative:

Ecco alcuni punti chiave possono essere appresi da questo articolo

  1. Invio di un po 'di testo usando il programma Python che utilizza il protocollo UDP.
  2. Ricevere un po 'di testo usando il programma Python che utilizza il protocollo UDP.
  3. Controlla il pacchetto UDP in Wireshark.
  4. Scopri il codice Python per inviare e ricevere pacchetti UDP.

Diagramma di configurazione generale:

Il sistema A e B dovrebbero essere in grado di ping a vicenda.

Ipotesi o limitazioni:

  1. Entrambi i sistemi dovrebbero avere Linux con Ubuntu. Il codice può o meno funzionare su altri sistemi operativi come Windows10, Mac ecc.
  2. Entrambi i sistemi dovrebbero avere Python versione 3. Questo codice può o meno funzionare su Python 2.7 versione.

Nota: è possibile controllare il riferimento per provare l'invio e ricevere pacchetti UDP tramite Linux CLI prima di andare per i file Python per svolgere la stessa attività.

File Python:

Ci sono due file Python server.Py E cliente.Py. Il file del server e il file client dovrebbero essere presenti rispettivamente nel sistema server e nel sistema client.

server.Py

Società di importazione
Import sys
Se len (sys.argv) == 3:
# Ottieni "Indirizzo IP del server" e anche dal "numero di porta" dall'argomento 1 e dall'argomento 2
ip = sys.argv [1]
porta = int (sys.argv [2])
altro:
Stampa ("Esegui come: Python3 Server.py ")
uscita (1)
# Crea una presa UDP
S = socket.Socket (presa.Af_inet, socket.Sock_Dgram)
# Lega la presa alla porta
server_address = (ip, porta)
S.bind (server_address)
Stampa ("Do ctrl+c per uscire dal programma !!")
mentre è vero:
Stampa ("####### Server è in ascolto ######")
dati, indirizzo = s.RECVFROM (4096)
Stampa ("\ n \ n 2. Server ricevuto: ", dati.decode ('utf-8'), "\ n \ n")
send_data = input ("digitare un po 'di testo da inviare =>")
S.SENDTO (SEND_DATA.ENCODE ('UTF-8'), indirizzo)
stampa ("\ n \ n 1. Server inviato: ", send_data" \ n \ n ")

Cliente.Py

Società di importazione
Import sys
Se len (sys.argv) == 3:
# Ottieni "Indirizzo IP del server" e anche dal "numero di porta" dall'argomento 1 e dall'argomento 2
ip = sys.argv [1]
porta = int (sys.argv [2])
altro:
Stampa ("Esegui come: Python3 Client.py ")
uscita (1)
# Crea socket per il server
S = socket.Socket (presa.Af_inet, socket.Sock_Dgram, 0)
Stampa ("Do ctrl+c per uscire dal programma !!")
# Inviamo dati tramite protocollo UDP
mentre è vero:
send_data = input ("digitare un po 'di testo da inviare =>");
S.SENDTO (SEND_DATA.ENCODE ('UTF-8'), (IP, porta))
stampa ("\ n \ n 1. Cliente inviato: ", send_data", \ n \ n ")
dati, indirizzo = s.RECVFROM (4096)
Stampa ("\ n \ n 2. Cliente ricevuto: ", Dati.decode ('utf-8'), "\ n \ n")
# Chiudi la presa
S.vicino()

Invia/ricevi il pacchetto UDP:

Facciamo un esempio come invieremo il pacchetto UDP dal sistema A al sistema B. Quindi, nel concetto di server-cliente, dobbiamo eseguire il server sul lato del sistema B e il client sul sistema un lato.

Inoltre abbiamo indirizzi IP validi.

Sistema a IP: 192.168.1.6
Sistema B IP: 192.168.1.102

Ora, a differenza di Invia e ricevere pacchetti UDP tramite Linux CLI, eseguiremo server.Py nel sistema, b [192.168.1.102] e poi correremo cliente.Py nel sistema A [192.168.1.6].

Come eseguire il server.Py nel 192.168.1.102?

Ecco il comando per eseguire il server.Py

server $ python3.Py 192.168.1.102 4444

Ecco lo screenshot

Qui ci sono due argomenti per il programma Python. 1st L'argomento è l'indirizzo IP del server stesso, qui il suo 192.168.1.102 e 2nd L'argomento è porta quale server ascolterà, qui abbiamo scelto 4444.

Come eseguire il client.Py nel 192.168.1.6?

Ecco il comando per eseguire il client.Py

Cliente $ Python3.Py 192.168.1.102 4444

Ecco lo screenshot

Qui ci sono due argomenti per il programma Python. 1st L'argomento è l'indirizzo IP del server, qui è 192.168.1.102 e 2nd L'argomento è la porta in cui il server è in esecuzione. Per il nostro esempio è 4444.

Invia o ricevi un po 'di testo:

Ora, come puoi vedere, siamo pronti a comunicare tra due sistemi. Ma dobbiamo prima iniziare dal cliente. Digitiamo qualcosa nel client e vediamo se arriva al server o no.

Invia dati dal client: "Vengo dal cliente"

Cliente del modulo di screenshot:

Ora questo messaggio client dovrebbe arrivare al server. Ecco lo screenshot del server.

Ora possiamo vedere nel lato server, abbiamo anche la possibilità di inviare qualcosa al client. Proviamolo.

Invia dati dal client: "Vengo dal server"

Screenshot del server:

Ed ecco lo screenshot sul lato client.

Ora questo andrà in tempi infiniti fino a quando non fermeremo il programma Python usando Ctrl+C.

Controlla il pacchetto UDP in Wireshark:

Ora abbiamo fatto qualche comunicazione, ma come facciamo a sapere che UDP è stato usato per inviare o ricevere quei pacchetti. Quindi, possiamo controllare l'acquisizione in Wireshark.

Vediamo il pacchetto quando client [192.168.1.6] hanno inviato dati ["Io dal client"] al server [192.168.1.6].

Spiegazione del codice:

Per il codice Python di base Spiegazione consultare "Python Socket File Transfer Send" nella sezione di riferimento.

Spiegheremo solo i codici delle linee importanti per il file Python client e server. Ci sono commenti utili all'interno del codice client e server.

Spiegazione del codice client:

Se len (sys.argv) == 3:

La riga sopra è richiesta per verificare se l'utente ha superato gli argomenti obbligatori richiesti. Altrimenti il ​​programma uscirà. Lo stesso controllo è presente nel programma del server.

S = socket.Socket (presa.Af_inet, socket.Sock_Dgram, 0)

La riga sopra è quella di creare Socket Server con UDP [Sock_Dgram] protocollo. Lo stesso codice è presente nel server.Py.

mentre è vero:

Per eseguire il programma in un ciclo infinito fino a quando l'utente non esegue Ctrl+C. Lo stesso codice è presente nel server.Py.

S.SENDTO (SEND_DATA.ENCODE ('UTF-8'), (IP, porta))

Per inviare dati per menzionato IP E porta numero.

dati, indirizzo = s.RECVFROM (4096)

Per ricevere dati provenienti dal server. Lo stesso codice è presente nel server.Py.

Spiegazione del codice del server:

S.SENDTO (SEND_DATA.ENCODE ('UTF-8'), indirizzo)

Invia dati all'indirizzo client.

Conclusione:

Possiamo inviare o ricevere dati UDP utilizzando il programma Python. Internamente utilizza il meccanismo del client server.

Riferimenti:

Per capire TCP: https: // linuxhint.com/tcp_packet_capture_analysis/
Per capire UDP: https: // linuxhint.com/udp_wireshark_analysis/
Invia e ricevi i pacchetti UDP tramite Linux CLI:
https: // linuxhint.com/send_receive_udp_packets_linux_cli/
Python Socket File Transfer Invia:
https: // linuxhint.com/python_socket_file_transfer_send/