52

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

13 ответов13

92

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

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

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

Версия Unix:

$ dig +short myip.opendns.com @resolver1.opendns.com
28

возьмите свою собственную копию 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 был создан мной)

13

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

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

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)

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.

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

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.

4

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

nslookup myip.opendns.com resolver1.opendns.com
3

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

telnet curlmyip.com 80

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

GET

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

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

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

pkgmgr /iu:”TelnetClient”
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));
}
2

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

curl ifcfg.me
nslookup . ifcfg.me
telnet ifcfg.me
ftp ifcfg.me
finger @ifcfg.me
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
0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .