2017-01-16 12 views
2

Я делаю программу, которая проверяет, является ли IP-адрес пользователя определенным IP-адресом.Windows Batch - Как получить внешний IP-адрес в переменной пакетного файла

В настоящее время я создал успешную внутреннюю версию IP:

@echo off 
set userIp=192.168.90.100 
for /f "tokens=4 delims= " %%i in ('route print ^| find " 0.0.0.0"') do set localIp=%%i 
for /f "delims=[] tokens=2" %%a in ('ping %computername% -4 -n 1 ^| findstr "["') do set thisip=%%a 
goto :Check 

:Check 
if %localIp%==%userIp% goto :Good 
if %thisip%==%userIp% goto :Good 
goto :Bad 

И я пытаюсь сделать то же самое, что работает с внешними IP-адресами.

Я исследовал онлайн, и вот что я получил до сих пор.

@echo off 
for /f "tokens=2 delims=:" %%a IN ('nslookup myip.opendns.com. resolver1.opendns.com ^| findstr /IC:"Address"') do if /i %%a=="10.11.12.13" goto :Good 
goto :Bad 

Мне нужна помощь, как это исправить.

С уважением, djmrminer.

ответ

8

С чистыми серийными/уже имеющимися инструментами:

@Echo off 
for /f "tokens=2 delims=: " %%A in (
    'nslookup myip.opendns.com. resolver1.opendns.com 2^>NUL^|find "Address:"' 
) Do set ExtIP=%%A 
Echo External IP is : %ExtIP% 

Reference

Еще один с PowerShell:

@Echo off 
For /f %%A in (
    'powershell -command "(Invoke-Webrequest "http://api.ipify.org").content"' 
) Do Set ExtIP=%%A 
Echo External IP is : %ExtIP% 
+0

Спасибо @LotPings, пакетный работал. – djmrminer

+0

Угадайте, я должен обновить мою версию powershell до версии 3 в Windows 7. – Squashman

0

Сначала кажется, что есть . после первого .com.

Во-вторых при использовании команды с просто google.com и echo %a я получаю следующее:

" xx.xx.xx.x"без котировки и с двумя ведущими пробелами!

Значит, ваш, если будет никогда не быть правдой!

Измените его на следующее: if "%%a"==" xx.xx.xx.x" Goto:good, и все должно быть хорошо.

+0

Можете ли вы изменить свой ответ с кодом он должен быть? Я не знаю, что вы имеете в виду просто google.com, потому что это дает мне ошибку, когда я запускаю ее. Кроме того, это работает во всех версиях Windows? – djmrminer

+0

Я тоже должен был сам протестировать, и я запустил 'nslookup google.com', чтобы проверить, какой результат я получаю. Вам не придется ничего менять, кроме вашего if-состояния, как указано выше. И пока присутствует «nslookup», это должно работать на всех версиях Windows. Код будет следовать позже, поскольку я занят прямо сейчас. – geisterfurz007

1

Чтобы получить публичный IP без дополнительного разбора сделать это:

завиток "http://api.ipify.org"

EDIT:

Эта версия является более надежным по языковых версиях Windows:

for /f "tokens=3 delims== " %%A in (' 
nslookup -debug myip.opendns.com. resolver1.opendns.com 2^>NUL^|findstr /C:"internet address" 
') do set "ext_ip=%%A" 
+0

Я запускаю Windows 10, и он говорит: «« curl »не распознается как внутренняя или внешняя команда, операционная программа или командный файл.« Я хочу, чтобы он мог работать с большинством версий Windows, включая мои собственные. – djmrminer

+0

Вы должны получить утилиту curl.exe https://curl.haxx.se/download.html – user2956477