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));

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

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

(0)
上一篇 2022年4月11日 下午8:40
下一篇 2022年4月11日 下午9:00


相关推荐

  • a类b类c类ip地址范围

    a类b类c类ip地址范围现在的 IP 网络使用 32 位地址 以点分十进制表示 如 172 16 0 0 地址格式为 IP 地址 网络地址 主机地址或 IP 地址 主机地址 子网地址 主机地址 IP 地址类型最初设计互联网络时 为了便于寻址以及层次化构造网络 每个 IP 地址包括两个标识码 ID 即网络 ID 和主机 ID 同一个物理网络上的所有主机都使用同一个网络 ID 网络上的一个主机 包括网络上工作站 服务器和路由器等 有一个

    2026年3月26日
    2
  • 【SSH学习】

    【SSH学习】什么是SSH?简单说,SSH是一种网络协议(安全外壳协议),用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。SSH之所以能够保证安全,原因在于它采用了公钥加密。整个过程是这样的:(1)远程主机收到用户的登录请求,把自己的公钥发给用户(2)用户使用这个公钥,将登录密码加密后,发送回来。(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。SSH基本用法1.SSH远程登陆

    2022年6月24日
    32
  • 阿里深夜开源80B编程模型!专攻智能体,周靖人、林俊旸最新成果发布

    阿里深夜开源80B编程模型!专攻智能体,周靖人、林俊旸最新成果发布

    2026年3月16日
    4
  • 业界唯一!科大讯飞发布首个基于全国产算力的深度推理大模型X1

    业界唯一!科大讯飞发布首个基于全国产算力的深度推理大模型X1

    2026年3月14日
    2
  • Pimple – 一个简单的 PHP 依赖注入容器

    Pimple – 一个简单的 PHP 依赖注入容器链接官网 WebSiteGitHu Pimple 这是 Pimple3 x 的文档 如果你正在使用 Pimple1 x 请查看 Pimple1 x 文档 阅读 Pimple1 x 代码也是学习更多关于如何创建简单的依赖注入容器的好方法 新版本的 Pimple 更加关注性能 Pimple 一个简单的 PHP

    2026年3月18日
    3
  • python3变量命名规则_python 变量命名规则

    python3变量命名规则_python 变量命名规则原博文2020-05-1410:53−python标识符命名规则:1,标识符只能包含大、小写字母、数字、下划线“_”,并且不能以数字开头2,标识符不能与python关键字相同,但可以包含3,标识符不能包含空格tips:a,python的标识符区分大小写,如变量number与变量Number表示不同的变量…相关推荐2019-09-2821:13−Pythonpython是一种跨平台的计…

    2022年6月22日
    61

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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