首页 文章

Winsock2 C:如何找到IPv4客户端将数据包发送到IPv6服务器的地址?

提问于
浏览
0

我一直在尝试使用IPv6来设置UDP服务器,该服务器接受来自IPv4和IPv6客户端的数据包 . 我正在使用Windows中的Codeblocks在C中使用winsock2进行编程 . 我已成功接收并从朋友那里退回IPv6的数据包 . 当我发送到本地地址10.0.0.90(静态)和127.0.0.1(环回)时,我也可以通过IPv4接收和反弹来自我自己的数据包 . 显然,当不同网络上的朋友试图通过互联网发送到这些本地地址时,我的终端上没有收到任何数据包 . Where do I find an IPv4 address so that an IPv4-only client can successfully sendto() to my IPv6 server through the internet?

当我在127.0.0.1通过getaddrinfo()对自己执行ping操作时,生成的addrinfo结构包含空白通配符ipv4地址(0.0.0.0)并且没有ipv6地址 .

当我使用getaddrinfo()通过我的IPv6地址ping自己时,我只得到一个具有相同IPv6地址且没有IPv4结构的ipv6 addrinfo结构 .

当我使用NULL值为目标调用getaddrinfo()时,我得到两个addrinfo结构,它们都包含IPv4和IPv6位置的通配符值 .

this question开始,我已经知道要使用ipv4客户端连接到IPv6服务器,使用ipv4映射的ipv6地址 . 我的问题是我不确定我是否还有ipv4地址了 . 当我去www.whatismyipaddress.com时,我只得到一个ipv6公共地址 .

这些试验都没有给我提供ipv4地址,我可以给一个只有ipv4的客户端,现在我完全卡住了 . 我已经处理了绑定到通配符IP,并禁用了IPV6_V6ONLY . 一切都运作良好,但我不知道还有什么去寻找目的地地址 . 有人可以给我一个正确方向的暗示吗?谢谢!

1 回答

  • 1

    目标地址是服务器的IPv4地址 . 禁用V6ONLY后,您的IPv6套接字可以接收IPv4数据包,但您的服务器仍需要具有可访问的IPv4地址 . 没有IPv4地址只有IPv4的客户端无法联系到您 .

    IPv4映射的IPv6地址只是表示IPv6软件中的IPv4地址 . 但是你仍然需要一个IPv4地址 .

相关问题