Python

Надсилання та отримання пакетів UDP через Python

Надсилання та отримання пакетів UDP через Python
Ми вже знаємо про два основних протоколи транспортного рівня, такі як TCP та UDP. Для отримання додаткової інформації про TCP та UDP ви можете ознайомитися з довідковим розділом.  У цій статті ми дізнаємося, як надсилати та отримувати UDP-пакети за допомогою програми python.

Очікування:

Ось кілька ключових моментів, про які можна дізнатися з цієї статті

  1. Надсилання тексту за допомогою програми python, яка використовує протокол UDP.
  2. Отримання тексту за допомогою програми python, яка використовує протокол UDP.
  3. Перевірте пакет UDP у Wireshark.
  4. Дізнайтеся про код python для надсилання та отримання UDP-пакетів.

Загальна схема налаштування:

Системи A і B повинні мати можливість пінгувати один одного.

Припущення або обмеження:

  1. В обох системах має бути Linux з Ubuntu. Код може працювати або не працювати в інших операційних системах, таких як Windows10, MAC тощо.
  2. Обидві системи повинні мати версію python 3. Цей код може працювати, а може і не працювати на python 2.7 версія.

Примітка: Ви можете перевірити посилання на тестування надсилання та отримання пакетів UDP через Linux CLI, перш ніж виконувати те саме завдання для файлів python.

Файли Python:

Є два файли python сервер.py і клієнт.py. файл сервера та файл клієнта повинні бути присутніми в системі сервера та системі клієнта відповідно.

Сервер.py

імпорт сокет
імпортувати sys
якщо len (sys.argv) == 3:
# Отримайте "IP-адресу сервера", а також "номер порту" від
аргумент 1 та аргумент 2
ip = sys.argv [1]
port = int (sys.argv [2])
ще:
print ("Запустити як: сервер python3.py ")
вихід (1)
# Створіть сокет UDP
s = розетка.розетка (розетка.AF_INET, сокет.SOCK_DGRAM)
# Прив’яжіть сокет до порту
server_address = (ip, порт)
s.прив'язка (адреса_сервера)
print ("Для виходу з програми натисніть Ctrl + c !!")
Правда:
print ("####### Сервер прослуховує #######")
дані, адреса = s.відшкодування (4096)
print ("\ n \ n 2. Сервер отримав: ", дані.декодувати ('utf-8'), "\ n \ n")
send_data = input ("Введіть текст для надсилання =>")
s.sendto (send_data.encode ('utf-8'), адреса)
print ("\ n \ n 1. Сервер надіслано: ", send_data," \ n \ n ")

Клієнт.py

імпорт сокет
імпортувати sys
якщо len (sys.argv) == 3:
# Отримайте "IP-адресу сервера", а також "номер порту" з аргументу 1 та аргументу 2
ip = sys.argv [1]
port = int (sys.argv [2])
ще:
print ("Запустити як: клієнт python3.py ")
вихід (1)
# Створити сокет для сервера
s = розетка.розетка (розетка.AF_INET, сокет.SOCK_DGRAM, 0)
print ("Для виходу з програми натисніть Ctrl + c !!")
# Давайте надсилатимемо дані за протоколом UDP
Правда:
send_data = input ("Введіть текст для надсилання =>");
s.sendto (send_data.кодувати ('utf-8'), (ip, порт))
print ("\ n \ n 1. Клієнт відправлений: ", send_data," \ n \ n ")
дані, адреса = s.відшкодування (4096)
print ("\ n \ n 2. Клієнт отримав: ", дані.декодувати ('utf-8'), "\ n \ n")
# закрийте розетку
s.закрити ()

Надсилання / отримання пакету UDP:

Візьмемо приклад, як-от ми надішлемо UDP-пакет із системи A в систему B. Отже, у концепції сервер-клієнт ми повинні запускати сервер на стороні системи B, а клієнт на стороні системи A.

Також у нас є дійсні IP-адреси.

Система A IP: 192.168.1.6
IP-адреса системи B: 192.168.1.102

Зараз, на відміну від надсилання та отримання пакетів UDP через Linux CLI, ми будемо запускати сервер.py у системі, В [192.168.1.102], а потім ми будемо бігати клієнт.py в системі A [192.168.1.6].

Як запустити сервер.py в 192.168.1.102?

Ось команда для запуску сервера.py

$ python3 сервер.py 192.168.1.102 4444

Ось скріншот

Тут є два аргументи для програми python. 1вул аргумент - це IP-адреса самого сервера, тут його 192.168.1.102 та 2й аргументом є порт, який сервер буде слухати, тут ми вибрали 4444.

Як запустити клієнта.py в 192.168.1.6?

Ось команда для запуску клієнта.py

Клієнт $ python3.py 192.168.1.102 4444

Ось скріншот

Тут є два аргументи для програми python. 1вул аргумент - це IP-адреса сервера, тут його 192.168.1.102 та 2й аргумент - це порт, де працює сервер. Для нашого прикладу це 4444.

Надішліть або отримайте текст:

Тепер, як ви бачите, ми готові до спілкування між двома системами. Але нам слід починати спочатку з клієнта. Давайте наберемо щось у клієнті і подивимося, доходить воно до сервера чи ні.

Надіслати дані від клієнта: “Я від Клієнта”

Клієнт форми знімка екрана:

Тепер це повідомлення клієнта має надійти на сервер. Ось знімок екрана сервера.

Тепер ми бачимо на стороні сервера, і у нас є можливість надіслати щось клієнту. Давайте спробуємо це.

Надіслати дані від клієнта: “Я з сервера”

Знімок екрана сервера:

І ось скріншот на стороні клієнта.

Тепер це триватиме нескінченно багато разів, поки ми не зупинимо програму python за допомогою Ctrl + c.

Перевірте пакет UDP у Wireshark:

Зараз ми налагодили певний зв’язок, але звідки ми дізнаємось, що UDP використовувався для надсилання або отримання цих пакетів. Отже, ми можемо перевірити зйомку в Wireshark.

Давайте побачимо пакет, коли клієнт [192.168.1.6] надіслав дані [“Я від клієнта”] на сервер [192.168.1.6].

Пояснення коду:

Пояснення щодо основного коду python наведено у розділі «Передача файлів передачі файлів сокета Python» у розділі довідки.

Ми пояснимо лише важливі коди рядків для файлу клієнта та сервера python. У коді клієнта та сервера є корисні коментарі.

Пояснення коду клієнта:

якщо len (sys.argv) == 3:

Вищевказаний рядок потрібно перевірити, чи передав користувач обов’язкові обов’язкові аргументи. Або програма вийде. Така сама перевірка є і в серверній програмі.

s = розетка.розетка (розетка.AF_INET, сокет.SOCK_DGRAM, 0)

Наведений вище рядок - створити сервер сокетів з UDP [SOCK_DGRAM] протоколу. Той самий код є на сервері.py.

Правда:

Запускати програму в нескінченному циклі, поки користувач не зробить Ctrl + c. Той самий код є на сервері.py.

s.sendto (send_data.кодувати ('utf-8'), (ip, порт))

Надіслати дані для згаданих ip і порт номер.

дані, адреса = s.відшкодування (4096)

Для отримання будь-яких даних, що надходять з сервера. Той самий код є на сервері.py.

Пояснення коду сервера:

s.sendto (send_data.encode ('utf-8'), адреса)

Надішліть дані на адресу клієнта.

Висновок:

Ми можемо надсилати або отримувати дані UDP за допомогою програми python. Внутрішньо він використовує клієнтський механізм сервера.

Список літератури:

Щоб зрозуміти TCP: https: // linuxhint.com / tcp_packet_capture_analysis /
Щоб зрозуміти UDP: https: // linuxhint.com / udp_wireshark_analysis /
Надсилання та отримання UDP-пакетів через Linux CLI:
https: // linuxhint.com / send_receive_udp_packets_linux_cli /
Надіслати передачу файлів із сокетом Python:
https: // linuxhint.com / python_socket_file_transfer_send /

OpenTTD vs Simutrans
Creating your own transport simulation can be fun, relaxing and extremely enticing. That's why you need to make sure that you try out as many games as...
OpenTTD Tutorial
OpenTTD is one of the most popular business simulation games out there. In this game, you need to create a wonderful transportation business. However,...
SuperTuxKart for Linux
SuperTuxKart is a great title designed to bring you the Mario Kart experience free of charge on your Linux system. It is pretty challenging and fun to...