根据Ip地址与掩码 得出 子网地址与广播地址

由于给予条件优先,没有直接给出子网地址与广播地址。但是又需要这两个参数,需要我们使用ip 地址与 子网掩码得出子网地址与广播地址。思路如下:

1. 子网地址, ip地址与 子网掩码分别换算成二进制, 两者相与,那么即得出 该子网地址。 如:

192.168.1.1   255.255.255.0   子网地址为192.168.1.0 , 换算成二进制数字, 算法如下。

01100000  01010100  00000001 00000001   (192.168.1.1)&

11111111  11111111  11111111 00000000   (255.255.255.0) =

1100000  1010100  00000001 00000000  即为192.168.1.0 。

下面是 该算法的C 代码。使用inet_aton 函数, 将字符串形式的ip地址、子网掩码,转换成网络字节序(unin32_t , 即整形),然后对两个数字进行相与, 之后再使用inet_ntoa 函数,将网络字节序形式的ip地址,转换回 点分十进制式的ip地址。

 

  

char *getSubnet(char ip[], char netmask[])
{
    struct in_addr addr;
    struct in_addr mask ;
    struct in_addr subnet ;
    if(inet_aton(ip, &addr) == 0)
    {
        perror("inet_aton error");
        return NULL;
    }
    if(inet_aton(netmask, &mask) == 0)
    {
        perror("inet_aton error");
        return NULL;
    }
    subnet.s_addr = addr.s_addr & mask.s_addr ;
    return inet_ntoa(subnet) ;
}

2.    对于子网中的广播地址, 计算的形式,与子网地址是一样的,就是需要对算法进行调整一下。 首先我们对子网掩码进行取反操作, 得到一个新值,然后使用该值与ip地址进行 “或”操作。即得到子网中的广播地址。

再拿192.168.1.1 与 255.255.255.0 做例子,

1111111  1111111  11111111 00000000  ~ = 00000000  00000000  00000000  11111111

00000000  00000000  00000000  11111111  |

01100000  01010100  00000001 00000001   =

01100000  01010100  00000001 11111111   == 192.168.1.255

代码如下:

   

char *getBroadIp(char ip[], char netmask[])
{
    struct in_addr addr;
    struct in_addr mask ;
    struct in_addr broadIp ;
    if(inet_aton(ip, &addr) == 0)
    {
        perror("inet_aton error");
        return NULL;
    }
    if(inet_aton(netmask, &mask) == 0)
    {
        perror("inet_aton error");
        return NULL;
    }
    broadIp.s_addr = addr.s_addr | (~mask.s_addr) ;
    return inet_ntoa(broadIp) ;
}
时间: 2024-10-29 19:06:23

根据Ip地址与掩码 得出 子网地址与广播地址的相关文章

写一个简单的python脚本来返回ip地址的掩码,子网个数等

如果我们想快速得到一个IP地址段有多少个ip,快速得到IP地址段的子网掩码,或者快速得到一个IP地址的二进制,那么可以来学习一下.本文利用python的一个IP分析模块IPy实现,首先安装IPy模块 wget https://pypi.python.org/packages/88/28/79162bfc351a3f1ab44d663ab3f03fb495806fdb592170990a1568ffbf63/IPy-0.83.tar.gz tar -xf IPy-0.83.tar.gz cd IP

给你IP地址让你算出掩码(点分十进制),子网地址,广播地址。

给你IP地址让你算出掩码(点分十进制),子网地址,广播地址. 像要算出IP地址的掩码,子网地址,广播地址,先要记住几点.1:IP地址(A B C 三类)属于有类地址.A类地址掩码8位,B类地址16位,C类地址24位. 2:二进制 和十进制的转换记住(128,64,32,16,8,4,2,1). 3:要知道要知道A B C类地址的数位是多少.A类0-126/B类128-191/C类192-223.记住不要能错. 我们先从二进制的运算说起,举例:192的二进制是多少呢?其实就向我上面说的二进制 和十

路由器、交换机学习之IP地址、使用网络掩码划分子网

局域网子网划分 对于C类IP地址来说(192.168.1.X,其中前面的192.168.1为网络号,后面的X为主机号,这样的网络中可以有254台主机,其中.0为局域网地址,.255为广播地址)进行子网划分意味着把254个可用主机按照需求划分为多个局域网,每个局域网有若干个主机组成. 子网掩码 十进制 CIDR 00000000 0 /24 10000000 128 /25 11000000 192 /26 11100000 224 /27 11110000 240 /28 11111000 24

IP地址划分类型和子网划分

在实际的网络环境中,根据网络的规模不同,网络中主机的数目不同,把IP地址分为A,B,C 3类用于不同规模的网络中,而IP地址是32位的点分十进制表示,只有IP地址无法确定其属于哪一个网络,在IP地址的32位中,用前n位来标识网络,后32-n位标识网络中的主机,一般情况下是用前8,16或者24位来标识网络地址的,给定一个ip地址,则其网络地址为ip地址与1...10...0(n个1,32-n个0)作与运算的结果.1...10...0(n个1,32-n个0)称为这个网络的子网掩码(netmask).

IP地址根据子网掩码划分子网

首先我们要了解IP地址:IP地址都是由网络号+主机号组成,IP地址总共是32位二进制数表示,每8位为一节,总共4节,日常使用中每节用一个十进制表示(0-255),其中前面n位表示网络号,后面32-n位表示主机号,n则是由子网掩码来决定. 在子网掩码中用1和0来分别网络号位和主机号位,其中是1的表示是网络位,0表示主机位,前面说的IP中前面的N位表示网络号,后面的32-N位才是主机号,所以子网掩码总是前面一段全是1,后面一段全是0.我们的IP范围就是主机号范围.所有主机号中的最后一个主机号为广播地

26:IPMaskCheck识别有效的ip地址和掩码并分类统计

题目描述 请解析IP地址和对应的掩码,进行分类识别.要求按照A/B/C/D/E类地址归类,不合法的地址和掩码单独归类. 所有的IP地址划分为 A,B,C,D,E五类 A类地址1.0.0.0~126.255.255.255; B类地址128.0.0.0~191.255.255.255; C类地址192.0.0.0~223.255.255.255; D类地址224.0.0.0~239.255.255.255: E类地址240.0.0.0~255.255.255.255 私网IP范围是: 10.0.0

根据IP和Mask获得子网地址

unsigned int IPToUInt(const char *pIp) { int a,b,c,d; unsigned int addr=0; if( sscanf(pIp,"%d.%d.%d.%d",&a,&b,&c,&d)!=4 ) return 0; addr=a<<24; addr|=b<<16; addr|=c<<8; addr|=d; return addr; } char* pIp,char *pM

Python 输入IP地址及掩码告诉你该网段包含的全部地址(IPy模块练习)

IPy模块原本使用时需要输入正确的网络位和掩码,我利用处理报错的机制实现了输入任意IP地址和掩码均可正确输出结果的小程序. 1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # @Date : 2017-09-04 21:57:15 4 # @Author : EnderZhou ([email protected]) 5 # @Link : http://www.cnblogs.com/enderzhou/ 6 # @Version : $

识别有效的IP地址和掩码并进行分类统计

描述 请解析IP地址和对应的掩码,进行分类识别.要求按照A/B/C/D/E类地址归类,不合法的地址和掩码单独归类. 所有的IP地址划分为 A,B,C,D,E五类 A类地址1.0.0.0~126.255.255.255; B类地址128.0.0.0~191.255.255.255; C类地址192.0.0.0~223.255.255.255; D类地址224.0.0.0~239.255.255.255: E类地址240.0.0.0~255.255.255.255 私网IP范围是: 10.0.0.0