Piton

Slanje i primanje UDP paketa putem Pythona

Slanje i primanje UDP paketa putem Pythona
Već znamo za dva glavna protokola transportnog sloja poput TCP i UDP. Za više informacija o TCP-u i UDP-u možete provjeriti referentni odjeljak.  U ovom ćemo članku naučiti kako slati i primati UDP pakete pomoću python programa.

Očekivanja:

Evo nekoliko ključnih točaka koje se mogu naučiti iz ovog članka

  1. Slanje teksta pomoću programa python koji koristi UDP protokol.
  2. Primanje određenog teksta pomoću python programa koji koristi UDP protokol.
  3. Provjerite UDP paket u Wiresharku.
  4. Saznajte o python kodu za slanje i primanje UDP paketa.

Dijagram općenitog postavljanja:

Sustavi A i B trebali bi biti sposobni međusobno pingati.

Pretpostavke ili ograničenja:

  1. Oba sustava trebala bi imati Linux s Ubuntuom. Kôd može ili ne mora raditi na drugim operativnim sustavima poput Windows10, MAC itd.
  2. Oba sustava trebala bi imati python verziju 3. Ovaj kôd može ili ne mora raditi na python 2.7 verzija.

Napomena: Možete provjeriti referencu za isprobavanje slanja i primanja UDP paketa putem Linux CLI-ja prije nego što python datoteke izvrše isti zadatak.

Python datoteke:

Postoje dvije datoteke python poslužitelju.py i klijent.py. datoteka poslužitelja i datoteka klijenta trebaju biti prisutne u sustavu poslužitelja odnosno u sustavu klijenta.

Poslužitelj.py

utičnica za uvoz
import sys
ako je len (sys.argv) == 3:
# Nabavite "IP adresu poslužitelja", a također i "broj porta" od
argument 1 i argument 2
ip = sys.argv [1]
port = int (sys.argv [2])
drugo:
print ("Pokreni kao: python3 poslužitelj.py ")
izlaz (1)
# Stvorite UDP utičnicu
s = utičnica.utičnica (utičnica.AF_INET, utičnica.SOCK_DGRAM)
# Priključite utičnicu u priključak
server_address = (ip, port)
s.vezati (adresa_poslužitelja)
print ("Pritisnite Ctrl + c za izlaz iz programa !!")
dok je Istina:
ispis ("####### Server posluša #######")
podaci, adresa = s.povrat od (4096)
ispis ("\ n \ n 2. Primljen poslužitelj: ", podaci.dekodiraj ('utf-8'), "\ n \ n")
send_data = input ("Upišite tekst za slanje =>")
s.pošalji (podaci_pošiljanja.encode ('utf-8'), adresa)
ispis ("\ n \ n 1. Poslužitelj poslan: ", send_data," \ n \ n ")

Klijent.py

utičnica za uvoz
import sys
ako je len (sys.argv) == 3:
# Nabavite "IP adresu poslužitelja", a također i "broj porta" iz argumenta 1 i argumenta 2
ip = sys.argv [1]
port = int (sys.argv [2])
drugo:
print ("Pokreni kao: klijent python3.py ")
izlaz (1)
# Stvorite utičnicu za poslužitelj
s = utičnica.utičnica (utičnica.AF_INET, utičnica.SOCK_DGRAM, 0)
print ("Pritisnite Ctrl + c za izlaz iz programa !!")
# Pošaljite podatke putem UDP protokola
dok je Istina:
send_data = input ("Upišite tekst za slanje =>");
s.pošalji (podaci_pošiljanja.encode ('utf-8'), (ip, port))
ispis ("\ n \ n 1. Klijent poslan: ", send_data," \ n \ n ")
podaci, adresa = s.povrat od (4096)
ispis ("\ n \ n 2. Klijent je primio: ", podaci.dekodiraj ('utf-8'), "\ n \ n")
# zatvorite utičnicu
s.Zatvoriti()

Slanje / primanje UDP paketa:

Uzmimo primjer kao što ćemo poslati UDP paket iz sustava A u sustav B. Dakle, u konceptu poslužitelja-klijenta, moramo pokrenuti poslužitelj na strani sustava B, a klijent na strani sustava A.

Također imamo valjane IP adrese.

IP sustava sustava A: 192.168.1.6
IP sustava sustava B: 192.168.1.102

Sada ćemo, za razliku od slanja i primanja UDP paketa putem Linux CLI-ja, trčati poslužitelju.py u Sustavu, B [192.168.1.102] i tada ćemo trčati klijent.py u sustavu A [192.168.1.6].

Kako pokrenuti poslužitelj.py u 192.168.1.102?

Evo naredbe za pokretanje poslužitelja.py

$ python3 poslužitelj.py 192.168.1.102 4444

Evo snimke zaslona

Ovdje postoje dva argumenta za program python. 1sv argument je IP adresa samog poslužitelja, ovdje 192.168.1.102 i 2nd argument je port koji će poslužitelj slušati, ovdje smo odabrali 4444.

Kako pokrenuti klijenta.py u 192.168.1.6?

Evo naredbe za pokretanje klijenta.py

$ python3 klijent.py 192.168.1.102 4444

Evo snimke zaslona

Ovdje postoje dva argumenta za program python. 1sv argument je IP adresa poslužitelja, ovdje je 192.168.1.102 i 2nd argument je port na kojem je pokrenut poslužitelj. Za naš primjer to je 4444.

Pošaljite ili primite tekst:

Kao što vidite, spremni smo za komunikaciju između dva sustava. Ali prvo moramo krenuti od klijenta. Utipkamo nešto u klijent i provjerimo dolazi li do poslužitelja ili ne.

Pošalji podatke od klijenta: "Ja sam od klijenta"

Klijent obrasca zaslona:

Sada bi ova poruka klijenta trebala doći na poslužitelj. Evo snimke zaslona poslužitelja.

Sada na strani poslužitelja možemo vidjeti i mogućnost slanja nečega klijentu. Pokušajmo to.

Pošalji podatke od klijenta: "Ja sam s poslužitelja"

Snimak zaslona poslužitelja:

I ovdje je snimka zaslona na strani klijenta.

Sada će to trajati beskonačno puno dok ne zaustavimo program python pomoću Ctrl + c.

Provjerite UDP paket u Wiresharku:

Sad smo obavili određenu komunikaciju, ali kako saznati da je UDP korišten za slanje ili primanje tih paketa. Dakle, snimanje možemo provjeriti u Wiresharku.

Pogledajmo paket kada klijent [192.168.1.6] poslao je podatke [„Ja sam klijent“] na poslužitelj [192.168.1.6].

Objašnjenje koda:

Osnovna objašnjenja python koda potražite u odjeljku "Pošaljite prijenos datoteke Python Socket File" u referentnom dijelu.

Objasnit ćemo samo važne kodove linija za datoteku klijenta i poslužitelja python. Unutar klijentskog i poslužiteljskog koda nalaze se korisni komentari.

Objašnjenje klijentskog koda:

ako je len (sys.argv) == 3:

Gornji redak potreban je za provjeru je li korisnik proslijedio potrebne obvezne argumente. Inače će program izaći. Ista provjera postoji i u poslužiteljskom programu.

s = utičnica.utičnica (utičnica.AF_INET, utičnica.SOCK_DGRAM, 0)

Gornji redak je stvoriti socket poslužitelj s UDP-om [SOCK_DGRAM] protokol. Isti je kod na serveru.py.

dok je Istina:

Za pokretanje programa u beskonačnoj petlji dok korisnik ne napravi Ctrl + c. Isti je kod na serveru.py.

s.pošalji (podaci_pošiljanja.encode ('utf-8'), (ip, port))

Za slanje podataka za spomenute ip i luka broj.

podaci, adresa = s.povrat od (4096)

Za primanje podataka koji dolaze s poslužitelja. Isti je kod na serveru.py.

Objašnjenje koda poslužitelja:

s.pošalji (podaci_pošiljanja.encode ('utf-8'), adresa)

Pošaljite podatke na adresu klijenta.

Zaključak:

UDP podatke možemo slati ili primati pomoću programa python. Interno koristi mehanizam poslužiteljskog klijenta.

Reference:

Da biste razumjeli TCP: https: // linuxhint.com / tcp_packet_capture_analysis /
Da biste razumjeli UDP: https: // linuxhint.com / udp_wireshark_analysis /
Slanje i primanje UDP paketa putem Linux CLI-ja:
https: // linuxhint.com / send_receive_udp_packets_linux_cli /
Slanje datoteke za prijenos datoteke Python Socket:
https: // linuxhint.com / python_socket_file_transfer_send /

Microsoft Sculpt Touch bežični miš pregled
Nedavno sam čitao o Microsoft Sculpt Touch bežični miš i odlučio ga kupiti. Nakon što sam ga neko vrijeme koristio, odlučio sam s njim podijeliti svoj...
Trackpad i pokazivač miša na ekranu AppyMouse za Windows tablete
Korisnicima tableta često nedostaje pokazivač miša, posebno kada su navični koristiti prijenosna računala. Pametni telefoni i tableti osjetljivi na do...
Srednja tipka miša ne radi u sustavu Windows 10
The srednja tipka miša pomaže vam u pomicanju kroz dugačke web stranice i zaslone s puno podataka. Ako se to zaustavi, na kraju ćete koristiti tipkovn...