How to determine the chain of ip addresses of the client?

Tried HTTP headers like "FORWARDED" but does not work (HTTP_X_FORWARDED, HTTP_X_FORWARDED_FOR, HTTP_FORWARDED_FOR, HTTP_FORWARDED, etc.).

In this case, the final ip address of the client must be real.

  • the answer is "no way" ^ _ ^ - myxaxa

2 answers 2

If you still manage to determine the final user IP, you get something like 192.168 ....
You should never trust the visitor’s IP address information. Even if a proxy server is used, it can be anonymous. Even if the proxy transmits the real address of the client, it is not a fact that the client does not use the proxy chain.
It is also worth considering that from 1 address whole cities can go online, and, conversely, one client can use several IPs.
To record all client IP addresses, use print_r ($ _ SERVER) to see which set of information is known. But the value of this information is dubious.

    The only IP that you can somehow trust is in $ _SERVER ['REMOTE_ADDR'] - this is the IP from which the connection to the server originated, but this does not mean that this is the real IP of the user, since it can be behind one or more proxy. All other $ _SERVER [xFORWARDx], in which IP is recorded, can be forged and there may be "garbage" in them, which differs markedly in format from the IP address. Trust such data can not, but if necessary, you can store as extra. intelligence.

    Below is the JavaScript code to determine the internal IP-user (for example, 192.168.1.1) - I hope it will help to create the most "complete chain" add. data about the user. It works in the new version of Google Chrome (54.0.2840.87) and other browsers that are relevant at the time of writing the answer.

    <!doctype html> <html><head> <meta charset="utf-8"> <title>IP Address</title> </head><body> <!-- http://net.ipcalf.com/ Make the locals proud --> <div>Network IP is: <span id=list>-</span>.</div><br> <script> // NOTE: window.RTCPeerConnection is "not a constructor" in FF22/23 var RTCPeerConnection = /*window.RTCPeerConnection ||*/ window.webkitRTCPeerConnection || window.mozRTCPeerConnection; if (RTCPeerConnection) (function () { var rtc = new RTCPeerConnection({iceServers:[]}); if (1 || window.mozRTCPeerConnection) { // FF [and now Chrome!] needs a channel/stream to proceed rtc.createDataChannel('', {reliable:false}); }; rtc.onicecandidate = function (evt) { // convert the candidate to SDP so we can run it through our general parser // see https://twitter.com/lancestout/status/525796175425720320 for details if (evt.candidate) grepSDP("a="+evt.candidate.candidate); }; rtc.createOffer(function (offerDesc) { grepSDP(offerDesc.sdp); rtc.setLocalDescription(offerDesc); }, function (e) { console.warn("offer failed", e); }); var addrs = Object.create(null); addrs["0.0.0.0"] = false; function updateDisplay(newAddr) { if (newAddr in addrs) return; else addrs[newAddr] = true; var displayAddrs = Object.keys(addrs).filter(function (k) { return addrs[k]; }); document.getElementById('list').textContent = displayAddrs.join(" or perhaps ") || "n/a"; } function grepSDP(sdp) { var hosts = []; sdp.split('\r\n').forEach(function (line) { // cf http://tools.ietf.org/html/rfc4566#page-39 if (~line.indexOf("a=candidate")) { // http://tools.ietf.org/html/rfc4566#section-5.13 var parts = line.split(' '), // http://tools.ietf.org/html/rfc5245#section-15.1 addr = parts[4], type = parts[7]; if (type === 'host') updateDisplay(addr); } else if (~line.indexOf("c=")) { // http://tools.ietf.org/html/rfc4566#section-5.7 var parts = line.split(' '), addr = parts[2]; updateDisplay(addr); } }); } })(); else { document.getElementById('list').innerHTML = "<code>ifconfig | grep inet | grep -v inet6 | cut -d\" \" -f2 | tail -n1</code>"; document.getElementById('list').nextSibling.textContent = "In Chrome and Firefox your IP should display automatically, by the power of WebRTCskull."; } </script> </body></html>