原文地址: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. vue中的v-if查找数组中最后一个,给他加上新的样式

    vue: var app=new Vue({ el:".xiaomi", data: { typeInfo: [{img:"image/type/phone_1.webp ...

  2. 洛谷P2602 [ZJOI2010] 数字计数 (数位DP)

    白嫖的一道省选题...... 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 usin ...

  3. 右击存放项目的文件夹出现 open with Visual Studio Code 的打开方式

    最终效果 步骤1: 找到 Visual Studio Code 的安装位置 (右击桌面Visual Studio Code 图标-->属性-->打开文件夹所在位置) 新建一个可以编辑的 c ...

  4. 去除router-link中的下划线

    文章目录 1.设置router-link的样式 2.效果展示 1.设置router-link的样式 text-decoration: none; 2.效果展示

  5. 齐博X1-新建一个空模板并在后台选择

    本节实际操作建立一个空模板,并且让后台识别,选择该风格 先在index_style中建立一个目录,命名mystyle并上传我们在mystyle目录中建立一个info.php文件,代码如下:上传后,后台 ...

  6. C# 6.0 添加和增强的功能【基础篇】

    C# 6.0 是在 visual studio 2015 中引入的.此版本更多关注了语法的改进,让代码更简洁且更具可读性,使编程更有效率,而不是和前几个版本一样增加主导性的功能. 一.静态导入 我们都 ...

  7. 一键部署haproxy脚本

    HAPROXY_VERSION=2.6.6 HAPROXY_FILE=haproxy-${HAPROXY_VERSION}.tar.gz #HAPROXY_FILE=haproxy-2.2.12.ta ...

  8. (线段树) P4588 数学计算

    小豆现在有一个数 x,初始值为 1.小豆有 QQ 次操作,操作有两种类型: 1 m:将 x变为 x × m,并输出 x mod M 2 pos:将 x 变为 x 除以第 pos次操作所乘的数(保证第  ...

  9. Python 学习思路 思维导图 Xmind

    如果需要,请在评论区留下邮箱,我看到后会一次发送.

  10. 嵌入式-C语言:通过结构体指针操作结构体内容

    #include<stdio.h> #include<string.h> struct Student { char name[32]; int age; int height ...