由于给予条件优先,没有直接给出子网地址与广播地址。但是又需要这两个参数,需要我们使用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) == )
{
perror("inet_aton error");
return NULL;
}
if(inet_aton(netmask, &mask) == )
{
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) == )
{
perror("inet_aton error");
return NULL;
}
if(inet_aton(netmask, &mask) == )
{
perror("inet_aton error");
return NULL;
}
broadIp.s_addr = addr.s_addr | (~mask.s_addr) ;
return inet_ntoa(broadIp) ;
}
 
 
 

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

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

    局域网子网划分 对于C类IP地址来说(192.168.1.X,其中前面的192.168.1为网络号,后面的X为主机号,这样的网络中可以有254台主机,其中.0为局域网地址,.255为广播地址)进行子网 ...

  2. 8.4 IP地址的划分及子网划分

    都是比较灵活的一些计算题.只要掌握了其中的规则,还是比较容易解题的.在了解子网的划分如何进行之前呢,一定要弄清楚一个概念:子网掩码.这是弄清楚如何进行子网划分的一个关键. IP地址是四段二进制码拼合而 ...

  3. IP、子网的详述 ——IP分类、网关地址,子网掩码、子网作用(转)

    IP地址    在Internet上连接的所有计算机,从大型机到微型计算机都是以独立的身份出现,我们称它为主机.为了实现各主机间的通信,每台主机都必须有一个唯一的网络地址.就好像每一个住宅都有唯一的门 ...

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

    题目描述 请解析IP地址和对应的掩码,进行分类识别.要求按照A/B/C/D/E类地址归类,不合法的地址和掩码单独归类. 所有的IP地址划分为 A,B,C,D,E五类 A类地址1.0.0.0~126.2 ...

  5. python 判断两个ip地址是否属于同一子网

    python 判断两个ip地址是否属于同一子网 """ 判断两个IP是否属于同一子网, 需要判断网络地址是否相同 网络地址:IP地址的二进制与子网掩码的二进制地址逻辑&q ...

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

    IPy模块原本使用时需要输入正确的网络位和掩码,我利用处理报错的机制实现了输入任意IP地址和掩码均可正确输出结果的小程序. #!/usr/bin/env python # -*- coding: ut ...

  7. 算法 识别有效ip地址和掩码并做统计

    题目描述 请解析IP地址和对应的掩码,进行分类识别.要求按照A/B/C/D/E类地址归类,不合法的地址和掩码单独归类. 所有的IP地址划分为 A,B,C,D,E五类 A类地址1.0.0.0~126.2 ...

  8. Huawei-R&S-网络工程师实验笔记20190608-VLAN划分基础(基于端口、MAC地址、子网地址、协议)

    >Huawei-R&S-网络工程师实验笔记20190608-VLAN划分基础(基于端口.MAC地址.子网地址.协议) >>实验开始,先上拓扑图参考: 一.基于端口划分VLAN ...

  9. 计算机网络之IPv4(IPv4分组、IPv4地址、NAT、子网划分与子网掩码、CIDR、ARP协议、DHCP、ICMP)

    文章转自:https://blog.csdn.net/weixin_43914604/article/details/105138313 学习课程:<2019王道考研计算机网络> 学习目的 ...

随机推荐

  1. 如何安装及使用PuTTY

    http://www.ytyzx.net/index.php?title=%E5%A6%82%E4%BD%95%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8 ...

  2. 在树莓派3B上安装node.js

    本文主讲如何在树莓派3B上安装node.js 环境描述1. 树莓派安装了`2016-11-25-raspbian-jessie-lite`(PS:在此版本的镜像中,默认禁用了ssh,在烧录好镜像之后, ...

  3. getattr(sys.modules[__name__], func_name)

    有时我们需要将一个文件的信息(类.函数及变量)保存到文件,我们不能直接保存函数对象,而是将其转化为fn.__name__,问题来了,当我们想通过读取文件的形式重新配置这些类.函数时,该如何把这些字符串 ...

  4. android 启动流程

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha adb shell 后  用 ps 命令 回车 可以看到 运行的进程. 如下结果: ct ...

  5. openssl-0.9.8k_WIN32(RSA密钥生成工具

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha openssl-0.9.8k_WIN32(RSA密钥生成工具

  6. [APIO / CTSC2007]数据备份 --- 贪心

    [APIO / CTSC 2007]数据备份 题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份. 然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同的办公 ...

  7. [BZOJ4553][TJOI2016&&HEOI2016]序列(CDQ分治)

    4553: [Tjoi2016&Heoi2016]序列 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1202  Solved: 554[Su ...

  8. BZOJ 2428 JZYZOJ1533 : [HAOI2006]均分数据 模拟退火 随机化

    http://www.lydsy.com/JudgeOnline/problem.php?id=2428 http://172.20.6.3/Problem_Show.asp?id=1533 http ...

  9. Linux的十个最危险的命令

    Linux命令行佷有用.很高效,也很有趣,但有时候也很危险,尤其是在你不确定你自己在正在做什么时候. 这篇文章将会向你介绍十条命令,但你最好不要尝试着去使用. 当然,以下命令通常都是在root权限下才 ...

  10. springmvc+hibernate4事务管理配置

    1.事务的特性 事务的四种特性: 原子性:体现一个事务的操作的不可分割,要么权执行,要么全不执行. 一致性:事务的执行结果必须从一种一致性状态变到另一种一致性状态.最典型的就是转账,两个账户A.B总金 ...