当访问我在 www 上的网站之一并显示 $_SERVER['REMOTE_ADDR'] 时,有时显示 ipv4 地址,有时显示 ipv6。很公平。我知道这种联系将是其中之一,而不是两者兼而有之。但是 - 我想获得这两个地址。像whatsmyipaddress.com 这样的网站可以同时显示这两者。有谁知道他们是如何实现这一目标的?非常感谢。
我在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 地址输出:
这不会将您的 IPv6 地址与 IPv4 地址关联起来。如果您想在用户的 IP 地址发生变化时跟踪用户,您需要使用 cookie 之类的东西。这里与处理 IPv4 地址更改为不同 IPv4 地址的用户的方式在概念上没有什么不同,除了如果您一直这样做的话,您可能必须放弃将 cookie 与 IP 地址绑定的做法。
| 归档时间: |
|
| 查看次数: |
3858 次 |
| 最近记录: |