我正在制作一个程序来检查用户的IP是否是某个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。
答案 0 :(得分:12)
使用纯批次/已存在的工具:
编辑:更改批次以正确处理IPv6地址
@Echo off
for /f "tokens=1* delims=: " %%A in (
'nslookup myip.opendns.com. resolver1.opendns.com 2^>NUL^|find "Address:"'
) Do set ExtIP=%%B
Echo External IP is : %ExtIP%
另一个有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%
另一个稍微不同的PowerShell变体:
@Echo off
For /f %%A in (
'powershell -nop -c "(Invoke-RestMethod http://ipinfo.io/json).IP"'
) Do Set ExtIP=%%A
Echo External IP is : %ExtIP%
答案 1 :(得分:3)
要获取您的公共IP而无需额外解析,请执行以下操作:
curl" http://api.ipify.org"
编辑:
此版本在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"
答案 2 :(得分:0)
首先,在第一个.
之后,似乎有.com
太多了。
当您使用简单google.com
和echo %a
的命令时,我得到以下内容:
" xx.xx.xx.x"
没有引号和两个前导空格!
所以你的if 永远是真的!
将其更改为:if "%%a"==" xx.xx.xx.x" Goto:good
,你应该没问题。