Как сайт "Что такое мой IP" знает мой внутренний адрес локальной сети?

Я остаюсь в отеле прямо сейчас, и я хотел посмотреть, каким был мой внешний IP-адрес. Я посетил общий сайт, который помогает с этим, и он сообщил мой адрес как... (последние несколько цифр опущены для конфиденциальности)

Ваш IP-адрес: 69.165.XXX.XXX

Обнаружены локальные сетевые IP-адреса: 10.1.XXX.XXX

Возможный обнаруженный прокси: 1.1 localhost: 3128 (squid/2.7.STABLE9)

Сетевой IP действительно правильное значение. Это меня смущает, потому что я не думаю, что любой браузер будет делиться этой информацией. Я предполагаю, что заголовок запроса переписывается Squid. В любом случае, это немного назойливая проблема конфиденциальности.

Ответ 1

Он использует метод WebRTC для сбора вашего локального IP:

В Firefox и Chrome реализован WebRTC, позволяющий отправлять запросы серверам STUN, которые будут возвращать локальные и публичные IP-адреса для пользователя. Эти результаты запроса доступны для javascript, поэтому теперь вы можете получать локальные и публичные IP-адреса пользователей в javascript.

Источник: https://github.com/vitalets/webrtc-ips
PoC: https://vitalets.github.io/webrtc-ips/demo/

Обновление 08/2019: В настоящее время PoC работает не полностью, потому что Chrome добавил поддержку mDNS для повышения анонимности.

Ответ 2

Скорее всего, параметр X-Forwarded-For для squid

X-Forwarded-For Включить обработку заголовка X-Forwarded-for для различных задач администрирования.

Разрешить или запретить заголовок X-Forwarded-For, который следует соблюдать, найти исходный источник запроса. Запросы могут проходить через цепочку из нескольких других прокси до того, как мы дойдем до нас. Заголовок X-Forwarded-For будет содержать список IP-адресов в цепочке, разделенный запятыми, причем самый правый адрес является самым последним.

Подробнее см. здесь.

Ответ 3

Когда вы просматриваете веб-страницу (например, whatismyip.com), ваш компьютер информирует сервер о вашем IP-адресе, чтобы сервер мог отправлять вам HTML, графику и другие элементы запрошенной вами веб-страницы.

Рассмотрим следующие переменные сервера (код С#):

string server = Request.ServerVariables["SERVER_NAME"]; 
string url = Request.ServerVariables["URL"]; 
querystring = Request.ServerVariables["QUERY_STRING"]; 
string ipAddress = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (ipAddress == null || ipAddress == "")
{
    ipAddress = Request.ServerVariables["REMOTE_ADDR"];
}

Ниже приведены некоторые другие переменные:

"HTTP_X_COMING_FROM"
"HTTP_X_FORWARDED_FOR" 
"HTTP_X_FORWARDED" 
"HTTP_X_REAL_IP" 
"HTTP_VIA" 
"HTTP_COMING_FROM" 
"HTTP_FORWARDED_FOR" 
"HTTP_FORWARDED" 
"HTTP_FROM" 
"HTTP_PROXY_CONNECTION" 
"CLIENT_IP" 
"FORWARDED"