Я пытаюсь написать сценарий PowerShell, который выполняет HTTP-запрос. Запрос обрабатывается PHP-скриптом, который должен знать IP-адрес клиента. С этой целью он читает $_SERVER['REMOTE_ADDR']
,
Теперь происходит следующее странное поведение:
- Когда я использую такой сервис, как whatismyip.com, мой IP
xxx.yyy.141.183
- Когда я использую веб-браузер для вызова моего скрипта PHP,
$_SERVER['REMOTE_ADDR']
возвращает тот же IP, что и выше,xxx.yyy.141.183
(как и ожидалось). - Когда я использую сценарий PowerShell для вызова того же самого сценария PHP,
$_SERVER['REMOTE_ADDR']
возвращает другой IP, а именноxxx.yyy.51.111
,
Сценарий PowerShell очень прост:
$wc = New-Object System.Net.WebClient
$wc.DownloadString("http://example.net/myscript.php")
Я наблюдаю, как это поведение связано с сетью моего университета. Поэтому я не знаю никаких подробностей о конфигурации сети. Я заметил, что разные машины, кажется, имеют разные IP-адреса, используя методы в пунктах 1 и 2, но все они имеют один и тот же IP-адрес, используя третий метод.
Вопрос: Как я могу изменить свой сценарий PowerShell так, чтобы он «вел себя как веб-браузер», то есть отправлял запрос, когда удаленный адрес, видимый сервером, равен удаленному адресу, который он видит при получении запроса от веб-браузера?
Бонусный вопрос: почему это происходит?
$_SERVER['REMOTE_ADDR']
относительно конечно .. и что делаетipconfig
скажи твой IP есть? Скорее всего*.*.141.183
это брандмауэр вашего университета .. Но это всего лишь предположение.ipconfig
дает мне141.183
как мой адрес IPv4.Ответы:
Основываясь на обнаружении, что только Firefox делал запросы с правильным публичным IP
xxx.yyy.141.183
в то время как IE и Chrome этого не сделали, я нашел следующее решение:xxx.yyy.51.111
IP.Как я не хочу менять конфигурацию системы и как
GlobalProxySelection.GetEmptyWebProxy
устарела, теперь я успешно использую предложенное решение Вот : Просто установитеproxy
собственность наnull
,источник