【问题标题】:c++ applcation for linux to convert ipv4 packet to ipv6 [closed]用于linux的c ++应用程序将ipv4数据包转换为ipv6 [关闭]
【发布时间】:2013-05-15 19:16:40
【问题描述】:

我正在为 linux 开发一个 c/c++ 应用程序,它将接收到的 ipv4 数据包转换为 ipv6,反之亦然(失去一些仅 ipv6 的功能)

第 1 步:如何从传入的数据包中接收所有必要的信息?我应该使用原始数据包库来读取所有 TCP/UDP 标志和有关数据包的信息吗? 有关于此的任何文件? (我已经在看beej.us指南了)

第2步:我希望将此程序用于Linux机器(即Ubuntu)作为路由器,将从ipv6机器接收到的所有数据包转发到网卡,转发到连接到路由器上ipv4卡的ipv4机器.

如何接收和解析此应用程序中的所有数据包(定向到路由器机器IP的数据包除外)?是否有可能在“应用程序级别”或者我应该触摸内核?如果是,我在哪里可以获得有关此的文档?

目标:在通过路由器连接的两台机器之间使用 http 或其他通用协议

非常感谢任何提示

【问题讨论】:

    标签: c++ linux sockets network-programming linux-kernel


    【解决方案1】:

    由于 IPv4 和 IPv6 之间的转换必然意味着更改数据包中的 IP 地址,因此根据定义需要 NAT。您的项目归结为实现 NAT 路由器。

    阅读 NAT64 以了解更多关于您正在寻找的特殊 NAT 风格的信息。

    在尝试在用户空间实现路由器的过程中,我认为tun 设备可能是发送和接收数据包的最佳设计选择。这实际上是 TAYGA 选择的方法(上面引用的 Wikipedia 页面上列出的第一个 NAT64 实现)。

    在用户空间实现路由器(任何类型,更不用说 NAT)是一个相当复杂和雄心勃勃的项目,所以我能给出的最好的两条建议是:

    • 不要自己实现。相反,请努力改进现有的开源实现之一。
    • 如果做不到这一点,请研究一种现有的开源实现以获得灵感。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-21
      • 2015-03-28
      • 2017-12-17
      • 2020-11-06
      • 2015-03-10
      • 1970-01-01
      • 2011-01-03
      • 1970-01-01
      相关资源
      最近更新 更多