如何将 IPv4 映射的 IPv6 地址转换为 IPv4(字符串格式)?

2024-01-01

我有一个struct sockaddr包含 IPv4 映射 IPv6 地址的结构,例如::ffff:10.0.0.1。我只想获取字符串中的 IPv4 版本(在本例中,10.0.0.1)用C语言编程。我该如何实现它?


由于您的结构包含 IPV6 地址,我假设您有一个struct sockaddr *指针(我们将其命名为addrPtr)指向一个struct sockaddr_in6结构。

您可以轻松获取地址字节。

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

然后将 12 添加到指针,因为前 12 个字节并不有趣(100x00,然后 20xff)。只有最后 4 个重要。

bytes += 12;

现在,我们可以使用这四个字节来做我们想做的事情。例如,我们可以将它们存储到 IPv4struct in_addr地址。

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

然后我们可以使用得到一个字符串inet_ntop(声明于<arpa/inet.h>).

char buffer[16]; // 16 characters at max: "xxx.xxx.xxx.xxx" + NULL terminator
const char *string = inet_ntop(AF_INET, &addr, buffer, sizeof(buffer));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 IPv4 映射的 IPv6 地址转换为 IPv4(字符串格式)? 的相关文章

随机推荐

  • 还要注意项目文件

    I use sbt以下列方式 我跑 test compile在 sbt 中工作 然后在 IDE 中工作 偶尔观察项目是否仍然可以编译 因为 IDE 的演示编译器往往有错误 当我git pull一些代码 可能会发生变化project 文件 所
  • 如何使用 RXJS 每 2 分钟进行一次 http 调用?

    我有一项服务每 2 分钟就会呼叫我的休息服务 在我的服务中我有以下功能 getNotifications token string const body xxxxxxxxx token return this http post rest
  • Ruby 数组创建,Array.new 与 []

    这两种说法有什么区别 我在我的 Rails 应用程序中使用它们 对我来说 它们看起来像做同样的事情 array a Array new array b 这两个语句在功能上是相同的 Array new但是可以接受参数和块 Array new
  • 如何利用 Google Firebase 数据库中的过滤器和子元素

    Working on an Android app that is using the new Firebase Database framework It has data objects that are modeled like th
  • 将 WebSocket 与 ASP.NET Web API 结合使用

    在 ASP NET Web API 应用程序中使用原始 Websocket 的首选方法是什么 我们想用binaryASP NET Web API 应用程序的几个接口上的 WebSocket 我很难确定应该如何完成此操作 因为 NET 的在线
  • CouchDB 视图出错

    我一直在使用 CouchDB 和 RelaxDB rub y 库 但创建一个视图然后尝试访问它会导致一个令人讨厌的非特定错误 我退后一步 因为我认为 RelaxDB 可能与我正在使用的 CouchDB 版本 0 8 1 不兼容 但即使我创建
  • 准备好的语句的最佳实践;何时做、何时不做

    我最近开始在 Web 应用程序中再次使用准备好的语句 并且我知道不鼓励对所有事务使用准备好的语句 我不知道什么时候最好使用准备好的语句 我读过何时使用和不使用它们 但没有一个示例真正说明了使用它们的最佳实践 我试图弄清楚哪些数据库调用我应该
  • github for windows 每天崩溃几次

    我最近开始工作Github通过他们的本机 Windows 应用程序 它非常好 但是它经常崩溃 可怕的是我在崩溃后丢失了所有最近的更改 所有本地文件将回滚到成功提交或同步的最后版本 我使用的是 64 位 Windows 8 机器 有任何想法吗
  • python 中的 ctypes 与 memset 崩溃

    我正在尝试从内存中删除密码字符串就像这里建议的那样 https stackoverflow com questions 982682 mark data as sensitive in python 983525 983525 我写了这个小
  • 是否存在 TcpClient.Close 或 Socket.Close(0) 可能阻止我的代码的情况?

    由于没有指定 Close 方法是线程安全的 我应该从锁中调用它 我如何确定它不会阻塞我的线程 我应该禁用 LingerState 还是可以启用它 顺便说一句 我需要同时调用 TcpClient Close 和 TcpClient Clien
  • Sinatra + Heroku + Datamapper 与 dm-sqlite-adapter 的部署问题

    由于某种原因 heroku 尝试要求 dm sqlite adapter 尽管它应该在这里使用 Postgres 请注意 这种情况发生在我打开任何 URL 时 而不是在 git 推送本身期间 我构建了一个默认的 Facebook 应用程序
  • 使用 to_sql 写入 datetime.date 会引发操作错误

    我正在使用最新的 pandas 14 1 并使用 to sql 方法写入 MS SQL Server 2008 v2 服务器 使用 SQLalchemy 作为引擎 以下带有日期时间对象的数据框按预期工作 test DataFrame df1
  • Mako 逃离金字塔内的问题

    我需要将 javascript 函数放入 mako 模板中 该函数的第一个参数是字符串 因此我在 mako 文件中写入 dict field name geom init map field name 但是当我看到我的 html 页面时 它
  • Contentful API 在条目更新时返回“版本不匹配”

    我尝试使用 Contentful 的内容管理 API 执行以下操作 获取条目 条目1 使用条目 1 中字段的数据查找另一个条目 条目 2 使用条目 2 中的数据更新条目 1 我的代码如下所示 client getSpace xxxxxxxx
  • 将大量的键映射到少量的值

    如果您有 1 000 000 个键 整数 映射到 10 000 个值 整数 最有效的实施方式 查找性能和内存使用 是什么 假设这些值是随机的 即不存在映射到单个值的一系列键 我能想到的最简单的方法是 HashMap 但想知道是否可以通过对与
  • Android:在小部件中更改 LinearLayout

    我有一个非常烦人的问题 在我的小部件中 我想通过代码更改背景 我在 Google 文档中注意到 我可以轻松更改 Imageview 的背景 remoteViews setImageViewResource R id my iv R draw
  • 如何在 Swift 中解开数组的元素? (即 Array 作为 Array

    假设我有一个字符串数组 我想将它映射到一个整数数组 我可以使用地图功能 var arrayOfStrings Array 0 a let numbersOptional arrayOfStrings map 0 toInt numbersO
  • java中以特定字母开头的文件列表

    我在相对目录 应用程序运行的目录 中有一些以 开头的文件 我需要在 java 中打开所有这些文件 告诉我一种实现它的方法 如果有帮助 我正在研究 netbeans 它们基本上是 ser 文件 所以我必须获取其中的对象 File dir ne
  • “AssertionError:断言失败:不安全符号不稳定”是什么意思?

    我正在使用带有 Java 8 的 Spark sql 2 4 1 版本 I have raw df列 eventTs 是长数据类型的时间戳 我正在尝试将其转换回时间戳 如下所示 Dataset
  • 如何将 IPv4 映射的 IPv6 地址转换为 IPv4(字符串格式)?

    我有一个struct sockaddr包含 IPv4 映射 IPv6 地址的结构 例如 ffff 10 0 0 1 我只想获取字符串中的 IPv4 版本 在本例中 10 0 0 1 用C语言编程 我该如何实现它 由于您的结构包含 IPV6