原文地址: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. HDU1114 Piggy-Bank (完全背包)

    完全背包模板,和01背包相比不用倒推,因为一种可以选多个. 这道题求最小,dp数组初始化为无穷即可. 1 #include<iostream> 2 #include<cstring& ...

  2. 洛谷P2341 [USACO03FALL / HAOI2006] 受欢迎的牛 G (tarjan缩点)

    在本题中很明显,给你一个有向图,要用tarjan缩点. 缩点后,一头牛要受到所有牛的欢迎,那么该点的出度要为0,这是容易证明的:如果该点还有出度,比如a连向b,那么a不受到b的欢迎.所以我们要找出度为 ...

  3. 【机器学习】利用 Python 进行数据分析的环境配置 Windows(Jupyter,Matplotlib,Pandas)

    环境配置 安装 python 博主使用的版本是 3.10.6 在 Windows 系统上使用 Virtualenv 搭建虚拟环境 安装 Virtualenv 打开 cmd 输入并执行 pip inst ...

  4. Sun 的 BASE64Encoder替代

    可以使用 org.apache.commons.codec.binary.Base64替代 Maven依赖如下 <dependency> <groupId>commons-co ...

  5. Python学习三天计划-1

    一.第一个Python程序 配置好环境变量后 打开CMD(命令提示符)程序,输入Python并回车 然后,在里面输入代码回车即可立即执行 Python解释器的作用是 将Python代码翻译成计算机认识 ...

  6. Cenots7 离线安装部署PostgreSQL

    1 PostgreSQL源码包下载并复制 1.1 PostgreSQL源码包下载: 访问PostgreSQL官网 选择所需版本进行下载,本次下载安装版本为v14.5 1.2 复制源码包至服务器 使用S ...

  7. NLP之TextRNN(预测下一个单词)

    TextRNN @ 目录 TextRNN 1.基本概念 1.1 RNN和CNN的区别 1.2 RNN的几种结构 1.3 多对多的RNN 1.4 RNN的多对多结构 1.5 RNN的多对一结构 1.6 ...

  8. 10.-ORM-基础字段及选项

    一.ORM-基础字段及选项 任何关于表结构的修改,务必在对应模型类上修改 例如 给 books_book表添加一个info字段 varchar(100) 1.在模型中添加对应的类属性 2.执行数据库迁 ...

  9. Linux文件属性与管理

    文件或目录属性主要包括: 索引节点,inode 文件类型 文件权限 硬链接个数 归属的用户和用户组 最新修改时间 查看命令 ls -lhi /opt 图解: Inode索引节点号,(人的身份证,家庭地 ...

  10. Druid SQL注入防御模块技术浅析

    官方参考: https://www.bookstack.cn/read/Druid/ffdd9118e6208531.md 前置知识 什么是Druid? Druid是一个高效的数据查询系统,主要解决的 ...