Ubuntu передает многоадресные пакеты TTL 0

IP-пакеты с TTL 0 не должны покидать хост.

Но когда я запускаю приложение, которое многоадресно передает UDP-пакеты с TTL 0, я вижу, что пакеты с TTL 0 покидают хост на несколько секунд и возвращаются к нормальному поведению с TTL 0. Это, скорее всего, происходит после перезагрузки и первого запуска приложения.

Я подтвердил пакеты с TTL 0 покидают хост с tcpdump:

05:31:39.048304 IP (tos 0x0, id 14487, offset 0, flags [DF], proto UDP (17), length 1344)
    192.168.1.200.46968 > 239.0.0.1.1234: UDP, length 1316
05:31:39.049594 IP (tos 0x0, id 14488, offset 0, flags [DF], proto UDP (17), length 1344)
    192.168.1.200.46968 > 239.0.0.1.1234: UDP, length 1316
05:31:39.051601 IP (tos 0x0, id 14489, offset 0, flags [DF], proto UDP (17), length 1344)
    192.168.1.200.46968 > 239.0.0.1.1234: UDP, length 1316
05:31:39.053584 IP (tos 0x0, id 14490, offset 0, flags [DF], proto UDP (17), length 1344)
    192.168.1.200.46968 > 239.0.0.1.1234: UDP, length 1316

Как мы видим, ttl не отображается, что означает TTL 0, как подтверждено на странице руководства tcpdump: https://www.tcpdump.org /manpages/tcpdump.1.html (поиск ttl , здесь четко указано: ttl - время жизни; если оно равно нулю, не сообщается .

Не работают правила iptables .

uname -a : Linux mydevice 4.15.0-101-generic # 102-Ubuntu SMP Пн, 11 мая, 10: 07:26 UTC 2020 x86_64 x86_64 x86_64 GNU / Linux

lsb_release -a :

No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.4 LTS
Release:        18.04
Codename:       bionic

В чем может быть причина такого поведения и как я могу решить эту проблему?

2
задан 23 May 2020 в 09:17
1 ответ

Решение состоит в том, чтобы присоединиться к группе многоадресной рассылки с помощью

setsockopt(sockFd, IPPROTO_IP, IP_ADD_MEMBERSHIP, reinterpret_cast(&mcastJoinReq), sizeof(ip_mreq))

перед многоадресной рассылкой с помощью отправить().

Я всегда предполагал, что мне не нужно присоединяться к многоадресной рассылке, когда мне нужно только отправлять многоадресную рассылку, то есть я никогда не буду вызывать recvfrom() для получения многоадресной рассылки. Но независимо от того, только отправка/только получение, мы должны присоединиться к мультикасту.

0
ответ дан 24 May 2020 в 06:25

Теги

Похожие вопросы