用于linux的c ++ applcation将ipv4数据包转换为ipv6

时间:2013-05-15 19:16:40

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

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

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

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

如何接收和解析此应用程序中的所有数据包(指向路由器计算机IP的数据包除外)?是否有可能在'应用程序级别'或我应该触摸内核?如果是的话,我在哪里可以得到一些关于此的文件?

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

非常感谢任何提示

1 个答案:

答案 0 :(得分:1)

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

阅读NAT64,了解有关您正在寻找的NAT特定风格的更多信息。

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

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

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