C语言 根据掩码计算网段的起止ip
原文地址: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的更多相关文章
- 掩码计算工具netmask
掩码计算工具netmask 在网络扫描和防火墙配置中,经常需要计算IP地址范围和对应的掩码.为了简化这个过程,Kali Linux预置了一个掩码计算工具netmask.该工具不仅可以根据IP地址范 ...
- access-list/eigrp等 反掩码计算
access-list/eigrp等 反掩码计算 原则:地址部分,相同的照写,不同的写"0" 反掩码部分,相同的写"0",不同的写"1&quo ...
- 使用nmap工具查询局域网某个网段正在使用的ip地址
linux下nmap工具可扫描局域网正在使用的ip地址 查询局域网某网段正在使用的ip地址: nmap -sP .* 以上命令,将打印10.10.70.*/24网络所有正在使用的ip地址
- R语言的导数计算(转)
转自:http://blog.fens.me/r-math-derivative/ 前言 高等数学是每个大学生都要学习的一门数学基础课,同时也可能是考完试后最容易忘记的一门知识.我在学习高数的时候绞尽 ...
- [C语言]数据类型与计算
------------------------------------------------------------------------------------------------- 实际 ...
- 计算机网络-将C网192.168.25.0划分四个子网,计算每个子网的有效IP地址范围和对应网络掩码
首先计算子网掩码: 将256/4=64,主机块大小64 2的6次方=64 根据主机数量计算出掩码的最后一个字节为11000000,用十进制表示掩码为255.255.255.192 由于IP地址结尾全为 ...
- php计算网段内所有IP,分配子网段
由于最近业务需要,写了个获取网段内所有IP的函数,以及分配可用子网段的函数 /** * 根据网段获取计算所有IP * @param string $segment 网段 '139.217.0.1/24 ...
- c语言经典算法---计算Fibonacci数列
算法是一个程序和软件的灵魂,作为一名优秀的程序员,只有对一些基础的算法有着全面的掌握,才会在设计程序和编写代码的过程中显得得心应手.下面我就分享一个C语言中比较基础却极为重要的一个算法----计算Fi ...
- 开源的c语言人工神经网络计算库 FANN
这年头机器学习非常的火,神经网络算是机器学习算法中的比较重要的一种.这段时间我也花了些功夫,学了点皮毛,顺便做点学习笔记. 介绍人工神经网络的基本理论的教科书很多.我正在看的是蒋宗礼教授写的<人 ...
- C语言中用于计算数组长度的函数 “strlen() ”。
de>#include<stdio.h>#include<stdlib.h>#define MAX_LEN 255int my_strlen1(const char* s ...
随机推荐
- day03-MySQL基础知识02
MySQL基础知识02 4.CRUD 数据库CRUD语句:增(create).删(delete).改(update).查(Retrieve) Insert 语句 (添加数据) Update 语句(更新 ...
- Node.js(三)Lodash
npm init -y(初始化项目) npm i --save lodash(引入lodash) const _=require("lodash"); let stus=[ {id ...
- css 悬停图片改变图片的样式
<style> #div{ text-align: center; } .img{ width: 200px; clip-path: polygon(50% 0,100% 50%,50% ...
- SQL Server复制的阶梯
SQL Server复制的阶梯:第1级 - SQL Server复制简介 本翻译文章来自作者:Sebastian Meine, 2012年12月26日 该系列 本文是Stairway系列的一部分:SQ ...
- 6.RabbitMQ系列之direct直连交换器
我们通过fanout exchange(扇型交换机)实现生产者发送一个消息,这个消息同时被传送给所有队列.但是有时我们不希望所有的消息都被所有队列接收,我们希望可以指定类型为a的消息只能被队列A接收, ...
- 归纳学习(Inductive Learning),直推学习(Transductive Learning),困难负样本(Hard Negative)
归纳学习(Inductive Learning): 顾名思义,就是从已有训练数据中归纳出模式来,应用于新的测试数据和任务.我们常用的机器学习模式就是归纳学习. 直推学习(Transductive Le ...
- 前端学习笔记--HTML5
网页的优点(客户端为网页)(B/S)模式 开发成本低) 不需要安装 无需更新 跨平台(最重要)可以有效的减小开发成本 传统的为C/S模式,开发成本高 前端工程师负责写网页的源代码,而浏览器负责把网页渲 ...
- 华为开发者大会2022:HMS Core 3D建模服务再升级,万物皆可驱动
11月4日,HDC2022华为开发者大会在东莞松山湖举办.在本次大会的HMS Core创新图形能力分论坛中,HMS Core重点介绍了其在3D技术领域的创新应用方向,其中3D建模服务展示了创新的自动骨 ...
- Java函数式编程:三、流与函数式编程
本文是Java函数式编程的最后一篇,承接上文: Java函数式编程:一.函数式接口,lambda表达式和方法引用 Java函数式编程:二.高阶函数,闭包,函数组合以及柯里化 前面都是概念和铺垫,主要讲 ...
- Oracle数据泵导入dmp文件,报UDI-12154、ORA-12154错误解决办法
1. 数据泵导入dmp文件,报UDI-12154.ORA-12154 1.1 导入命令 impdp cwy_init/init@orcl directory=DATA_PUMP_DIR dumpfil ...