Эффективный IP-адрес библиотеки c / c ++ в Unix - PullRequest
2 голосов
/ 02 мая 2011

Есть ли хорошая библиотека высокого уровня, которую можно использовать для манипулирования IP-адресами?Мне нужно сделать что-то вроде:

  • По заданной строке выяснить, является ли она действительным адресом IPv4 / IPv6.
  • Имеют такие функции, как ntop и pton
  • и т. Д.

Я могу использовать низкий уровень inet_ntop () и т. Д. Но есть ли лучшая библиотека, которая обрабатывает их лучше и быстрее (c / c ++ / python)?

Ответы [ 5 ]

2 голосов
/ 02 мая 2011

Для C ++ стандартный высокоуровневый ответ будет boost.asio . В частности, чтобы преобразовать строку в IP-адрес, он имеет ip :: address :: from_string и для получения строкового представления IP-адреса он имеет to_string .

Проверьте другие конструкторы для объектов IP-адресов - использование необработанных байтов, вероятно, будет более эффективным, чем строки.

1 голос
/ 03 мая 2011

inet_ntop и inet_pton не поддерживают зоны IPv6, поэтому рекомендуемые API-интерфейсы просто getaddrinfo и getnameinfo, которые удобно не зависят от версии IP.

Передайте флаги, такие как NI_NUMERICHOST дляпринудительная проверка IP-адреса без разрешения DNS.

http://msdn.microsoft.com/en-us/library/ms738532(VS.85).aspx

пример:

char* input_str
struct addrinfo *result = NULL, hints;
ZeroMemory( &hints, sizeof(hints) );
hints.ai_flags = AI_NUMERICHOST;
hints.ai_family = AF_UNSPEC;
dwRetval = getaddrinfo( input_string, NULL, &hints, &result );
if ( dwRetval != 0 ) {
     /* failure */
}
1 голос
/ 02 мая 2011

Если вы пишете приложение для сокетов, очень маловероятно, что манипулирование адресами станет для вас самым важным фактором.Не тратьте время на это, если у вас есть проблемы с сетевым вводом-выводом.

0 голосов
/ 05 августа 2011

Библиотека Poco имеет очень хороший набор подпрограмм манипулирования именем хоста / IP-адресом и множество других действительно полезных вещей. Порт FreeBSD немного устарел, но мы могли бы ткнуть сопровождающего порта острой палкой и заставить его обновить его. Ой, подождите ...:)

0 голосов
/ 02 мая 2011

У меня есть умственные способности ipv4 / ipv6, которые проверяют регулярные выражения, которые довольно длинные и нетривиальные. Я могу поделиться, если хотите.

...