java ipv6转换成ipv4,如何映射IPv4的IPv6地址转换为IPv4(字符串格式)?「建议收藏」

IhaveastructsockaddrstructurecontaininganIPv4-mapped-IPv6addresslike::ffff:10.0.0.1.IwanttoobtainonlytheIPv4versionofitinastring(inthiscase,10.0.0.1)inCprogramminglangu…

大家好,又见面了,我是你们的朋友全栈君。

java ipv6转换成ipv4,如何映射IPv4的IPv6地址转换为IPv4(字符串格式)?「建议收藏」

I have a struct sockaddr structure containing an IPv4-mapped-IPv6 address like ::ffff:10.0.0.1. I want to obtain only the IPv4 version of it in a string (in this case, 10.0.0.1) in C programming language. How do I go about achieving it?

解决方案

As your structure contains an IPV6 address, I’ll assume your have a struct sockaddr * pointer (let’s name it addrPtr) pointing to a struct sockaddr_in6 structure.

You can get the address bytes easily.

const uint8_t *bytes = ((const struct sockaddr_in6 *)addrPtr)->sin6_addr.s6_addr;

Then add 12 to the pointer because the 12 first bytes are not interesting (10 0x00, then 2 0xff). Only the 4 last ones mater.

bytes += 12;

Now, we can use those four bytes to do whatever we want. For example, we might store them into a IPv4 struct in_addr address.

struct in_addr addr = { *(const in_addr_t *)bytes };

Then we can get a string using inet_ntop (declared in ).

char buffer[16]; // 16 characters at max: “xxx.xxx.xxx.xxx” + NULL terminator

const char *string = inet_ntop(AF_INET, &addr, buffer, sizeof(buffer));

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/128408.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Android listView长按删除

    Android listView长按删除AndroidlistView长按删除

  • 简单介绍一下Spring / java中Spring框架7大核心模块的作用,如何在面试中侃侃而谈?/ Spring体系常用项目一览

    简单介绍一下Spring / java中Spring框架7大核心模块的作用,如何在面试中侃侃而谈?/ Spring体系常用项目一览合法程序媛2017-10-2309:35优效学院,名师执教,学习更优效,IT在线教育领导者。三人行必有我师,人生是需要不断学习的,在这里我们相遇就是缘分,欢迎大家加群—-四六零五七零八二四—-让我们共同进步!希望各位可以看完这篇文章,也欢迎大家在下面留言讨论,天冷了,也动动手指转发收藏一下,谢谢大家!Spring是一个开源的控制反转(InversionofC

  • kafuka安装启动

    kafuka安装启动https://www.jianshu.com/p/ce203d4e2f41

  • docker 查看端口被占用进程[通俗易懂]

    docker 查看端口被占用进程[通俗易懂]以下找到相应进程或容器后,可以将对于进程或容器停止或删除现在希望启动一个dockercontainer,把container中的80端口映射到宿主机。[root@cmdb2~]#dockerrun-p80:80-it9d1c954badc7/bin/bash[root@cmdb2~]#dockerpsCONTAINERIDIM…

  • 树莓派 网络设置_树莓派4b教程

    树莓派 网络设置_树莓派4b教程概览你想做的第一件事一定是把你的树莓派连接到因特网上。在这节课里,你将会学到如何:使用网线连接到以太网在Raspbian和Occidentalis上使用无线网卡找到树莓派的IP地址使用有线网络最快的把树莓派接入到因特网的方法是使用一根以太网线把树莓派连接到你家的路由器上。当你把网线连入树莓派的时候,你就会看到网络LED灯开始闪烁了。对于大多数的家庭网络来说,你就不需要再做任何进一步的配置了。但为了…

  • hibernate二级缓存(二)二级缓存实现原理简单剖析

    hibernate二级缓存(二)二级缓存实现原理简单剖析hibernate二级缓存(一)二级缓存的实现原理在前面我们将过hibernate二级缓存类似于一个插件,将缓存的具体实现分离,缓存的具体实现是通过hibernate.cache.region.factory_class参数配置指定。1.hibernate二级缓存结构hibernate二级缓存涉及到如下几个重要的接口:RegionFactoryDomainDataRegionEnt…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号