Как узнать, когда пакет UDP с локальной машины? - PullRequest
1 голос
/ 30 апреля 2020

Я получаю пакет UDP, используя recvmsg (2). Я хотел бы знать, если это с локальной машины или нет.

Я могу использовать IP_PKTINFO с recvmsg, чтобы получить интерфейс, на котором был получен пакет. Когда пакет был отправлен по адресу обратной связи, это интерфейс обратной связи, и это здорово. Когда пакет был отправлен на адрес какого-либо другого сетевого интерфейса, он возвращается в качестве этого интерфейса независимо от того, был ли пакет сгенерирован локально или нет, что не так уж и велико.

Я могу проверить, является ли адрес источника Пакет - это адрес локальной машины, но если фильтрация обратного пути отключена, он может иметь этот адрес и при этом быть с другой машины, и я не могу предположить, что это не так. Кроме того, это может привести к гонке между получением пакета и проверкой локальных адресов.

Система Linux. C или C ++. Процесс, делающий это, имеет CAP_NET_ADMIN. Как определить, получен ли пакет с локальной машины или нет?

...