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 ...
随机推荐
- 洛谷P3810 陌上花开 (cdq)
最近才学了cdq,所以用cdq写的代码(这道题也是cdq的模板题) 这道题是个三维偏序问题,先对第一维排序,然后去掉重复的,然后cdq分治即可. 为什么要去掉重复的呢?因为相同的元素互相之间都能贡献, ...
- flood_it 方法记录
心路历程 根据题面的描述,我们面临的问题无非是,每次将色块更新成什么颜色.又因为是从左上角开始更新,所以我的有了第一个想法. 将左上角的色块命名为"原色块". 对于每个色块,定义4 ...
- [Thread] 多线程顺序执行
Join 主线程join 启动线程t1,随后调用join,main线程需要等t1线程执行完毕后继续执行. public class MainJoin { static class MyThread i ...
- 齐博x1token字段,请务加在请求地址的头部header
如下图所示,你必须在请求的头部加上 token参数,主要原因有两个.第一点,这个是登录标志,因为接口访问用不了cookie,所以只能通过这个header请求标志判断用户是否已经登录.第二点,系统有时候 ...
- Selenium4.0+Python3系列(四) - 常见元素操作(含鼠标键盘事件)
一.写在前面 上篇文章介绍的是关于浏览器的常见操作,接下来,我们将继续分享关于元素的常见操作,建议收藏.转发! 二.元素的状态 在操作元素之前,我们需要了解元素的常见状态. 1.常见元素状态判断,傻傻 ...
- ES6 学习笔记(十二)代理器Proxy的简单使用
1.前言 以前在学习react时做了个仿手机端的QQ音乐项目.当时的数据是通过proxy代理的QQ音乐数据接口,直接写在package.json里面.Proxy 对象(Proxy)是 ES6的特性,只 ...
- day08-XML
XML 官方文档:https://www.w3school.com.cn/xml/index.asp 1.为什么需要xml? 需求1:两个程序间进行数据通信? 需求2:给一台服务器,做一个配置文件,当 ...
- ElasticSearch这些坑记得避开
目录 一.管理方式 二.结构维护 三.数据调度 1.同步方案 2.中断和恢复 四.刷新策略 五.深度分页 六.参考源码 Index用不好,麻烦事不会少: 一.管理方式 ElasticSearch作为最 ...
- netty系列之: 在netty中使用 tls 协议请求 DNS 服务器
目录 简介 支持DoT的DNS服务器 搭建支持DoT的netty客户端 TLS的客户端请求 总结 简介 在前面的文章中我们讲过了如何在netty中构造客户端分别使用tcp和udp协议向DNS服务器请求 ...
- 论文笔记 - PRISM: A Rich Class of Parameterized Submodular Information Measures for Guided Subset Selection
Motivation 与 Active Learning 类似,Target Learning 致力于 挑选外卖更"感兴趣"的数据,即人为为更重要的数据添加 bias.例如我们当前 ...