В данном задании был разработан простейший udp мессенджер, поддерживающий работу режимах unicast, broadcast, multicast.
Обмен пакетами происходит запуском двух скриптов и установкой надлежащих параметров. Ниже представлены примеры работы для всех трех режимов.
Пример общения:
Максимальный размер дейтаграммы, которую можно отправить:
212992
Получено командой:
print("Datagram size: ", sock.getsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF))
В данном задании выполнена пересылка multicast-сообщений.
Замыкание multicast - трафика на себя командой:
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_LOOP, 1)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_LOOP, 0)
Изменение TTL производится путем изменения константы, затем TTL учитывается при инициализации опции мультикаста и добавлении в группу.
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, MULTICAST_TTL)
req = struct.pack("4sl", socket.inet_aton(UDP_IP_SENDER), socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, req)