Как узнать, какие интерфейсы устройства действительно будут работать для многоадресной рассылки 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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