可以获得我的公共 ipv4 和 ipv6 地址(whatsmyipaddresss.com 可以做到)这是如何做到的?

Dav*_*ave 2 ipv4 ipv6

当访问我在 www 上的网站之一并显示 $_SERVER['REMOTE_ADDR'] 时,有时显示 ipv4 地址,有时显示 ipv6。很公平。我知道这种联系将是其中之一,而不是两者兼而有之。但是 - 我想获得这两个地址。像whatsmyipaddress.com 这样的网站可以同时显示这两者。有谁知道他们是如何实现这一目标的?非常感谢。

Mic*_*ton 8

我在https://myip.addr.space/上编写了其中一项“你的 IP 地址是什么”服务,这样我就可以准确地告诉你它是如何完成的。

首先,任何单个连接只能通过 IPv6 或 IPv4,而不能同时通过两者。不可能通过单个请求获得两个地址。

因此,在第一个请求中,我们会显示它传入的 IPv6 或 IPv4 地址。

接下来,我们使用 jQuery 对仅具有 IPv4 地址或仅具有 IPv6 地址的子域进行一些 AJAX 查询,以便它们分别仅在 IPv4 或 IPv6 上工作,从而保证返回 IPv4 或 IPv6 地址。

这是在 DNS 中完成的,如下所示:

$ host myip.addr.space
myip.addr.space is an alias for www.addr.space.
www.addr.space has address 144.217.146.101
www.addr.space has IPv6 address 2607:5300:203:118:1:0:3:8b50

$ host ipv4.myip.addr.space
ipv4.myip.addr.space has address 144.217.146.101

$ host ipv6.myip.addr.space
ipv6.myip.addr.space has IPv6 address 2607:5300:203:118:1:0:3:8b50
Run Code Online (Sandbox Code Playgroud)

jQuery 非常简单:

<script type="text/javascript">
<!--
$.get("https://ipv4.myip.addr.space/ajaxlookup")
.done(function(data) {
    $("div#ipv4-address").html(data);
})
.fail(function(data) {
    $("div#ipv4-address").html("<p>Couldn't determine an IPv4 address. You might not have IPv4 connectivity.</p>");
});
$.get("https://ipv6.myip.addr.space/ajaxlookup")
.done(function(data) {
    $("div#ipv6-address").html(data);
})
.fail(function(data) {
    $("div#ipv6-address").html("<p>Couldn't determine an IPv6 address. You might not have IPv6 connectivity.</p>");
});

</script>
Run Code Online (Sandbox Code Playgroud)

这会导致最多三个 IP 地址输出:

myip 地址空间

这不会将您的 IPv6 地址与 IPv4 地址关联起来。如果您想在用户的 IP 地址发生变化时跟踪用户,您需要使用 cookie 之类的东西。这里与处理 IPv4 地址更改为不同 IPv4 地址的用户的方式在概念上没有什么不同,除了如果您一直这样做的话,您可能必须放弃将 cookie 与 IP 地址绑定的做法。