Можно получить и мои публичные адреса ipv4 и ipv6 (whatsmyipaddresss.com может это сделать) Как это сделать? - PullRequest
0 голосов
/ 07 февраля 2019

При доступе к одному из моих сайтов на www и отображении $ _SERVER ['REMOTE_ADDR'], иногда он показывает адрес ipv4, иногда ipv6.Справедливо.Я понимаю, что соединение будет одно или другое, а не оба.Но я хочу получить оба адреса.Такие сайты, как whatsmyipaddress.com, могут показывать оба.Кто-нибудь знает, как они этого добиваются?Большое спасибо.

1 Ответ

0 голосов
/ 07 февраля 2019

Я написал одну из этих служб «какой у вас IP-адрес», на https://myip.addr.space/, чтобы я мог точно сказать вам, как это делается.

Во-первых, любое отдельное соединение будет толькоперейти на IPv6 или IPv4, но не оба.Невозможно получить оба адреса одним запросом.

Итак, при первом запросе мы показываем адрес IPv6 или IPv4, на который он пришел.

Далее мы выполняем несколько запросов AJAX сjQuery, к поддоменам, которые имеют только IPv4-адрес или только IPv6-адрес, так что они работают только на 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

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>

В результате получается до трех выходных IP-адресов:

myip.addr.space

Чего не требуется, так это связать ваш IPv6-адрес с вашим IPv4-адресом.Вам нужно будет использовать что-то вроде куки, если вы хотите отслеживать пользователя при изменении его IP-адреса.Здесь нет ничего концептуально отличного от того, как вы будете обращаться с пользователем, чей IPv4-адрес изменился на другой IPv4-адрес, за исключением того, что, возможно, вам придется отказаться от практики привязки файлов cookie к IP-адресам, если вы это делали.

...