Я преобразую свою библиотеку сети 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
Как узнать, какие интерфейсы устройства действительно будут работать для многоадресной рассылки IPv6? ⇐ IOS
Программируем под IOS
1744369925
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
Подробнее здесь: [url]https://stackoverflow.com/questions/79534066/how-to-know-which-device-interfaces-will-actually-work-for-ipv6-multicast[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия