【问题标题】:getaddrinfo ignores trailing data?getaddrinfo 忽略尾随数据?
【发布时间】:2018-07-31 18:09:12
【问题描述】:

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

目前我们正在使用 getaddrinfo。它收集了我能想到的所有错误,除了一种情况:一个有效的 IPv4 地址后跟一些垃圾。

示例:“127.0.0.1 abc” (用引号括起来的参数,所以 C 看到一个字符串。)。

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

或者我是否将可能不完整的验证拼凑在一起?

【问题讨论】:

    标签: c getaddrinfo


    【解决方案1】:

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

    尽管如此,您不一定需要将单独的验证拼凑在一起。考虑让你已经发现的那个更强大。例如,通过检查您是否可以将它返回的sockaddr 结构之一转换回节点标识符来跟进getaddrinfogetnameinfogetaddrinfo 的补充,它可以帮助节点名称大小写。 inet_ntop 可以帮助解决数字地址的情况(IPv4 和 IPv6,尽管在 IPv6 情况下还有其他复杂性)。这样的过程还可以帮助您在有多个 addrinfo 时选择使用哪个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-28
      • 1970-01-01
      • 1970-01-01
      • 2014-07-05
      • 2013-11-11
      相关资源
      最近更新 更多