Как узнать, какие интерфейсы устройства действительно будут работать для многоадресной рассылки IPv6?IOS

Программируем под IOS
Anonymous
Как узнать, какие интерфейсы устройства действительно будут работать для многоадресной рассылки IPv6?

Сообщение Anonymous »

Я преобразую свою библиотеку сети IPv4 для поддержки IPv6. Я использую его, чтобы инициировать связь UDP между устройствами на одной локальной сети. Один из устройств транслирует (IPv4) пакет «подключения» (как определено в моем протоколе), который читается устройством прослушивания. Все отлично работает в IPv4. Но мы также должны указать, какой интерфейс использовать в функции sendto () . Я использую функцию getifaddrs () , чтобы запросить список доступных интерфейсов. Я отфильтровал тех, кто не поддерживает IPv6 или многоадресную расстояния, и убедитесь, что они встают. Но это все еще оставляет меня со списком около 6 именованных интерфейсов с различными индексами на моем испытательном устройстве iPhone (en0, en2 , anpi0 , awdl0 , llw0 ). Я пытаюсь отправить пакеты, используя каждый интерфейс. Функция sendto () утверждает, что отправила пакеты для всех интерфейсов, но, используя Wireshark, я вижу, что только один из них - тот, который назван En0 - фактически отправляет пакеты вокруг моей локальной сети.
Итак, мой вопрос - как я знаю, какой интерфейс я должен использовать? И как я узнаю, что какой-либо пакет был на самом деле успешно многоадресной? Список интерфейсов: < /p>
ifaddrs* pFirstIf = nullptr;
if( getifaddrs( &pFirstIf ) == 0 )
{
for( ifaddrs* pIf = pFirstIf; pIf != nullptr; pIf = pIf->ifa_next )
{
const uint32 ifFlags = pIf->ifa_flags;

// Ignore loopback
if( ifFlags & IFF_LOOPBACK )
continue;

// Ensure up and supports multicast
if( ((ifFlags & IFF_UP) == 0) || ((ifFlags & IFF_MULTICAST) == 0) )
continue;

// Check an IP6 family interface
if( pIf->ifa_addr->sa_family != AF_INET6 )
continue;

// Get the interface index
const int ifIndex = if_nametoindex( pIf->ifa_name );

// The address scope id is usually the same as the interface index (or 0 if not)
const sockaddr_in6* pAddr6 = (sockaddr_in6*)pIf->ifa_addr;

// This appears to be a viable interface to use for multicast - or is it? How can we tell?
LOG( "Interface: " ifa_name

Подробнее здесь: https://stackoverflow.com/questions/795 ... -multicast

Вернуться в «IOS»