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 сервер.ру а также клиент.ру. файл сервера и файл клиента должны присутствовать в системе сервера и системе клиента соответственно.

Сервер.ру

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

Клиент.ру

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

Отправка / получение пакета UDP:

Давайте возьмем пример, как мы отправим пакет UDP из системы A в систему B. Итак, в концепции сервер-клиент мы должны запустить сервер на стороне системы B и клиент на стороне системы A.

Также у нас есть действующие IP-адреса.

Система А IP: 192.168.1.6
Система B IP: 192.168.1.102

Теперь, в отличие от отправки и получения UDP-пакетов через Linux CLI, мы запустим сервер.ру в Системе, B [192.168.1.102], а затем запустим клиент.ру в Системе А [192.168.1.6].

Как запустить сервер.ру в 192.168.1.102?

Вот команда для запуска сервера.ру

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

Вот скриншот

Здесь есть два аргумента в пользу программы Python. 1ул аргумент - IP-адрес самого сервера, здесь его 192.168.1.102 и 2nd аргумент - порт, который сервер будет слушать, здесь мы выбрали 4444.

Как запустить клиент.ру в 192.168.1.6?

Вот команда для запуска клиента.ру

клиент $ python3.py 192.168.1.102 4444

Вот скриншот

Здесь есть два аргумента в пользу программы Python. 1ул аргумент - IP-адрес сервера, здесь его 192.168.1.102 и 2nd аргумент - порт, на котором работает сервер. В нашем примере это 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] протокол. Тот же код есть на сервере.ру.

в то время как True:

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

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

Отправить данные по указанным ip а также порт номер.

данные, адрес = s.recvfrom (4096)

Получать любые данные, поступающие с сервера. Тот же код есть на сервере.ру.

Объяснение кода сервера:

s.sendto (send_data.кодировать ('utf-8'), адрес)

Отправить данные на адрес клиента.

Заключение:

Мы можем отправлять или получать данные UDP с помощью программы Python. Внутри он использует механизм клиент-сервер.

Рекомендации:

Чтобы понять TCP: https: // linuxhint.ru / tcp_packet_capture_analysis /
Чтобы понять UDP: https: // linuxhint.ru / udp_wireshark_analysis /
Отправлять и получать UDP-пакеты через Linux CLI:
https: // linuxhint.com / send_receive_udp_packets_linux_cli /
Отправка файла сокета Python:
https: // linuxhint.ru / python_socket_file_transfer_send /

OpenTTD против Simutrans
Создание собственного транспортного симулятора может быть увлекательным, расслабляющим и чрезвычайно увлекательным занятием. Вот почему вам нужно попр...
Учебник OpenTTD
OpenTTD - одна из самых популярных бизнес-симуляторов. В этой игре вам нужно создать замечательный транспортный бизнес. Тем не менее, вы начнете в нач...
SuperTuxKart для Linux
SuperTuxKart - отличная игра, созданная для того, чтобы бесплатно познакомить вас с Mario Kart в вашей системе Linux. Играть в нее довольно сложно и в...