IPv4和IPv6地址的存取
存入IP地址时,使用inet_pton函数将输入的十进制字符串转出二进制。取出IP时再使用inet_ptop函数将“二进制整数”转成“点分十进制整数”显示。这两个函数都在宏定义#include <arpa/inet.h>中
C文件,test_ip.c
1 #include <stdio.h>
2 #include <arpa/inet.h>
3 #include "test_ip.h"
4
5 int main(int argc,char **argv)
6 {
7 ipmsg_t ip_msg;
8 ipaddr_t ip_addr;
9 char IPdotdec[20]="192.168.1.1";
10 inet_pton(AF_INET, IPdotdec, (void *)&ip_addr.ipv4);//字符串 ——> 网络字节流
11 printf("decimal : %s -> hexadecimal : 0x%x\n",IPdotdec,ip_addr.ipv4);
12
13 ip_addr.ipv4 = ntohl(ip_addr.ipv4);
14 printf("decimal : %s -> hexadecimal : 0x%x\n",IPdotdec,ip_addr.ipv4);
15
16 ip_addr.ipv4 = htonl(ip_addr.ipv4);
17 ip_msg.ip_addr.data = (uint8_t *)&(ip_addr.ipv4);
18 ip_msg.ip_addr.len = 4;
19 ip_msg.prefix_len = 32;
20
21 char ip_str[20]={0};
22 inet_ntop(AF_INET, ip_msg.ip_addr.data, ip_str, INET_ADDRSTRLEN);//网络字节流 ——> 字符串23 printf("%s\n",ip_str);
24 return 0;
25 }
test_ip.h文件用于放定义的结构体
1 #ifndef __TEST_IP_H__
2 #define __TEST_IP_H__
3
4 #include <stdio.h>
5
6 #define uint8_t unsigned char
7 #define uint32_t unsigned int
8 typedef struct _ipdata_s {
9 uint8_t len;
10 uint8_t *data;
11 } ipdata_t;
12
13 typedef struct _ipmsg_s
14 {
15 ipdata_t ip_addr;
16 uint32_t prefix_len;
17 }ipmsg_t;
18
19 typedef struct _ip_addr_s {
20 uint32_t ipv4; //ipv4地址有32位,uint32_t就够了
21 uint32_t ipv6[4]; //ipv6地址有128位,用数组存uint32_t*4
22 } ipaddr_t;
23
24 #endif
运行结果
$ gcc -o test_ip test_ip.c
$ ./test_ip
decimal : 192.168.1.1 -> hexadecimal : 0x101a8c0
decimal : 192.168.1.1 -> hexadecimal : 0xc0a80101
192.168.1.1
转换关系
| 十进制 | 192 | 168 | 1 | 1 |
| 二进制(32位) | 11000000 | 10101000 | 00000001 | 00000001 |
| 十六进制 | c0 | a8 | 1 | 1 |
IPv6地址的存取,test_ipv6.c
1 #include <stdio.h>
2 #include <arpa/inet.h>
3 #include "test_ip.h"
4
5 int main(int argc,char **argv)
6 {
7 ipmsg_t ip_msg;
8 ipaddr_t ip_addr;
9 char IPdotdec[46]="2017::192:168:11:1";
10 inet_pton(AF_INET6, IPdotdec, (void *)&ip_addr.ipv6);//字符串 ——> 网络字节流
11 printf("十六进制 : %s \n",IPdotdec);
12 printf("十进制 : %u %u %u %u\n", ip_addr.ipv6[0], ip_addr.ipv6[1],
13 ip_addr.ipv6[2], ip_addr.ipv6[3]);
14
15
16 ip_msg.ip_addr.data = (uint8_t *)&(ip_addr.ipv6[0]);
17 ip_msg.ip_addr.len = 16;
18 ip_msg.prefix_len = 128;
19 //ipv6的字符串:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx
20 char ipv6_str[46]={0}; //最长是32(“x”)+7(“:”)=39个字节。定义46的数组就足够了
21 inet_ntop(AF_INET6, ip_msg.ip_addr.data, ipv6_str, INET6_ADDRSTRLEN);//网络字节流—>字符串
22 printf("%s\n",ipv6_str);
23 return 0;
24 }
运行结果
$ gcc -o test_ipv6 test_ipv6.c
$ ./test_ipv6
十六进制 : 2017::192:168:11:1
十进制 : 5920 0 1744933377 16781568
2017::192:168:11:1
转换关系
| 十六进制 | 1720 | 0 | 0 | 0 | 6801 | 9201 | 0100 | 1100 |
| 二进制(128位) | 0001011100100000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 110100000000001 | 1001001000000001 | 0000000100000000 | 0001000100000000 |
| 十进制 | 5920 | 0 | 1744933377 | 16781568 | ||||
参考:
IPV6 转换二进制:https://www.easycalculation.com/other/ipv6-to-binary.php
IPv4和IPv6地址的存取的更多相关文章
- (转)协议森林04 地址耗尽危机 (IPv4与IPv6地址)
协议森林04 地址耗尽危机 (IPv4与IPv6地址) 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! IP地址是IP协议的重要组 ...
- IP地址(IPv4)/IPv6地址的正则表达式
原地址:http://pfeishao.blog.163.com/blog/static/18162337020112113130453/ Pv4地址正则表达式:^((25[0-5]|2[0-4]\d ...
- 校验IPv4和IPv6地址和URL地址
1.校验IPV4地址: function validateIp(obj) { var ip=$(obj).val(); var re=/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;// ...
- PHP中有关IPV4 和IPV6地址转换以及其它一些常见问题
这里主要介绍一下 IPV4 / IPV6 在 PHP / MySQL 中如何转换.以及中间容易碰到的一些问题. 首先介绍两个函数: ip2long:将 IPV4 的字符串互联网协议转换成长整型数字 i ...
- IPv4 和 IPv6地址
目前Internet上使用的基本都是IPv4地址,也就是说地址总共是32个比特位,也就是32位二进制数. 所以IPv4地址总的容量是 2的32次方 = 4294967296 比如 11010010 ...
- IPv6地址介绍
IPv6地址介绍 2008 年 04 月 10 日 1. 认识IPv6地址 IPv4地址是类似 A.B.C.D 的格式,它是32位,用\".\"分成四段,用10进制表示:而IPv6 ...
- 6.ipv6地址配置
1. "nmcli connection modify 网卡名 ipv4.addresses "ipv6地址" ipv6.method manual ". 2. ...
- IPv6下网络编程socket, TCP和UDP例子,以及兼容IPV4和IPV6的类
一.TCP socket ipv6与ipv4的区别 服务器端源代码如下: #include <stdio.h> #include <stdlib.h> #include < ...
- 【Atheros】pktgen的ipv6地址处理函数参考及ipv6基本知识
pktgen有很多函数可以作为很好的网络相关的工具函数,这里列出ipv6中1:0:0:0:0:0:0:1和1::1这两种地址形式相互转化的工具函数. 第一个函数,用于把一个1:0:0:0:0:0:0: ...
- 【转帖】2011-2018年中国IPv6地址数量及国际出口带宽数走势情况[图]
2011-2018年中国IPv6地址数量及国际出口带宽数走势情况[图] http://www.chyxx.com/industry/201910/791801.html 三亿多ipv4的地址. 接近9 ...
随机推荐
- [题解] Codeforces 1268 D Invertation in Tournament 结论,兰道定理
题目 本题需要用到的结论: 一.兰道定理 二.如果\(n\geq4\),那么\(n\)个点的强连通竞赛图存在\(n-1\)个点的强连通子图. 证明: 现在有一个n-1个点的竞赛图(不一定强连通,称其为 ...
- VideoPipe可视化视频结构化框架开源了!
完成多路视频并行接入.解码.多级推理.结构化数据分析.上报.编码推流等过程,插件式/pipe式编程风格,功能上类似英伟达的deepstream和华为的mxvision,但底层核心不依赖复杂难懂的gst ...
- 【Java8新特性】- Stream流
Java8新特性 - Stream流的应用 生命不息,写作不止 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! ...
- activeMq不能被主机访问的问题
环境说明 主机:mac 虚拟机:VirtualBox 虚拟系统:Centos6.5 问题:虚拟机启动了 activemq. 也关闭了防火墙,但是在主机访问web界面,http://192.168.1. ...
- 齐博x1 二次开发的灵魂fun函数
X1最强大之处,体现在灵活,扩展性强,在使用过程中,你会发现灵活之处非常之多. 现在跟大家讲一下,灵魂函数 fun() X1的核心函数文件是 application/common.php 随着模块频道 ...
- 0025:2011年NOIp普及组真题——瑞士轮题解
题目链接:https://www.luogu.com.cn/problem/P1309 如果是新手可能马上会想到sort排序,每比一次就排一次,但是这样的时间复杂度有点高,只有60分: 这是因为每次比 ...
- 软件架构(六)MVC架构历史
一.引子 一个系统可能由很多子系统组成.各子系统内部高度内聚,子系统之间低耦合.子系统关注自己的职责.实现: 职责分离,关注点分离.----MVC架构早期就是为了分离视图.模型而诞生的. 注:很多 ...
- Oracle用户创建及删除
偶尔会用到,记录.分享. 1. Oracle用户创建 #创建用户表空间create tablespace $username datafile '/u01/app/oracle/oradata/ufg ...
- Java安全之CC6
前言 之前三篇详细分析了CommonsCollections1利用链,两种方法,LazyMap以及TransformedMap,但是在Javaa 8u71以后,这个利⽤链不能再利⽤了,主要原因是 su ...
- Azure Devops Create Project TF400711问题分析解决
前几天,团队使用Azure Devops创建团队项目出了一个奇怪的错误: TF400797: 作业扩展具有一个未处理的错误: Microsoft.TeamFoundation.Framework.Se ...