原文地址:https://www.yuque.com/docs/share/85a26263-484a-42f6-880b-2b511ae1bd20?#

根据ipv4掩码计算

#include <stdio.h>
#include <arpa/inet.h> #define uint8_t unsigned char
#define uint32_t unsigned int int main(int argc,char **argv)
{
// 1.1.0.0/16的网段
uint32_t ipv4 = 0x1010000;
uint8_t prefix = 16; uint32_t shift_bits = 32 - prefix;
uint32_t host_ipv4 = ipv4 >> shift_bits; //网络段 1.1.0.0是不变的
host_ipv4++; //先算出下一个网段 0x102
//1.1.0.0网段最后一个地址是0x1020000 -1
uint32_t end_ipv4 = (host_ipv4<<shift_bits)-1; // 101ffff
printf("start ip: %x end ip: %x\n",ipv4,end_ipv4);
end_ipv4 = htonl(end_ipv4); // ffff0101
char ip_str[20]={0};
inet_ntop(AF_INET, &end_ipv4, ip_str, INET_ADDRSTRLEN); // 1.1.255.255
printf("end ip: %s \n",ip_str); return 0;
}

运行结果

$ gcc -o ip_calculator ip_calculator.c
$ ./ip_calculator
start ip: 1010000 end ip: 101ffff
end ip: 1.1.255.255

根据ipv6掩码计算

#include <stdio.h>
#include <arpa/inet.h> #define uint8_t unsigned char
#define uint32_t unsigned int int main(int argc,char **argv)
{
uint8_t ipv6[16]={0};
char IPdotdec[46]="1:1:1:eeff::";
inet_pton(AF_INET6, IPdotdec, (void *)&ipv6);
printf("十六进制 : %s \n",IPdotdec); uint8_t prefix = 54;
uint32_t shift_bits = 128 - prefix;
uint32_t total_shift_byte,remain_shift_bits,j;
uint8_t host_ipv6 = 0, host2_ipv6 = 0,host_max = 0xFF;
uint8_t host_ipv6_str = 0;
uint8_t reach_host_max = 0;
total_shift_byte = shift_bits/8; //6
remain_shift_bits = shift_bits%8; //6 for(j = 0; j < total_shift_byte+1; j++)
{
if(j < total_shift_byte){
//e.g. prefix_len = 48. addr[0] ~ [5] is fixed,addr[6]~[15] is variable init to 0
ipv6[15-j] = 0xff;
}
else if(remain_shift_bits)
{
//just parts of this byte shitf to 0
host_ipv6 = ipv6[15-j]>> remain_shift_bits;
host_ipv6++;
host_ipv6 = (host_ipv6<<remain_shift_bits)-1;
ipv6[15-j]= host_ipv6 ;
break; // find the fix addr[15-j],case 1:just 1 byte affected
}
printf("ipv6[%u]:0x%x %x remain_shitf %u\n",15-j,ipv6[15-j],host_ipv6,remain_shift_bits);
}
char ipv6_str1[46]={0};
inet_ntop(AF_INET6,ipv6, ipv6_str1,INET6_ADDRSTRLEN);
printf("ip %s, shift addr[%u]\n", ipv6_str1, 15-j); return 0;
}

运行结果:

$ ./ipv6_calculator
十六进制 : 1:1:1:eeff::
ipv6[15]:0xff 0 remain_shitf 2
ipv6[14]:0xff 0 remain_shitf 2
ipv6[13]:0xff 0 remain_shitf 2
ipv6[12]:0xff 0 remain_shitf 2
ipv6[11]:0xff 0 remain_shitf 2
ipv6[10]:0xff 0 remain_shitf 2
ipv6[9]:0xff 0 remain_shitf 2
ipv6[8]:0xff 0 remain_shitf 2
ipv6[7]:0xff 0 remain_shitf 2
ip 1:1:1:efff:ffff:ffff:ffff:ffff, shift addr[6]

C语言 根据掩码计算网段的起止ip的更多相关文章

  1. 掩码计算工具netmask

    掩码计算工具netmask   在网络扫描和防火墙配置中,经常需要计算IP地址范围和对应的掩码.为了简化这个过程,Kali Linux预置了一个掩码计算工具netmask.该工具不仅可以根据IP地址范 ...

  2. access-list/eigrp等 反掩码计算

    access-list/eigrp等 反掩码计算 原则:地址部分,相同的照写,不同的写"0"     反掩码部分,相同的写"0",不同的写"1&quo ...

  3. 使用nmap工具查询局域网某个网段正在使用的ip地址

    linux下nmap工具可扫描局域网正在使用的ip地址 查询局域网某网段正在使用的ip地址: nmap -sP .* 以上命令,将打印10.10.70.*/24网络所有正在使用的ip地址

  4. R语言的导数计算(转)

    转自:http://blog.fens.me/r-math-derivative/ 前言 高等数学是每个大学生都要学习的一门数学基础课,同时也可能是考完试后最容易忘记的一门知识.我在学习高数的时候绞尽 ...

  5. [C语言]数据类型与计算

    ------------------------------------------------------------------------------------------------- 实际 ...

  6. 计算机网络-将C网192.168.25.0划分四个子网,计算每个子网的有效IP地址范围和对应网络掩码

    首先计算子网掩码: 将256/4=64,主机块大小64 2的6次方=64 根据主机数量计算出掩码的最后一个字节为11000000,用十进制表示掩码为255.255.255.192 由于IP地址结尾全为 ...

  7. php计算网段内所有IP,分配子网段

    由于最近业务需要,写了个获取网段内所有IP的函数,以及分配可用子网段的函数 /** * 根据网段获取计算所有IP * @param string $segment 网段 '139.217.0.1/24 ...

  8. c语言经典算法---计算Fibonacci数列

    算法是一个程序和软件的灵魂,作为一名优秀的程序员,只有对一些基础的算法有着全面的掌握,才会在设计程序和编写代码的过程中显得得心应手.下面我就分享一个C语言中比较基础却极为重要的一个算法----计算Fi ...

  9. 开源的c语言人工神经网络计算库 FANN

    这年头机器学习非常的火,神经网络算是机器学习算法中的比较重要的一种.这段时间我也花了些功夫,学了点皮毛,顺便做点学习笔记. 介绍人工神经网络的基本理论的教科书很多.我正在看的是蒋宗礼教授写的<人 ...

  10. C语言中用于计算数组长度的函数 “strlen() ”。

    de>#include<stdio.h>#include<stdlib.h>#define MAX_LEN 255int my_strlen1(const char* s ...

随机推荐

  1. Django 出现 frame because it set X-Frame-Options to deny 错误

    一.背景 使用django3 进行开发时,由于项目前端页面使用iframe框架,浏览器错误提示信息如下 Refused to display 'http://127.0.0.1:8000/' in a ...

  2. POJ3260 The Fewest Coins(混合背包)

    支付对应的是多重背包问题,找零对应完全背包问题. 难点在于找上限T+maxv*maxv,可以用鸽笼原理证明,实在想不到就开一个尽量大的数组. 1 #include <map> 2 #inc ...

  3. 『现学现忘』Git基础 — 35、Git中删除文件

    目录 1.删除文件说明 2.删除文件操作 (1)仅删除暂存区的文件 (2)完全删除文件 3.本文用到的命令总结 1.删除文件说明 在Git工作目录中要删除某个文件,首先要清楚该文件所处的状态. 若要是 ...

  4. 齐博x1模型里边钩子的创建与使用

    在模型里边的钩子创建与使用方法跟在控制器里边的钩子创建及使用方法是有所区别的在模型里边创建的钩子,你可以理解为执行一个函数,是无法调用模型里边的类的方法及属性的.比如系统文件\application\ ...

  5. jenkins集成基于maven的javaweb项目,部署到docker容器中

    使用开源工具:Jenkins,码云gitee,docker,docker页面管理工具PortainerUI,github 各种工具的安装就不必介绍了,首先打开Jenkins,刚安装完Jenkins,可 ...

  6. 驱动开发:内核监视LoadImage映像回调

    在笔者上一篇文章<驱动开发:内核注册并监控对象回调>介绍了如何运用ObRegisterCallbacks注册进程与线程回调,并通过该回调实现了拦截指定进行运行的效果,本章LyShark将带 ...

  7. Docker之介绍与安装

    Docker 说明 本章,我们主要从Docker简介.Docker中几个核心概念和Docker安装这几个方面对Docker进行介绍! 1. Docker 简介 1.1. 什么是 Docker Dock ...

  8. Arctic 基于 Hive 的流批一体实践

    背景 随着大数据业务的发展,基于 Hive 的数仓体系逐渐难以满足日益增长的业务需求,一方面已有很大体量的用户,但是在实时性,功能性上严重缺失:另一方面 Hudi,Iceberg 这类系统在事务性,快 ...

  9. PyCharm配置远程Docker环境

    1. docker 配置 使用-p参数暴露一个端口用于ssh连接. docker run -itd --name wangchao_paddle --gpus all -p 8899:8888 -p ...

  10. Oracle收集统计信息的一些思考

    一.问题 Oracle在收集统计信息时默认的采样比例是DBMS_STATS.AUTO_SAMPLE_SIZE,那么AUTO_SAMPLE_SIZE的值具体是多少? 假设采样比例为10%,那么在计算单个 ...