Я пытаюсь получить IP-адрес отправителя многоадресного пакета, а также адрес / интерфейс назначения, на который был отправлен многоадресный пакет.
При получении многоадресного пакета через recvfrom(SOCKET s, char *buf, int len, int flags, sockaddr *from, int *fromlen)
возвращает IP отправителей через параметр from, однако информация об адресе, на который отправляется пакет, не предоставляется.
Чтобы преодолеть этот недостаток recvfrom()
, я попытался использовать WSARecvMsg()
, который предположительно предоставляет всю необходимую информацию. Все ответы на другие вопросы кажутся очень уверенными в том, что всю необходимую информацию можно получить, используя (по крайней мере, * nix) метод recvmsg.
При получении пакета с WSARecvMsg()
и проверке структуры IN_PKTINFO
он содержит следующее:
typedef struct in_pktinfo {
IN_ADDR ipi_addr;
ULONG ipi_ifindex;
} IN_PKTINFO, *PIN_PKTINFO
И из документации элемент ipi_addr
является адресом назначения, а ipi_ifindex
является интерфейсом, на котором он был получен.
Из вышесказанного кажется, что WSARecvMsg()
может предоставить только другую половину (т.е. адресата), но не информацию об отправителях.
Я что-то упустил? Или есть другой способ получить информацию, которую я хочу, желательно без использования необработанных сокетов?