ipv4-ipv6-mask
来源:互联网 发布:淘宝怎么买伟哥 编辑:程序博客网 时间:2024/06/07 03:00
ipv4是2的4次方,32位数据,42亿多个
ipv6是2的6次方,128位数据,很多很多个
ip地址的表示方式
字符串一般为点分十进制表示,又有ip地址,ip段,ip掩码方式
192.168.1.1
192.168.1.100-192.168.1.200
192.168.1.1/24
192.168.1.1 255.255.255.0
当然掩码方式也是ip段的一种表示,需要通过计算获得
掩码是为了表示主机号和网络号,可以找出是否在一个ip段,和广播地址
大小端问题
一般x86都是小端,网络字节序和有些别的cpu会有大端
大于8位也就是大于一个字节的数据,就有存放的问题
4个字节的数据,0X 01020304 ,就有高低字节之分而地址就有高低地址之分
如何存放呢?肯定是两种,高字节在高地址,高字节在低地址
小端就是高字节在低地址,内存中就是 04 03 02 01
大端就是高字节在高地址,内存中就是 01 02 03 04
存放顺序不同,那么解读就肯定不同,小端的数据到了大端,数据就变了
ip地址的转换和比较
点分字符串-网络字节序
inet_pton(AF_INET,ip,&(in));
inet_pton(AF_INET6,ip,&(in6));
网络字节序-点分字符串
inet_ntop(AF_INET,&(in),name,NAME_LEN);
inet_ntop(AF_INET6,&(in6),name,NAME_LEN);
大小端转换,网络-主机
ip.addr4 = ntohl(ip.addr4);
ip.addr128 = ntoh128(ip.addr128);
掩码-ip段范围
ipv4
static __u32 mask_int_calc(int mask_len)
{
__u32 mask = 0;
int loop = 0;
for (loop = 0; loop < mask_len; loop++){
mask |= 1 << (31 - loop);
}
return mask;
}
addr4 = addr4 & mask_int_calc(mask));
addr4 = (addr4 | (~(mask_int_calc(mask) & 0xffffffff)));
ipv6
static void mask_min(struct in6_addr *addr,int mask_len)
{
__u32 half = 0;
int loop = 0;
if(mask_len%8){
addr->s6_addr[mask_len/8] &= ((char)0xff) << (8-mask_len%8);
half = 1;
}
for (loop = mask_len/8+half; loop < 16; loop++){
addr->s6_addr[loop] = 0;
}
}
static void mask_max(struct in6_addr *addr, int mask_len)
{
__u32 half = 0;
int loop = 0;
if(mask_len%8){
addr->s6_addr[mask_len/8] |= ((char)0xff);
half = 1;
}
for (loop = mask_len/8+half; loop < 16; loop++){
addr->s6_addr[loop] = 0xff;
}
}
比较直接采用memcmp
阅读全文
0 0
- ipv4-ipv6-mask
- IPv4/IPv6
- ipv4&ipv6
- IPv4, IPv6,
- IPv4,IPv6
- IPV6、IPV4
- IPv4和IPv6
- 什么是IP/IPv4/IPv6
- IPV6和IPV4
- ipv4与ipv6包头
- IPV4 上搭建 IPV6
- ubuntu+apache+ipv4+ipv6
- ubuntu+apache+ipv4+ipv6
- IPv4和IPv6
- IPv6 中使用 IPv4
- IP,IPV4,IPV6
- ipv4与ipv6
- IPv4和ipv6
- 一份详细的mybatis-generator配置
- 最长公共子串 and 最长公共序列
- 基于ThinkPHP3.2.3后台登录界面学习记录(二)
- 规定区域二维码扫描,支持手电筒功能
- Android VR Player(全景视频播放器) [6]:视频列表的实现-本地视频
- ipv4-ipv6-mask
- Software design and testing
- C++入门学习笔记
- spring事件
- MyBatis一对一以及一对多关联表查询
- Windows查看电脑的IP地址
- 面试题4:替换空格
- 欢迎使用CSDN-markdown编辑器
- Hibernate CURD(增删改查)单例创建SessionFactory对象