Я использую Squid и мне нужно сделать некоторые настройки.
У меня есть список IP-адресов, для которых необходимо предпринять определенные действия. Не могу использовать acl-директивы squid, так как последнее действие должно быть выполнено другим сервером.
Мне нужно проверить, является ли доступный URL-адрес действительным IP-адресом или нет. Если это так, мне нужно внести некоторые изменения в заголовок.
Я пытался сделать это с помощью регулярных выражений, не похоже, что работает хорошо.
^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$
Также он потерпит неудачу в случае адреса IPv6.
Существует ли C / C ++ API, с помощью которого это можно определить?
Просьба предложить.
Возможно, вам нужен inet_pton — который возвращает -1 при сбое и поддерживает как IPv4, так и будущие IPv6-адреса. Если вам все еще нужно написать свою собственную систему IP-адресов, помните, что стандартное 32-разрядное шестнадцатеричное число является действительным IP-адресом, но не в точечно-десятичной записи.
Эта функция как проверяет адрес, так и позволяет использовать тот же адрес в связанных вызовах сокетов.
(Из поста Рэймонда Мартино здесь: Как вы проверяете, что строка является действительным адресом IPv4 в C ++?)
Других решений пока нет …