Как сайт "Что такое мой 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"