Python

Posielajte a prijímajte pakety UDP cez Python

Posielajte a prijímajte pakety UDP cez Python
Už vieme o dvoch hlavných protokoloch transportnej vrstvy, ako sú TCP a UDP. Viac informácií o TCP a UDP nájdete v referenčnej sekcii.  V tomto článku sa dozvieme, ako odosielať a prijímať pakety UDP pomocou programu python.

Očakávania:

Tu je niekoľko kľúčových bodov, z ktorých sa možno dozvedieť z tohto článku

  1. Posielanie textu pomocou programu python, ktorý používa protokol UDP.
  2. Príjem textu pomocou programu python, ktorý používa protokol UDP.
  3. Skontrolujte paket UDP vo Wireshark.
  4. Dozviete sa viac o kóde python na odosielanie a prijímanie paketov UDP.

Všeobecný diagram nastavenia:

Systémy A a B by mali byť schopné navzájom sa testovať.

Predpoklady alebo obmedzenia:

  1. Oba systémy by mali mať Linux a Ubuntu. Tento kód môže alebo nemusí fungovať v iných operačných systémoch, ako sú Windows10, MAC atď.
  2. Oba systémy by mali mať python verzie 3. Tento kód môže, ale nemusí fungovať na pythone 2.Verzia 7.

Poznámka: Môžete skontrolovať referenciu na vyskúšanie Odosielať a prijímať pakety UDP cez rozhranie Linux CLI predtým, ako vykonajú rovnakú úlohu súbory python.

Súbory Pythonu:

Existujú dva súbory pythonu server.py a zákazník.py. súbor servera a súbor klienta by mali byť prítomné v serverovom systéme a klientskom systéme.

Server.py

dovozná zásuvka
import sys
ak len (sys.argv) == 3:
# Získajte "IP adresu servera" a tiež "číslo portu" z
argument 1 a argument 2
ip = sys.argv [1]
port = int (sys.argv [2])
inak:
print ("Spustiť ako: server python3.py „)
výstup (1)
# Vytvorte UDP soket
s = zásuvka.zásuvka (zásuvka.AF_INET, socket.SOCK_DGRAM)
# Pripojte zásuvku k portu
server_address = (ip, port)
s.väzba (adresa_serveru)
print ("Ukončite Ctrl + c pre ukončenie programu !!„)
zatiaľ čo je pravda:
print ("####### Server počúva #######")
údaje, adresa = s.recvfrom (4096)
print ("\ n \ n 2. Server dostal: „, údaje.dekódovať ('utf-8'), "\ n \ n")
send_data = input ("Zadajte text na odoslanie =>")
s.sendto (send_data.kódovanie ('utf-8'), adresa)
print ("\ n \ n 1. Server sent: ", send_data," \ n \ n ")

Zákazník.py

dovozná zásuvka
import sys
ak len (sys.argv) == 3:
# Získajte „IP adresu servera“ a tiež „číslo portu“ z argumentov 1 a 2
ip = sys.argv [1]
port = int (sys.argv [2])
inak:
print ("Spustiť ako: klient python3.py „)
výstup (1)
# Vytvorte soket pre server
s = zásuvka.zásuvka (zásuvka.AF_INET, socket.SOCK_DGRAM, 0)
print ("Ukončite Ctrl + c pre ukončenie programu !!„)
# Posielame údaje prostredníctvom protokolu UDP
zatiaľ čo je pravda:
send_data = input ("Zadajte text na odoslanie =>");
s.sendto (send_data.encode ('utf-8'), (ip, port))
print ("\ n \ n 1. Klient odoslaný: ", send_data," \ n \ n ")
údaje, adresa = s.recvfrom (4096)
print ("\ n \ n 2. Klient dostal: „, údaje.dekódovať ('utf-8'), "\ n \ n")
# zatvorte zásuvku
s.Zavrieť()

Odoslať / prijať paket UDP:

Zoberme si príklad, ako keby sme poslali UDP paket zo systému A do systému B. V koncepcii server-klient teda musíme spustiť server na strane systému B a klienta na strane systému A.

Máme tiež platné adresy IP.

Systém A IP: 192.168.1.6
Systém B IP: 192.168.1.102

Teraz na rozdiel od odosielania a prijímania paketov UDP cez Linux CLI budeme bežať server.py v systéme, B [192.168.1.102] a potom bežíme zákazník.py v systéme A [192.168.1.6].

Ako spustiť server.py v roku 192.168.1.102?

Tu je príkaz na spustenie servera.py

server $ python3.py 192.168.1.102 4444

Tu je snímka obrazovky

Tu sú dva argumenty pre program python. 1sv argumentom je IP adresa samotného servera, tu jeho 192.168.1.102 a 2nd argument je port, ktorý bude server počúvať, tu sme vybrali 4444.

Ako spustiť klienta.py v roku 192.168.1.6?

Tu je príkaz na spustenie klienta.py

$ python3 klient.py 192.168.1.102 4444

Tu je snímka obrazovky

Tu sú dva argumenty pre program python. 1sv argument je IP adresa servera, tu jeho 192.168.1.102 a 2nd argument je port, na ktorom je spustený server. Pre náš príklad je to 4444.

Odoslať alebo prijať text:

Teraz môžete vidieť, že sme pripravení komunikovať medzi dvoma systémami. Najprv však musíme začať od klienta. Poďme niečo napísať do klienta a uvidíme, či sa to dostane na server alebo nie.

Odoslať údaje od klienta: „Som z klienta“

Klient formulára snímky obrazovky:

Teraz by mala táto správa klienta doraziť na server. Tu je screenshot servera.

Teraz vidíme na strane servera aj to, že máme možnosť niečo klientovi poslať. Skúsme to.

Odoslať údaje od klienta: „I am from Server“

Screenshot servera:

A tu je snímka obrazovky na strane klienta.

Teraz to bude trvať nekonečne dlho, kým program Python nezastavíme pomocou Ctrl + c.

Skontrolujte paket UDP vo Wireshark:

Teraz sme vykonali určitú komunikáciu, ale ako sa dozvieme, že na odosielanie alebo prijímanie týchto paketov bol použitý protokol UDP. Môžeme teda skontrolovať zachytenie vo Wiresharku.

Pozrime sa na paket, keď je klient [192.168.1.6] odoslal údaje [„Som od klienta“] na server [192.168.1.6].

Vysvetlenie kódu:

Základné vysvetlenie kódu pythonu nájdete v príručke „Python Socket File Transfer Send“.

Vysvetlíme iba dôležité kódy riadkov pre súbor python klienta a servera. Vo vnútri kódu klienta a servera sú užitočné poznámky.

Vysvetlenie kódu klienta:

ak len (sys.argv) == 3:

Vyššie uvedený riadok sa vyžaduje na kontrolu, či používateľ odovzdal povinné povinné argumenty. Alebo sa program ukončí. Rovnaká kontrola je aj v serverovom programe.

s = zásuvka.zásuvka (zásuvka.AF_INET, socket.SOCK_DGRAM, 0)

Vyššie uvedený riadok má vytvoriť soketový server s UDP [SOCK_DGRAM] protokol. Rovnaký kód je aj na serveri.py.

zatiaľ čo je pravda:

Spustiť program v nekonečnej slučke, kým užívateľ neurobí Ctrl + c. Rovnaký kód je aj na serveri.py.

s.sendto (send_data.encode ('utf-8'), (ip, port))

Ak chcete odoslať údaje pre uvedené ip a prístav číslo.

údaje, adresa = s.recvfrom (4096)

Prijímať akékoľvek údaje prichádzajúce zo servera. Rovnaký kód je aj na serveri.py.

Vysvetlenie kódu servera:

s.sendto (send_data.kódovanie ('utf-8'), adresa)

Pošlite údaje na adresu klienta.

Záver:

Môžeme odosielať alebo prijímať údaje UDP pomocou programu python. Interne využíva mechanizmus servera a klienta.

Referencie:

Pre pochopenie protokolu TCP: https: // linuxhint.com / tcp_packet_capture_analysis /
Pre pochopenie UDP: https: // linuxhint.com / udp_wireshark_analysis /
Odosielanie a prijímanie paketov UDP cez rozhranie Linux CLI:
https: // linuxhint.com / send_receive_udp_packets_linux_cli /
Python Socket File Transfer Odoslať:
https: // linuxhint.com / python_socket_file_transfer_send /

Top 5 ergonomických produktov pre počítačové myši pre Linux
Spôsobuje dlhodobé používanie počítača bolesť zápästia alebo prstov? Trpíte stuhnutými kĺbmi a neustále si musíte podávať ruky? Cítite pálivú bolesť z...
Ako zmeniť nastavenie myši a touchpadu pomocou systému Xinput v systéme Linux
Väčšina distribúcií systému Linux sa štandardne dodáva s knižnicou „libinput“ na spracovanie vstupných udalostí v systéme. Dokáže spracovať vstupné ud...
S ovládaním pomocou myši X-Mouse môžete tlačidlá myši premapovať odlišne pre iný softvér
Možno budete potrebovať nástroj, ktorý by mohol zmeniť ovládanie myši pri každej aplikácii, ktorú používate. Ak je to váš prípad, môžete vyskúšať apli...