Windows Batch - Sådan får du den eksterne IP til en batch-fil-variabel

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg laver et program, der kontrollerer, om en brugers IP er en bestemt IP-adresse.


I øjeblikket oprettede jeg en vellykket intern IP-version:


@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


Og jeg forsøger at gøre det samme, der virker med eksterne IP'er.


Jeg undersøgte online, og her er hvad jeg fik hidtil.


@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


Jeg har brug for en smule hjælp til, hvordan du løser dette.


Med venlig hilsen djmrminer.

Bedste reference


Med rene batch/allerede til stede værktøjer:


@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 [12]


En anden med 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\%

Andre referencer 1


For at få din offentlige IP uden yderligere parsing skal du gøre dette:


krølle 'http://api.ipify.org' [13]


REDIGERE:


Denne version er mere pålidelig i Windows-sprogversioner:


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"

Andre referencer 2


For det første synes det, at der er en . for meget efter den første .com.


For det andet når du bruger din kommando med blot google.com og echo \%a får jeg følgende:


" xx.xx.xx.x" uden citaterne og med to førende rum!


Så din hvis vil aldrig være sandt!


Skift det til noget som dette: if "\%\%a"==" xx.xx.xx.x" Goto:good og du skal være i orden.