В C я привязываю сокет датаграммы (AF_INET, SOCK_DGRAM) к INADDR_ANY. Затем я периодически использую этот сокет для отправки и получения дейтаграмм и отслеживания потока пакетов с помощью pcap. Проблема в том, что я не могу сказать, является ли пакет входящим или исходящим с использованием pcap.
Передача / прием и мониторинг pcap выполняются в отдельных потоках, и по причинам синхронизации они не могут общаться. Я только хочу отслеживать входящие пакеты, а не те, которые отправляются, поэтому у кого-нибудь есть идеи относительно того, как я могу это сделать?
Я уже думал о тестировании IP-адреса назначения, но не могу найти способ получить свой локальный IP-адрес. машина, на которой он работает, не имеет статического IP-адреса, а тем более назначенного доменного имени, и кажется, что getsockname не работает с сокетами, привязанными к INADDR_ANY. Также попытался использовать ioctl (sockfd, SIOCGIFCONF и & buffer), который тоже не работал - устанавливает buffer.ifc_len = 0.