inet или inet6 в freebsd

Я пытаюсь получить информацию о сетевом интерфейсе из struct ifaddrs.

Как я могу определить, является ли интерфейс, на который я смотрю, inet (ipv4) или inet6 (ipv6)?


person hari    schedule 27.02.2012    source источник


Ответы (3)


Вы тестируете ifa_addr->sa_family — это будет AF_INET для адресов IPv4 и AF_INET6 для адресов IPv6.

Затем вы можете преобразовать элемент ifa_addr либо в struct sockaddr_in *, либо в struct sockaddr_in6 * в зависимости от ситуации.

person caf    schedule 27.02.2012
comment
только что узнал это! Большое спасибо. - person hari; 27.02.2012
comment
не могли бы вы знать, как я могу проверить, назначен ли адрес интерфейса статически или через dhcp? - person hari; 28.02.2012
comment
@hari: Нет, я предлагаю вам задать другой вопрос для этого. - person caf; 29.02.2012
comment
stackoverflow.com/questions/9489916 / - person hari; 29.02.2012

В FreeBSD, при условии, что у вас есть поддержка ядра для обоих, вопрос IPv4 или IPv6 — это просто вопрос конфигурации.

Ядро «GENERIC» во FreeBSD включает опцию «INET6», которая дает вам IPV6. Если вы не пересобирали ядро ​​и исключили эту опцию, то вы получите IPv6 на любом интерфейсе, просто настроив адрес IPv6.

person ghoti    schedule 27.02.2012

Вы можете попробовать открыть сокет IPV6 на интерфейсе, чтобы узнать, поддерживает ли он IPV6.

person nerozehl    schedule 27.02.2012