Python

Sūtiet un saņemiet UDP paketes, izmantojot Python

Sūtiet un saņemiet UDP paketes, izmantojot Python
Mēs jau zinām par diviem galvenajiem transporta slāņa protokoliem, piemēram, TCP un UDP. Lai iegūtu vairāk informācijas par TCP un UDP, skatiet atsauces sadaļu.  Šajā rakstā mēs uzzināsim, kā nosūtīt un saņemt UDP paketes, izmantojot Python programmu.

Cerības:

Šeit ir daži galvenie punkti, kurus var uzzināt no šī raksta

  1. Nosūtot tekstu, izmantojot Python programmu, kas izmanto UDP protokolu.
  2. Saņemt tekstu, izmantojot Python programmu, kas izmanto UDP protokolu.
  3. Pārbaudiet UDP paketi Wireshark.
  4. Uzziniet par pitona kodu, lai nosūtītu un saņemtu UDP paketes.

Vispārējā iestatīšanas shēma:

Sistēmai A un B vajadzētu būt iespējai pingēt viens otru.

Pieņēmumi vai ierobežojumi:

  1. Abām sistēmām vajadzētu būt Linux ar Ubuntu. Kods var darboties citā operētājsistēmā, piemēram, Windows10, MAC utt.
  2. Abām sistēmām jābūt ar pitona 3. versiju. Šis kods var vai nedarbojas pitonā 2.7 versija.

Piezīme. Pirms dodaties uz Python failiem, lai veiktu to pašu uzdevumu, varat pārbaudīt, kā izmēģināt UDP pakešu sūtīšanu un saņemšanu, izmantojot Linux CLI.

Python faili:

Ir divi pitona faili serveris.py un klients.py. servera failam un klienta failam jābūt attiecīgi Servera sistēmā un Klienta sistēmā.

Serveris.py

importa ligzda
importa sys
ja len (sys.argv) == 3:
# Iegūstiet "Server IP adresi" un arī "porta numuru" no
1. un 2. arguments
ip = sys.argv [1]
ports = int (sys.argv [2])
cits:
drukāt ("Palaist kā: python3 serveris.py ")
izeja (1)
# Izveidojiet UDP ligzdu
s = kontaktligzda.kontaktligzda (kontaktligzda.AF_INET, kontaktligzda.SOCK_DGRAM)
# Piesaistiet kontaktligzdu ostai
servera adrese = (ip, ports)
s.saistīt (servera adrese)
print ("Lai izietu no programmas, nospiediet taustiņu kombināciju Ctrl + c !!")
kamēr patiess:
drukāt ("####### serveris klausās #######")
dati, adrese = s.recvfrom (4096)
izdrukāt ("\ n \ n 2. Serveris saņēma: ", dati.atšifrēt ('utf-8'), "\ n \ n")
send_data = ievade ("Ierakstiet tekstu, ko nosūtīt =>")
s.sendto (send_data.kodēt ('utf-8', adrese)
izdrukāt ("\ n \ n 1. Serveris nosūtīja: ", send_data," \ n \ n ")

Klients.py

importa ligzda
importa sys
ja len (sys.argv) == 3:
# Iegūstiet "Servera IP adresi", kā arī "porta numuru" no 1. un 2. argumenta
ip = sys.argv [1]
ports = int (sys.argv [2])
cits:
drukāt ("Palaist kā: python3 klients.py ")
izeja (1)
# Izveidojiet ligzdu serverim
s = kontaktligzda.kontaktligzda (kontaktligzda.AF_INET, kontaktligzda.SOCK_DGRAM, 0)
print ("Lai izietu no programmas, nospiediet taustiņu kombināciju Ctrl + c !!")
# Nosūtīsim datus, izmantojot UDP protokolu
kamēr patiess:
send_data = ievade ("Ierakstiet tekstu, ko nosūtīt =>");
s.sendto (send_data.kodēt ('utf-8'), (ip, ports))
izdrukāt ("\ n \ n 1. Klients nosūtīts: ", send_data," \ n \ n ")
dati, adrese = s.recvfrom (4096)
izdrukāt ("\ n \ n 2. Klients saņēma: ", datus.atšifrēt ('utf-8'), "\ n \ n")
# aizveriet kontaktligzdu
s.aizvērt ()

Sūtīt / saņemt UDP paketi:

Ņemsim piemēru, piemēram, mēs nosūtīsim UDP paketi no A sistēmas uz B sistēmu. Tātad, servera un klienta koncepcijā mums serveris jāpalaiž B sistēmas pusē un klients A sistēmas pusē.

Arī mums ir derīgas IP adreses.

A sistēmas IP: 192.168. lpp.1.6
B sistēma IP: 192.168. lpp.1.102

Tagad, atšķirībā no UDP pakešu sūtīšanas un saņemšanas, izmantojot Linux CLI, mēs darbosimies serveris.py sistēmā, B [192.168. lpp.1.102] un tad mēs skriesim klients.py A sistēmā [192.168. lpp.1.6].

Kā palaist serveri.py 192. gadā.168. lpp.1.102?

Šeit ir komanda palaist serveri.py

$ python3 serveris.py 192.168. lpp.1.102 4444

Šeit ir ekrānuzņēmums

Šeit ir divi pitona programmas argumenti. 1sv arguments ir paša servera IP adrese, šeit tā 192.168. lpp.1.102. un 2. lppnd arguments ir ports, kuru serveri klausīsies, šeit mēs izvēlējāmies 4444.

Kā palaist klientu.py 192. gadā.168. lpp.1.6?

Šeit ir komanda palaist klientu.py

$ python3 klients.py 192.168. lpp.1.102 4444

Šeit ir ekrānuzņēmums

Šeit ir divi pitona programmas argumenti. 1sv arguments ir servera IP adrese, šeit tā 192.168. lpp.1.102. un 2. lppnd arguments ir ports, kurā darbojas serveris. Mūsu piemēram tas ir 4444.

Nosūtiet vai saņemiet tekstu:

Kā redzat, mēs esam gatavi sazināties starp divām sistēmām. Bet mums vispirms jāsāk no klienta. Ierakstīsim kaut ko klientā un redzēsim, vai tas sasniedz serveri.

Nosūtīt datus no klienta: “Es esmu no klienta”

Ekrānuzņēmuma veidlapas klients:

Tagad šim klienta ziņojumam vajadzētu nonākt serverī. Šeit ir servera ekrānuzņēmums.

Tagad mēs varam redzēt servera pusē arī mums ir iespēja kaut ko nosūtīt klientam. Izmēģināsim to.

Nosūtīt datus no klienta: “Es esmu no servera”

Servera ekrānuzņēmums:

Un šeit ir ekrānuzņēmums klienta pusē.

Tagad tas turpināsies bezgalīgi reizes, līdz mēs pārtrauksim pitonu programmu, izmantojot Ctrl + c.

Pārbaudiet UDP paketi Wireshark:

Tagad mēs esam veikuši zināmu saziņu, bet kā mēs uzzinām, ka UDP tika izmantots, lai nosūtītu vai saņemtu šīs paketes. Tātad, mēs varam pārbaudīt uztveršanu Wireshark.

Apskatīsim paketi, kad klients [192.168. lpp.1.6] nosūtīja datus [“Es esmu no klienta”] uz serveri [192.168. lpp.1.6].

Koda skaidrojums:

Pamata pitona koda skaidrojumu skatiet atsauces sadaļā “Python Socket File Transfer Send”.

Mēs izskaidrosim tikai klienta un servera python faila svarīgos līniju kodus. Klienta un servera kodā ir noderīgi komentāri.

Klienta koda skaidrojums:

ja len (sys.argv) == 3:

Iepriekš norādītā rindiņa ir nepieciešama, lai pārbaudītu, vai lietotājs ir nokārtojis obligātos obligātos argumentus. Vai arī programma tiks iziet. Tāda pati pārbaude ir servera programmā.

s = kontaktligzda.kontaktligzda (kontaktligzda.AF_INET, kontaktligzda.SOCK_DGRAM, 0)

Iepriekš minētā līnija ir izveidot ligzdas serveri ar UDP [SOCK_DGRAM] protokols. Serveris ir tas pats kods.py.

kamēr patiess:

Lai palaistu programmu bezgalīgā ciklā, līdz lietotājs veic Ctrl + c. Serveris ir tas pats kods.py.

s.sendto (send_data.kodēt ('utf-8'), (ip, ports))

Lai nosūtītu datus par minēto ip un osta numuru.

dati, adrese = s.recvfrom (4096)

Lai saņemtu visus datus, kas nāk no servera. Serveris ir tas pats kods.py.

Servera koda skaidrojums:

s.sendto (send_data.kodēt ('utf-8', adrese)

Nosūtiet datus uz klienta adresi.

Secinājums:

Mēs varam nosūtīt vai saņemt UDP datus, izmantojot python programmu. Iekšēji tas izmanto servera klienta mehānismu.

Atsauces:

Lai saprastu TCP: https: // linuxhint.com / tcp_packet_capture_analysis /
Lai saprastu UDP: https: // linuxhint.com / udp_wireshark_analysis /
Sūtīt un saņemt UDP paketes, izmantojot Linux CLI:
https: // linuxhint.com / send_receive_udp_packets_linux_cli /
Python Socket failu pārsūtīšana:
https: // linuxhint.com / python_socket_file_transfer_send /

Instalējiet jaunāko OpenRA stratēģijas spēli Ubuntu Linux
OpenRA ir bezmaksas / bezmaksas reāllaika stratēģijas spēļu dzinējs, kas atjauno agrīnās Vestvudas spēles, piemēram, klasisko Command & Conquer: Red A...
Instalējiet jaunāko Dolphin emulatoru Gamecube un Wii operētājsistēmai Linux
Delfīnu emulators ļauj jums spēlēt izvēlētās Gamecube un Wii spēles Linux personālajos datoros (PC). Tā kā Dolphin Emulator ir brīvi pieejams un atvē...
Kā lietot GameConqueror Cheat Engine Linux
Rakstā ir sniegts ceļvedis par GameConqueror apkrāptu dzinēja izmantošanu Linux. Daudzi lietotāji, kas spēlē spēles operētājsistēmā Windows, bieži izm...