【问题标题】:inet_pton with all zero ip addressip地址全为零的inet_pton
【发布时间】:2013-06-06 20:24:32
【问题描述】:

我正在使用 inet_pton 来验证输入 IP 地址是否有效且不全为零(0.0.0.0 或 00.00.0.0)。

inet_pton(int af, const char *src, void *dst)

如果输入 ip (src) 地址为 0.0.0.0 inet_pton 将 dst 设置为值 0。如果 src 值为 00.00.00.00 ,则 dst 值不为 0,但我会为每条路径获得一个随机值。为什么 inet_pton 将 0.00.00.00 转换为值 0

#include <string.h>
#include <arpa/inet.h>

void main( int argc, char *argv[])
{
    int s;
    struct in_addr ipvalue;

    printf("converting %s to network address \n", argv[1]);
    s = inet_pton(AF_INET, argv[1], &ipvalue);

    if(s < 0)
            printf("inet_pton conversion error \n");

    printf("converted value = %x \n", ipvalue.s_addr);
}

样本运行

正确的值:

./a.out 10.1.2.3
converting 10.1.2.3 to network address
converted value = 302010a

./a.out 0.0.0.0
converting 0.0.0.0 to network address
converted value = 0

不正确的结果:

./a.out 00.00.00.0
converting 00.00.00.0 to network address
converted value = **a58396a0**

./a.out 00.0.0.0
converting 00.0.0.0 to network address
converted value = **919e2c30**

【问题讨论】:

    标签: c linux network-programming


    【解决方案1】:

    您没有检查 inet_pton() 是否返回 0。man page of inet_pton 声明:

    inet_pton() 成功返回 1(网络地址成功 转换)。如果 src 不包含字符串,则返回 0 表示指定地址族中的有效网络地址。 如果 af 不包含有效的地址族,则返回 -1 并 errno 设置为 EAFNOSUPPORT

    尝试类似:

    #include <stdio.h>
    #include <arpa/inet.h>
    
    
    int main( int argc, char *argv[])
    {
        int s;
        struct in_addr ipvalue;
    
        printf("converting %s to network address \n", argv[1]);
        s = inet_pton(AF_INET, argv[1], &ipvalue);
    
        switch(s) {
           case 1:
              printf("converted value = %x \n", ipvalue.s_addr);
              return 0;
           case 0:
              printf("invalid input: %s\n", argv[1]);
              return 1;
           default:
              printf("inet_pton conversion error \n");
              return 1;
        } 
    }
    

    【讨论】:

      【解决方案2】:

      如有疑问,请阅读文档。

      man inet_pton 在我的 Linux 机器上告诉我你的错误返回检查是错误的。成功时返回 1。其他任何事情都是错误。 0 表示无效转换。 -1 表示无效的地址族。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-24
        • 1970-01-01
        • 2013-02-01
        • 2023-04-04
        • 2016-07-25
        • 1970-01-01
        • 2014-09-16
        • 2023-03-24
        相关资源
        最近更新 更多