getaddrinfo会忽略尾随数据吗?

时间:2018-07-31 18:09:13

标签: c getaddrinfo

方案:命令行参数需要验证并转换为套接字/ TCP地址。参数可以是IPv4地址,IPv6地址和主机名的任意组合。

当前,我们正在使用getaddrinfo。它会拾取我想到的所有错误,只有一种情况:有效的IPv4地址,后跟一些垃圾。

例如:“ 127.0.0.1 abc” (参数用引号引起来,因此C看到一个字符串。)

有关如何解决此问题的任何建议? getaddrinfo()是否有替代方法可以更一致地检测错误?在getaddrinfo之前应该调用一些标准的验证例程吗?

还是我把可能不完整的验证混在一起?

1 个答案:

答案 0 :(得分:1)

getaddrinfo可能是用于您的目的的最佳功能,但是据我所知,它不能保证拒绝无效的节点标识符。因此,我不确定是在您遇到问题的情况下忽略尾随垃圾的功能还是错误。

尽管如此,您不一定需要拼凑单独的验证。考虑改用您已经发现的那种更坚固。例如,通过检查是否可以转换返回到节点标识符的getaddrinfo结构之一来跟踪sockaddrgetnameinfo是对getaddrinfo的补充,它可以帮助解决节点名称的问题。 inet_ntop可以帮助解决数字地址的问题(IPv4和IPv6都可以,尽管IPv6情况还有其他复杂性)。这样的过程还可以帮助您选择一个以上的addrinfo。