我正在使用 squid,需要进行一些自定义。我有一个需要采取一些措施的 IP 地址列表。不能使用 squid 的 acl 指令,因为最终操作需要由其他服务器执行。
我需要检查正在访问的 URL 是否是有效的 IP 地址。如果是,我需要对标题进行一些更改。
我尝试通过正则表达式来做,似乎不太好。
^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$
如果是 IPv6 地址,它也会失败。
是否有可以用来确定这一点的 C/C++ API?
请建议。
我正在使用 squid,需要进行一些自定义。我有一个需要采取一些措施的 IP 地址列表。不能使用 squid 的 acl 指令,因为最终操作需要由其他服务器执行。
我需要检查正在访问的 URL 是否是有效的 IP 地址。如果是,我需要对标题进行一些更改。
我尝试通过正则表达式来做,似乎不太好。
^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$
如果是 IPv6 地址,它也会失败。
是否有可以用来确定这一点的 C/C++ API?
请建议。
您可能需要 inet_pton - 在失败时返回 -1,并支持 IPv4 和未来的 IPv6 地址。如果您仍然需要编写自己的 IP 地址系统,请记住标准的 32 位十六进制数字是有效的 IP 地址,但不是点分十进制表示法。
此函数既验证地址,也允许您在相关的套接字调用中使用相同的地址。
(来自 Raymond Martineau 的帖子:How do you validate that a string is a valid IPv4 address in C++?)