LINUX.ORG.RU

Сокеты. Определить адрес IP сервера при подключении клиента.

 


1

1

Суть : Есть программа-сервер слушающие по TCP/IP все интерфейсы(их достаточно много, в том числе несколько интерфейсов от провайдеров.
Задача : отследить на сервере на какой адрес (IP) сервера подключается клиент.

server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = htonl(INADDR_ANY);

Вопрос : Как можно (желательно кроссплатформенно, но не критично, достаточно linux) определить на какой именно IP сервера пришел подключающийся клиент.
В «accept» есть информация похоже только о клиенте.

P.S. Альтернативный вариант логгирования через iptables, пока не интересует, надо средствами самого программы1-сервера.

★★★★★

Ответ на: комментарий от runtime

Описание очень похоже.
А то я уже пошел в сторону IP_PKTINFO & IPV6_RECVPKTINFO https://groups.google.com/g/comp.os.linux.development.system/c/7Eql8Xkef7o/m/....

    if (setsockopt(sock, IPPROTO_IP, IP_PKTINFO,
                   (char *) &on, sizeof(on)) < 0)
        msg_fatal("setsockopt(IP_PKTINFO): %m");
#ifdef HAS_IPV6
    if (res->ai_family == AF_INET6
        && setsockopt(sock, IPPROTO_IPV6, IPV6_RECVPKTINFO,
                   (char *) &on, sizeof(on)) < 0)
        msg_fatal("setsockopt(IPV6_RECVPKTINFO): %m");
#endif
 и т.д.................


А твой вариант гораздо проще.
Спасибо!

Atlant ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.