Očekivanja:
Evo nekoliko ključnih točaka koje se mogu naučiti iz ovog članka
- Slanje teksta pomoću programa python koji koristi UDP protokol.
- Primanje određenog teksta pomoću python programa koji koristi UDP protokol.
- Provjerite UDP paket u Wiresharku.
- 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:
- Oba sustava trebala bi imati Linux s Ubuntuom. Kôd može ili ne mora raditi na drugim operativnim sustavima poput Windows10, MAC itd.
- 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 uvozimport 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 uvozimport 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.6IP 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 4444Evo 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 4444Evo 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 /