Как получить мой внешний IP-адрес (через NAT) из командной строки Windows? [Дубликат]


13

Команда Windows «ipconfig» может показывать только параметры интерфейсов Ethernet с моего компьютера (даже с ipconfig /allаргументом). Он может отображать подробную информацию об интерфейсе, но никогда не отображает мой внешний IP-адрес в сети NAT .

ipconfig / all - скриншот Windows

Однако есть несколько веб-сайтов, таких как «Какой у меня IP-адрес», которые могут получить и показать мой внешний IP-адрес. Вот мне и интересно, возможно ли получить это значение извне? Должен ли я ожидать, что есть какой-то способ получить эту информацию из командной строки на моем локальном компьютере ...

Мне нужно получить это значение для входа в приложение, которое я делаю с VBScript . Есть ли способ сделать это из cmdWindows?


Обратите внимание, что HTTP-сервисы what-is-my-IP могут дать вам IP прокси-сервера. (И прежде чем кто-либо укажет, что существуют HTTPS-прокси, вы не можете прозрачно прокси- серверы HTTPS. Если у вас есть один, вы это узнаете.)
billpg

Ответы:


11

Теперь, используя предоставленный Оливер сайт, это можно сделать в VBScript.

Dim o
Set o = CreateObject("MSXML2.XMLHTTP")
o.open "GET", "http://ifconfig.me/ip", False
o.send
WScript.StdOut.Write o.responseText

Есть аналогичный метод для PowerShell.


Хорошо, это сработало. Я вставлю это в мою программу. Это хорошее решение для моей проблемы. Спасибо.
Диого

Хм, он возвращает «Acess denied» в строке 4, символ 1 для этого сценария. Даже запустив его из командной строки с правами администратора ... Знаете почему?
Диого

@DiogoRocha Я не знаю почему. Фиаско, вероятно, более надежный. Также возможно, что у вас есть брандмауэр или что-то, блокирующее доступ в Интернет к wscript/ cscript.
Боб

10

Проблема в том, что это не ваш IP-адрес. Это IP-адрес вашего роутера.

Таким образом, вы никогда не сможете получить его, не пройдя через маршрутизатор. И самый простой способ - просто заставить маршрутизатор получать сайт для вас (как вы уже заметили). Потому что маршрутизатор будет использовать свой IP-адрес для получения этого сайта.

При этом, вы можете сделать это легко с помощью ifconfig.me/ip . Теперь, если у вас есть curl, вы уже сделали, если нет: Wget / cURL альтернатива родной для Windows?


1
ifconfig.me/ip долго загружался. whatismyip.org дает вам идентичный текстовый IP-адрес и работает намного быстрее.
nhinkle

1
@nhinkle Это может зависеть от вашего местоположения, хотя. Они оба имеют одинаковое время загрузки для меня, но время отклика ping из ifconfig.me составляет половину (139 мс против 250 мс). Что, вероятно, более важно, это то, что сервис работает как можно дольше, но у нас действительно нет возможности узнать об этом.
Боб

Нет ничего плохого во внешних IP-адресах моего маршрутизатора, учитывая правила переадресации портов и IPv4.
mbx

5

Создайте скрипт VB для запуска на досуге.

Введите это в текстовый файл:

Option Explicit
Dim http : Set http = CreateObject( "MSXML2.ServerXmlHttp" )
http.Open "GET", "http://icanhazip.com", False
http.Send
Wscript.Echo http.responseText   'or do whatever you want with it
Set http = Nothing

Закройте текстовый файл и переименуйте его в ip.vbs (сохраните его в C: для этого примера)

В окнах откройте окно DOS (запустить CMD) ( ха! Я только что понял, если вы поменяете местами, что это становится запустить DMC !! )

Убедитесь, что вы находитесь в c: / (если нет, введите c: & нажмите enter, затем cd .. & введите несколько раз, пока не увидите C:>)

В командной строке DOS введите:

cscript ip.vbs

и вы сразу увидите свой внешний IP.

Если вы поместите файл vbs на USB-ключ или что-то еще (и не забудьте запустить cscript ip.vbs в командной строке dos, но убедитесь, что вы находитесь в том же каталоге, что и файл ip.vbs), вы можете взять это с собой. куда бы вы ни пошли и запустили файл .vbs на любом компьютере, чтобы увидеть их внешний IP.

Еще одно примечание: строка с адресом icanhazip.com может быть изменена на любое из следующего:

http://myip.dnsomatic.com
http://whatismyip.org
http://icanhazip.com
http://www.whatismyip.com/automation/n09230945.asp
http://externip.com

Отредактируйте, вы также можете запустить файл ip.vbs в окнах, не заходя в окно DOS, и он просто появится в небольшом всплывающем окне.


У icanhazip.com очень короткое время отклика, которое лучше, чем у ipconfig.me/ip здесь, в центре Европы.
Мартин Браун

4

Я наткнулся на этот сайт, когда искал эквивалент PowerShell, и подумал, что поделюсь этой командой, если кто-то еще будет искать:

Invoke-WebRequest ifconfig.me/ip

Более подробная информация доступна здесь, если они вам нужны - http://jfrmilner.wordpress.com/2012/12/22/powershell-quick-tip-03-whats-my-external-ip-address-windows-command-line/


3

Чтобы получить внешний IP-адрес, вам нужно спросить что-то за пределами сети и попросить его сообщить, какой ваш IP-адрес «выглядит» для него. Это можно сделать с помощью сценариев, выполнив запрос к странице, с которой легко проанализировать результат, и получая по ней IP-адрес, но в Windows нет встроенного инструмента, который бы мог просто сказать вам, каков ваш внешний IP-адрес. Вам нужно будет написать его самостоятельно или найти и загрузить.


2

Используя что-то вроде DynDNS для назначения вашего IP-адреса DHCP доменному имени, вы можете затем выполнить nslookupили проверить связь (если ваш маршрутизатор настроен на ответ) вашего доменного имени и извлечь из него IP-адрес.

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

Редактировать: Поскольку для извлечения строки IP-адреса требуется немного синтаксического анализа вышеизложенного, и он ifconfig.meимеет хороший разреженный ответ, вот несколько вариантов сценария Боба, функция может проверить отсутствие ответа и вернуть хороший чистый IP адрес для использования в скрипте, если сервер работает.

wscript.echo WAN_IP()

function WAN_IP()
    set obj = createobject("Microsoft.XMLHTTP")
    call obj.open("get", "http://ifconfig.me/ip", false)
    obj.send()

    strresponse = obj.responsetext
    set obj = nothing

    if strresponse <> "" then
        strIP = strresponse
    else
        strIP = "Unavailable"
    end if

    WAN_IP = trim(strIP)

end function

1

Если ваш маршрутизатор поддерживает Universal Plug & Play (UPnP), вы можете запросить его IP-адрес (а).

В Windows вы можете запросить такую ​​информацию с помощью WMI и из командной строки с помощью инструмента WMIC.


2
Не могли бы вы привести пример? Я был бы очень заинтересован в этом.
Der Hochstapler

1

Как уже говорили другие, вам нужно полагаться на внешний сервис. Я бы порекомендовал http://www.externalip.net

Вы можете использовать http://api.externalip.net/ip, чтобы получить IP в текстовом формате. Он оказался быстрым и надежным, плюс его неограниченное использование.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.