Удаленный IP-адрес изменяется, когда клиент привязан к ячейке

Я строю решение в php, которое требует, чтобы я точно знал ip запрашивающего. В большинстве случаев классический вызов

$ip = $_SERVER['REMOTE_HOST'];

работает просто отлично.

Тем не менее, я заметил, что в случае, когда клиент делает запрос по привязанному соединению, я получаю совершенно другой адрес, чем тот, который сообщает Google и мой брандмауэр.

Я могу проверить это на клиентской (привязанной) стороне путем поиска «мой ip» на Google, который дает мне IP-адрес, который совпадает с тем, что сообщает брандмауэр моего сервера, а также. Ни один из них не соответствует тому, что $_SERVER['REMOTE_HOST'] содержится на стороне сервера, хотя.

Мои вопросы тогда:

  • Почему эти адреса отличаются в целом?
  • Как мне получить IP-адрес, который видит мой брандмауэр и Google, в частности, с помощью php?

0

Решение

Это зависит от вашего оператора сотовой связи. Чаще всего ваш телефон получает IP-адрес из частного диапазона и получает NAT при установлении соединения «с интернетом» — как большинство домашних сетей.

В отличие от домашних сетей, сеть провайдера может иметь несколько подключений (шлюзов) к Интернету. Таким образом, каждое ваше соединение может проходить через другой шлюз. Таким образом, вы видите другой адрес на разных звонках.

В этих случаях (сети с несколькими восходящими линиями) правила маршрутизации могут быть довольно сложными. Так, например, назначение может играть роль — провайдер может вглядываться в несколько разных мест (сетевых узлов) и выбирать ближайший к месту назначения. Таким образом, вы можете иметь постоянные источники информации об одном пункте назначения, но разные о другом пункте назначения.

В любом случае, вы ничего не можете сделать с этими адресами, так как провайдер не разрешает никаких входящих подключений.

1

Другие решения

Они вполне могут использовать прокси-сервер, который вы не сможете контролировать. Базовый IP-адрес клиента не будет виден, если это так.

0

Да, оказывается, что это было сделано с помощью javascript «функции» (что я думаю вместо этого назвать уязвимостью) все время. Страшные вещи, так как они также показывают ваш внутренний IP-адрес. В любом случае это что-то под названием WebRTC, которое только начало привлекать к себе большое внимание на этой неделе, так как оно официально реализовано в Firefox и Chrome:

//get the IP addresses associated with an account
function getIPs(callback){
var ip_dups = {};

//compatibility for firefox and chrome
var RTCPeerConnection = window.RTCPeerConnection
|| window.mozRTCPeerConnection
|| window.webkitRTCPeerConnection;
var mediaConstraints = {
optional: [{RtpDataChannels: true}]
};

//firefox already has a default stun server in about:config
//    media.peerconnection.default_iceservers =
//    [{"url": "stun:stun.services.mozilla.com"}]
var servers = undefined;

//add same stun server for chrome
if(window.webkitRTCPeerConnection)
servers = {iceServers: [{urls: "stun:stun.services.mozilla.com"}]};

//construct a new RTCPeerConnection
var pc = new RTCPeerConnection(servers, mediaConstraints);

//listen for candidate events
pc.onicecandidate = function(ice){

//skip non-candidate events
if(ice.candidate){

//match just the IP address
var ip_regex = /([0-9]{1,3}(\.[0-9]{1,3}){3})/
var ip_addr = ip_regex.exec(ice.candidate.candidate)[1];

//remove duplicates
if(ip_dups[ip_addr] === undefined)
callback(ip_addr);

ip_dups[ip_addr] = true;
}
};

//create a bogus data channel
pc.createDataChannel("");

//create an offer sdp
pc.createOffer(function(result){

//trigger the stun server request
pc.setLocalDescription(result, function(){});

}, function(){});
}

//Test: Print the IP addresses into the console
getIPs(function(ip){console.log(ip);});

Источник: https://github.com/diafygi/webrtc-ips

Демо-версия: https://diafygi.github.io/webrtc-ips/

0
По вопросам рекламы [email protected]