判断IP地址与掩码是否合法程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了判断IP地址与掩码是否合法程序相关的知识,希望对你有一定的参考价值。

#include <stdio.h>

#include <arpa/inet.h>

#include <errno.h>

#include <string.h>


int if_a_string_is_a_valid_ipv4_address(const char *str)

{

    struct in_addr addr;

    int ret;

    volatile int local_errno;


    errno = 0;

    ret = inet_pton(AF_INET, str, &addr);

    local_errno = errno;

    if (ret > 0);

    else if (ret < 0)

        printf("EAFNOSUPPORT: %s\n", strerror(local_errno));

    else

        printf("\"%s\" is not a valid IPv4 address\n", str);

    return ret;

}


bool IsSubnetMask_and_Is_ipv4_address(const char *ip_address, char *subnet)  

{  

    if ( if_a_string_is_a_valid_ipv4_address(ip_address) )  

    {  

        unsigned int b = 0, i, n[4];  

        sscanf(subnet, "%u.%u.%u.%u", &n[3], &n[2], &n[1], &n[0]); //subnet 为子网掩码  

        for(i = 0; i < 4; ++i) //将子网掩码存入32位无符号整型  

            b += n[i] << (i * 8);   

        b = ~b + 1;  

        if((b & (b - 1)) == 0)   //判断是否为2^n  

            return true;  

    }  

    return false;  

}




int main(int argc, char *argv[])

{

        if ( argc == 3 )

        {

                if ( IsSubnetMask_and_Is_ipv4_address(argv[1], argv[2]) )

                {

                        printf("ip yanma address is success.\n");

                }

                else

                {

printf("no\n");

                }

        }

        else

        {

                printf("INVALIUD ARGS.\n");

        }

        return 0;

}


以上是关于判断IP地址与掩码是否合法程序的主要内容,如果未能解决你的问题,请参考以下文章

如何判断两个IP地址是不是处于同一网段?

如何判断子网掩码是不是合法

如何用C语言判断ip地址是不是合法

第一条arp报文如何知道需要解析哪个ip地址

知道IP地址和子网掩码,怎么判断IP地址的网络号和主机号?

c++判断ip地址是不是合法