Поделиться через


структура IP_MSFILTER (ws2ipdef.h)

Структура ip_msfilter предоставляет параметры многоадресной фильтрации для адресов IPv4.

Синтаксис

typedef struct ip_msfilter {
  IN_ADDR             imsf_multiaddr;
  IN_ADDR             imsf_interface;
  MULTICAST_MODE_TYPE imsf_fmode;
  ULONG               imsf_numsrc;
  IN_ADDR             imsf_slist[1];
} IP_MSFILTER, *PIP_MSFILTER;

Члены

imsf_multiaddr

IPv4-адрес группы многоадресной рассылки.

imsf_interface

Локальный IPv4-адрес интерфейса или индекс интерфейса, по которому должна фильтроваться группа многоадресной рассылки. Это значение находится в сетевом порядке байтов. Если этот член указывает IPv4-адрес 0.0.0.0, используется интерфейс многоадресной рассылки IPv4 по умолчанию.

Использование индекса интерфейса 1 будет таким же, как и IP-адрес 0.0.0.1.

imsf_fmode

Используемый режим фильтрации многоадресной рассылки. Этот параметр может быть MCAST_INCLUDE (значение 0) для включения определенных источников многоадресной рассылки или MCAST_EXCLUDE (значение 1) для исключения трафика из указанных источников.

В Windows Server 2003 и Windows XP эти значения определяются в файле заголовка Ws2tcpip.h .

В Windows Vista и более поздних версиях эти значения определяются как значения перечисления в перечислении MULTICAST_MODE_TYPE , определенном в файле заголовка Ws2ipdef.h .

imsf_numsrc

Количество источников в элементе imsf_slist .

imsf_slist[1]

Массив in_addr структур, определяющих адреса источников многоадресной рассылки IPv4 для включения или исключения.

Комментарии

Структура ip_msfilter используется с IPv4-адресами. Структура ip_msfilter передается в качестве аргумента для SIO_GET_MULTICAST_FILTER и SIO_SET_MULTICAST_FILTER IOCTL.

Структура ip_msfilter и связанные структуры, используемые для многоадресного программирования IPv4, основаны на рекомендациях IETF, приведенных в разделах 4 и 8.1 RFC 3768. Для получения дополнительной информации см. http://www.ietf.org/rfc/rfc3678.txt.

В Windows Vista и более поздних версиях доступен набор параметров сокета для многоадресного программирования, поддерживающего адреса IPv6 и IPv4. Эти параметры сокета не зависят от IP-адресов и могут использоваться как для IPv6, так и для IPv4. Эти не зависящие от IP-адреса параметры используют GROUP_REQ и структуры GROUP_SOURCE_REQ , а также списки IOCTL SIOCSMSFILTER и SIOCGMSFILTER . Это предпочтительный вариант сокета и ioCTL для многоадресного программирования в Windows Vista и более поздних версиях.

Элемент imsf_interface может быть индексом интерфейса. Любой IPv4-адрес в блоке 0.x.x.x (первый октет 0), за исключением IPv4-адреса 0.0.0.0, рассматривается как индекс интерфейса. Индекс интерфейса — это 24-разрядное число. Блок адресов IPv4 0.0.0/8 не используется (этот диапазон зарезервирован). Функцию GetAdaptersAddresses можно использовать для получения сведений об индексе интерфейса, используемых для элемента imsf_interface .

Рекомендуется всегда указывать локальный IPv4-адрес или индекс интерфейса в элементе imsf_interface структуры ip_msfilter , а не использовать интерфейс по умолчанию. Это особенно важно на компьютерах с несколькими сетевыми интерфейсами и несколькими общедоступными IPv4-адресами.

Интерфейс по умолчанию, используемый для многоадресной рассылки по протоколу IPv4, определяется сетевым стеком в Windows. Приложение может определить интерфейс по умолчанию, используемый для многоадресной рассылки IPv4, с помощью функции GetIpForwardTable для получения таблицы маршрутизации IPv4. Сетевой интерфейс с наименьшим значением для метрики маршрутизации для IP-адреса назначения 224.0.0.0 является интерфейсом по умолчанию для многоадресной рассылки IPv4. Таблицу маршрутизации также можно отобразить из командной строки с помощью следующей команды:

печать маршрута

Параметр сокета IP_MULTICAST_IF можно использовать, чтобы задать интерфейс по умолчанию для отправки многоадресных пакетов IPv4. Этот параметр сокета не изменяет интерфейс по умолчанию, используемый для получения пакетов многоадресной рассылки IPv4.

Обычное многоадресное приложение IPv4 использует параметр сокета IP_ADD_MEMBERSHIP со структурой ip_mreq или параметр сокета IP_ADD_SOURCE_MEMBERSHIP со структурой ip_mreq_source для присоединения к группе многоадресной рассылки и прослушивания пакетов многоадресной рассылки в определенном интерфейсе. Параметр сокета IP_MULTICAST_IF будет использоваться для настройки интерфейса для отправки многоадресных пакетов IPv4 в группу многоадресной рассылки. Наиболее распространенным сценарием является многоадресное приложение, которое прослушивает и отправляет в одном интерфейсе группу многоадресной рассылки. Многоадресное приложение может использовать несколько сокетов с одним сокетом для прослушивания и одним или несколькими сокетами для отправки.

В пакете SDK для Windows, выпущенном для Windows Vista и более поздних версий, организация файлов заголовков изменилась, а структура ip_msfilter определена в файле заголовка Ws2ipdef.h , который автоматически включается в файл заголовка Ws2tcpip.h . Файлы заголовков Ws2ipdef.h никогда не следует использовать напрямую.

ПримечаниеПроизводные структуры IP_MSFILTER и PIP_MSFILTER определяются только в пакете Windows SDK, выпущенном вместе с Windows Vista и более поздних версий. Структуру ip_msfilter следует использовать в более ранних версиях windows SDK.
 

Требования

   
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Верхняя часть ws2ipdef.h (включая Ws2tcpip.h)

См. также раздел

Многоадресное программирование на основе окончательного состояния

GROUP_FILTER

GROUP_REQ

GROUP_SOURCE_REQ

GetAdaptersAddresses

GetIpForwardTable

Параметры сокета IPPROTO_IP

MULTICAST_MODE_TYPE

Многоадресное программирование

Параметры сокета

ip_mreq

ip_mreq_source