Команда Windows, которая возвращает внешний IP

58

Есть ли команда, с помощью которой я могу найти свой внешний IP-адрес моего маршрутизатора или моего маршрутизатора NAT \ DSL и т. Д., Устраняя необходимость посещать whatsmyip.net или аналогичный.

Джунаид Саид
источник
Linux: askubuntu.com/questions/95910/…
Сиро Сантилли,

Ответы:

14

Для этого нет встроенной команды. Частично проблема заключается в том, что когда вы подключены к Интернету через маршрутизатор, ваше сетевое оборудование не подключается напрямую к Интернету, поэтому вашей системе не назначается конкретный IP-адрес. Возможно, в некоторых случаях у вас может быть несколько внешних IP-адресов, если вы используете обратный прокси-сервер, так как настроено много корпоративных сетей. Лучше всего было бы создать скрипт, который запрашивает whatismyip.org , или попытаться найти, если он уже существует.

(Как подсказка, whatismyip.org предпочтительнее большинства других решений, поскольку он просто возвращает ваш IP в виде обычного текста - без лишнего текста, ссылок, изображений или другого мусора. Было бы намного проще использовать пользовательский скрипт, чем большинство другие сайты IP-обнаружения.)

nhinkle
источник
6
Они изменили whatismyip.org, к сожалению; IP-адрес теперь возвращается в виде изображения , что делает его практически бесполезным для сценариев. Веб-сайт «icanhazip.com», упомянутый ниже , работает.
onnodb
Яндекс работает, проверьте скрипт, размещенный ниже.
Филипе ЯБа Полидо
Рабочая нативная команда снизу superuser.com/a/722397/216374
PsychoData
107

Вы можете использовать DNS-запрос вместо HTTP-запроса, чтобы узнать ваш публичный IP:

C:\> nslookup myip.opendns.com. resolver1.opendns.com

Он использует resolver1.opendns.comDNS-сервер для разрешения магического myip.opendns.com.имени хоста в ваш IP-адрес. (Примечание: конечный .результат поиска не позволяет добавлять поисковые домены, что может привести к неверным результатам.)

Версия Unix:

$ dig +short myip.opendns.com @resolver1.opendns.com
JFS
источник
1
Работал как шарм.
БК
гениально, работает без установки тоже ничего.
ericosg
У меня больше не работало в ноябре 2017 года на Windows 10. Ответ PowerShell от Брэдли Форни работает.
Джейсон
Работал у меня до сих пор (Windows 10, декабрь 2017). Очень умный @jfs, OpenDNS документировал это где-нибудь, как вы это обнаружили?
Алекс КейСмит
4
Это должен быть принятый ответ, поскольку он предоставляет фактическую команду, и она работает. Принятый ответ говорит, что команды нет (что доказано как ложь), и предлагает использовать сценарий, не давая дальнейших указаний.
CyberClaw
30

возьмите свою собственную копию curlс http://curl.haxx.se/download.html, а затем просто

curl "http://myexternalip.com/raw"

или используйте powershell:

$wc = new-object System.Net.WebClient
$wc.DownloadString("http://myexternalip.com/raw")

(отказ от ответственности: http://myexternalip.com был создан мной)

Акира
источник
Это только обеспечивает адрес IPv6. Есть ли способ получить адрес IPv4?
Tim11g
Я продолжал читать и нашел примеры IPv4 / IPv6 ниже для Powershell. Можно получить IPv4 с CURL, как это "C:> curl" myip.dnsomatic.com "
tim11g
7

Это работает хорошо, я использую его в основном с psexec при проверке подключений клиентского компьютера.

nslookup myip.opendns.com resolver1.opendns.com
Антти Лагус
источник
6

Создайте файл с именем ip.vbsи скопируйте в него следующее:

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

Выполнить с помощью

C:\>cscript ip.vbs

Как отметил nhinkle , лучше выбрать сайт, который возвращает только IP, а не HTML + рекламу и т. Д., Например:

(источник: ранее http://externip.com/about )

hyperslug
источник
5

Я сделал этот пакетный скрипт, чтобы сделать это несколько месяцев назад:

@echo off

:: WhatIsMyIP.cmd - returns public IP address
:: requires: wget.exe

if [%1]==[-h] goto :HELP
if [%1]==[--help] goto :HELP
if [%1]==[/?] goto :HELP

wget -q -O %temp%\MyIP http://www.whatismyip.com/automation/n09230945.asp
for /f "delims= " %%G in (%temp%\myip) do set PublicIP=%%G & del %temp%\MyIP
echo. & echo Your public IP address is %PublicIP% & echo.
if [%1]==[--clip] echo %PublicIP% | clip
goto :EOF

:HELP
echo. & echo Usage: whatismyip [--clip] & echo.
goto :EOF

:EOF

Это дает вам возможность поместить IP-адрес в буфер обмена и устанавливает переменную среды - %PublicIP%.


ПРОСТОЙ МЕТОД:

Теперь я просто делаю это вместо этого:

curl icanhazip.com

или же...

curl icanhazip.com | clip

... чтобы получить текущий публичный IP-адрес в буфер обмена.

Вам нужен CURL .

Paradroid
источник
1
Сценарий от Paradroid работал нормально, но whatsmyip переместил веб-страницу на Automation.whatismyip.com/n09230945.asp Если вы измените это, он работает отлично.
5

С Powershell 3.0 (по умолчанию Windows 7 - 2.0) вы можете использовать Invoke-WebRequest

Для IPv4:

$tmp =Invoke-WebRequest -URI http://myip.dnsomatic.com/
$tmp.Content

Для IPv6:

$tmp =Invoke-WebRequest -URI http://myexternalip.com/raw
$tmp.Content

Это даст вам переменную для работы, если у вас есть что-то конкретное, что вы хотите с ней сделать. Я на самом деле использую это для создания сценария для периодической загрузки динамического IP-адреса моего роутера, для регулярной проверки соединения с ним другого компьютера, а затем для обновления DNS на последний IP-адрес, если он изменился, чтобы я мог получить доступ к своему устройству из любой точки используя имя вместо того, чтобы постоянно преследовать IP.

И, конечно же, по мере того, как меняются сайты или меняются их результаты, вы захотите обновить их соответствующим образом. :)

Брэдли Форни
источник
Этот подход отлично работал для меня в Windows 10. Мне нужна была однострочная команда, так что после вышеперечисленного запустили вышеприведенное powershell.exe -noprofile -command "". Разделяйте разрыв строки точкой с запятой ...
Джейсон
1
Один лайнер? Просто беги(Invoke-WebRequest -URI http://myip.dnsomatic.com).Content
merosss
3

Попробуйте это:
не требует установки какого-либо внешнего программного обеспечения.

@set @script=0 /*
  @echo off
    set @script=
    cscript //nologo //e:jscript "%~dpnx0"
  exit /b
*/

with (new ActiveXObject('Microsoft.XMLHTTP')) {
   open('GET', 'http://internet.yandex.ru/', false);
   send();

   WScript.echo(responseText.match(/IPv4:\s(\d+\.){3}\d+/g));
}
Филипе ЯБа Полидо
источник
3

Без сторонних программ сложно работать в Windows, так как Telnet не поставляется по умолчанию, но, если он есть (XP) или включен (Windows Vista и выше), просто введите:

telnet curlmyip.com 80

экран будет мигать, и вы просто получите курсор ... Следующий тип:

GET

Заглавными буквами ... затем вы увидите заголовки, за которыми следует ваш ip (и извините, я размыл его, просто показывая, где он будет!):

введите описание изображения здесь

Другие ответы здесь, очевидно, работают, но я стараюсь придерживаться вопроса о том, что можно использовать в любых окнах, без сторонних программ!

Для Windows Vista и выше вы можете легко (и безопасно) установить telnet с Programs and featuresпомощью следующей команды:

pkgmgr /iu:”TelnetClient”
Уильям Хилсум
источник
Это (и большинство ответов!) Предполагает, что исходный веб-сайт точно распознает ваш IP-адрес - некоторые типы прокси испортили это. Я очистил свой IP-адрес от причины этого роутера. Интересно, что в этих случаях веб-сайт, который использует нестандартный порт, может работать нормально.
Подмастерье Компьютерщик
Не работает с curlmyip.com, но проверено работает с checkip.dyndns.org.
Сопалахо де Арриерес
2

Вы можете использовать ifcfg.me . он поддерживает некоторые внутренние команды, которые поставляются с окнами по умолчанию.

curl ifcfg.me
nslookup . ifcfg.me
telnet ifcfg.me
ftp ifcfg.me
finger @ifcfg.me
Eun
источник
1

Я хотел иметь решение, которое работает для Windows без установки сторонних инструментов. Поэтому я выбрал вариант powershell , который должен запускать скрипт каждый час.

Вы создаете этот скрипт с помощью блокнота

$wc = new-object System.Net.WebClient
$ip = $wc.DownloadString("http://myexternalip.com/raw")
$LogTime = Get-Date -Format "MM-dd-yyyy_hh-mm-ss"
Add-Content C:\Users\Administrator\Desktop\logs\IPLog.txt $LogTime
Add-Content C:\Users\Administrator\Desktop\logs\IPLog.txt "`n"
Add-Content C:\Users\Administrator\Desktop\logs\IPLog.txt $ip
Add-Content C:\Users\Administrator\Desktop\logs\IPLog.txt "`n"

и сохранить его как- getIP.ps1нибудь. Вы можете вызвать этот скрипт либо непосредственно в powershell, либо использовать планировщик задач, как я. Это команда для выполнения:

powershell -executionpolicy bypass -File C:\Users\Administrator\Desktop\getIP.ps1

В планировщике задач вы создаете новую задачу. В Trigger вы используете настройку ежедневно для каждого 1 дня, а в расширенной опции вы выбираете каждый час на время немедленно . Также установите флажок Запускать задачу как можно скорее после того, как запланированный запуск пропущен в Настройках . Под действием вы вставляете приведенный выше код выполнения.

Код PowerShell можно оптимизировать, потому что я не гуру PowerShell (мой первый раз с ним). Сейчас я проверяю, вызывается ли скрипт каждый час.

тестирование
источник
1

Вот что я понял, можно использовать встроенную команду для получения публичного IP-адреса, но у вас есть доступ к Интернету.

telnet icanhazip.com

или же

telnet myip.gelma.net
Сэм
источник
Хороший улов! Хотя icanhazip.comу меня это не сработает, а другой не выполняет IPv6 должным образом. :)
Даниэль Б
0

ipchicken.com вернет ваш очевидный IP-адрес в текстовом формате, если вы сможете проанализировать возвращаемый HTML-код, извлеченный из внешнего IP-адреса вашего маршрутизатора. Кроме того, вы можете установить один из тех динамических DNS-агентов, который обновит ваш внешний IP-адрес до полного доменного имени, а затем просто выполнить nslookup на своем полном доменном имени, чтобы увидеть ваш текущий номер IP. Раньше были бесплатные, такие как DynDNS, но большинство из них теперь требуют платной подписки.

anthonymaw
источник