Send og motta UDP -pakker via Python

Send og motta UDP -pakker via Python
Vi vet allerede om to hovedtransportlagsprotokoller som TCP og UDP. For mer informasjon om TCP og UDP kan du sjekke referanseseksjonen. I denne artikkelen vil vi lære å sende og motta UDP -pakker ved hjelp av Python -programmet.

Forventninger:

Her er noen viktige punkter kan læres fra denne artikkelen

  1. Sende litt tekst ved hjelp av Python -program som bruker UDP -protokoll.
  2. Motta litt tekst ved hjelp av Python -program som bruker UDP -protokoll.
  3. Sjekk UDP -pakke i Wireshark.
  4. Lær om Python -kode for å sende og motta UDP -pakker.

Generelt sett opp diagram:

System A og B skal i stand til å pinge hverandre.

Antagelser eller begrensninger:

  1. Begge systemene skal ha Linux med Ubuntu. Koden fungerer kanskje ikke på annet operativsystem som Windows10, Mac osv.
  2. Begge systemene skal ha Python versjon 3. Denne koden fungerer kanskje ikke på Python 2.7 versjon.

Merk: Du kan sjekke referanse for å prøve ut Send og motta UDP -pakker via Linux CLI før du går for Python -filer for å gjøre den samme oppgaven.

Python -filer:

Det er to Python -filer server.py og klient.py. Serverfil og klientfil skal være til stede i henholdsvis serversystem og klientsystem.

Server.py

Importkontakt
Importer Sys
Hvis Len (SYS.argv) == 3:
# Få "IP -adresse til serveren" og også "portnummeret" fra argument 1 og argument 2
IP = sys.Argv [1]
port = int (sys.Argv [2])
ellers:
skriv ut ("Kjør som: Python3 -server.py ")
Avslutt (1)
# Lag en UDP -stikkontakt
S = stikkontakt.stikkontakt (stikkontakt.Af_inet, stikkontakt.SOCK_DGRAM)
# Bind kontakten til porten
server_address = (ip, port)
s.bind (server_address)
trykk ("Gjør Ctrl+C for å avslutte programmet !!")
Mens sant:
Print ("###### server lytter #######")
data, adresse = S.RECVFROM (4096)
trykk ("\ n \ n 2. Server mottatt: ", data.dekode ('utf-8'), "\ n \ n")
send_data = input ("Skriv inn noen tekst til send =>")
s.SendTo (send_data.Encode ('UTF-8'), adresse)
trykk ("\ n \ n 1. Server sendt: ", send_data," \ n \ n ")

Klient.py

Importkontakt
Importer Sys
Hvis Len (SYS.argv) == 3:
# Få "IP -adresse til serveren" og også "portnummeret" fra argument 1 og argument 2
IP = sys.Argv [1]
port = int (sys.Argv [2])
ellers:
Print ("Kjør som: Python3 -klient.py ")
Avslutt (1)
# Lag stikkontakt for server
S = stikkontakt.stikkontakt (stikkontakt.Af_inet, stikkontakt.SOCK_DGRAM, 0)
trykk ("Gjør Ctrl+C for å avslutte programmet !!")
# La oss sende data gjennom UDP -protokollen
Mens sant:
send_data = input ("Skriv inn noen tekst til send =>");
s.SendTo (send_data.Encode ('UTF-8'), (IP, port))
trykk ("\ n \ n 1. Klient sendt: ", send_data," \ n \ n ")
data, adresse = S.RECVFROM (4096)
trykk ("\ n \ n 2. Klienten mottatt: ", Data.dekode ('utf-8'), "\ n \ n")
# Lukk kontakten
s.Lukk()

Send/motta UDP -pakke:

La oss ta et eksempel som om vi vil sende UDP -pakke fra system A til system B. Så i serverklient-konsept må vi kjøre server på system B-side og klient på systemet en side.

Vi har også gyldige IP -adresser.

System A IP: 192.168.1.6
System B ip: 192.168.1.102

Nå i motsetning til å sende og motta UDP -pakker via Linux CLI vil vi løpe server.py i system, B [192.168.1.102] Og så vil vi løpe klient.py I system A [192.168.1.6].

Hvordan kjøre server.PY i 192.168.1.102?

Her er kommandoen for å kjøre server.py

$ python3 -server.PY 192.168.1.102 4444

Her er skjermbildet

Her er det to argumenter for Python -programmet. 1st Argument er IP -adresse til serveren selv, her er det 192.168.1.102 og 2nd Argument er port som serveren som skal lytte, her har vi valgt 4444.

Hvordan kjøre klient.PY i 192.168.1.6?

Her er kommandoen for å kjøre klient.py

$ Python3 -klient.PY 192.168.1.102 4444

Her er skjermbildet

Her er det to argumenter for Python -programmet. 1st Argument er IP -adresse til serveren, her er det 192.168.1.102 og 2nd Argument er port der serveren kjører. For vårt eksempel er det 4444.

Send eller motta litt tekst:

Nå som du ser er vi klare til å kommunisere mellom to systemer. Men vi må starte fra klienten først. La oss skrive noe i klienten og se om det når til serveren eller ikke.

Send data fra klienten: “Jeg er fra klienten”

Skjermbilde fra klient:

Nå skal denne klientmeldingen komme til serveren. Her er serverskjermbildet.

Nå kan vi se på serversiden også vi har mulighet til å sende noe til klienten. La oss prøve det.

Send data fra klienten: “Jeg er fra server”

Serverskjermbilde:

Og her er skjermbildet på klientsiden.

Nå vil dette gå i uendelige tider til vi stopper Python -programmet ved å bruke Ctrl+C.

Sjekk UDP -pakke i Wireshark:

Nå har vi gjort litt kommunikasjon, men hvordan blir vi kjent med at UDP ble brukt til å sende eller motta disse pakkene. Så vi kan sjekke fangst i Wireshark.

La oss se pakken når klienten [192.168.1.6] sendte data [“Jeg er fra klient”] til Server [192.168.1.6].

Kodeforklaring:

For grunnleggende Python -kode Forklaring Se “Python Socket File Transfer Send” i referanseseksjonen.

Vi vil bare forklare viktige linjekoder for klient og server python -fil. Det er nyttige kommentarer i klienten og serverkoden.

Klientkodeforklaring:

Hvis Len (SYS.argv) == 3:

Ovennevnte linje er nødvendig for å sjekke om brukeren har bestått nødvendige obligatoriske argumenter. Ellers vil programmet avslutte. Samme sjekk er der i serverprogrammet.

S = stikkontakt.stikkontakt (stikkontakt.Af_inet, stikkontakt.SOCK_DGRAM, 0)

Ovennevnte linje er å lage socket -server med UDP [SOCK_DGRAM] protokoll. Samme kode er der på serveren.py.

Mens sant:

Å kjøre program i uendelig sløyfe til brukeren gjør Ctrl+C. Samme kode er der på serveren.py.

s.SendTo (send_data.Encode ('UTF-8'), (IP, port))

Å sende data for nevnt IP og havn Antall.

data, adresse = S.RECVFROM (4096)

For å motta data som kommer fra serveren. Samme kode er der på serveren.py.

Serverkode Forklaring:

s.SendTo (send_data.Encode ('UTF-8'), adresse)

Send data til klientadresse.

Konklusjon:

Vi kan sende eller motta UDP -data ved hjelp av Python -programmet. Internt bruker den serverklientmekanismen.

Referanser:

Å forstå TCP: https: // linuxhint.com/tcp_packet_capture_analyse/
Å forstå UDP: https: // linuxhint.com/udp_wireshark_analyse/
Send og motta UDP -pakker via Linux CLI:
https: // linuxhint.com/send_receive_udp_packets_linux_cli/
Python Socket File Transfer Send:
https: // linuxhint.com/python_socket_file_transfer_send/