【问题标题】:Windows Batch - How to get the external IP into a batch-file variableWindows Batch - 如何将外部 IP 获取到批处理文件变量中
【发布时间】:2017-05-30 20:59:51
【问题描述】:

我正在制作一个程序来检查用户的 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

我需要一些帮助来解决这个问题。

【问题讨论】:

    标签: windows batch-file ip


    【解决方案1】:

    使用纯批处理/已经存在的工具:
    编辑:更改批处理以正确处理 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%
    

    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%
    

    还有另一个稍微不同的 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%
    

    【讨论】:

    • 猜猜我必须在 Windows 7 上将我的 powershell 版本更新到版本 3。
    • 在获取 IPv6 地址时是否可以(以及如何)检索 IPv4 地址?
    • @script'n'code 该主题是关于 external IP 地址的,因此如果您有 IPv4 或 IPv6 地址(或两者都像我一样 ATM),则取决于您的 Internet 连接) 上面的第一批在第一个冒号之后没有很好地处理 IPv6 地址。 已更改如果两个 IPv4/6 都存在,第 1 批将显示 IPv6,而第 2 批将显示 IPv4。
    【解决方案2】:

    要在不进行额外解析的情况下获取您的公共 IP,请执行以下操作:

    卷曲“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"
    

    【讨论】:

    • 我正在运行 Windows 10,它说:“'curl' 不被识别为内部或外部命令、可运行程序或批处理文件。”我希望它能够在大多数 Windows 版本上工作包括我自己的。
    • Curl 现在是 WIndows 10 的一部分
    • 为了兼容 Windows 7,您需要使用 nslookup。
    【解决方案3】:

    第一个.com之后似乎有一个.太多了。

    第二次使用简单的google.com 和echo %a 命令时,我得到以下信息:

    " xx.xx.xx.x" 没有引号和两个前导空格!

    所以你的假设永远不会是真的!

    把它改成这样:if "%%a"==" xx.xx.xx.x" Goto:good 你应该没问题。

    【讨论】:

    • 你能用它应该是的代码编辑你的答案吗?我不知道您对 google.com 的简单理解是什么意思,因为当我运行它时它会给我一个错误。另外,这适用于所有 Windows 版本吗?
    • 我也必须自己进行测试,然后运行nslookup google.com 来检查我得到的输出。除了如上所述的 if 条件外,您无需更改任何内容。只要nslookup 存在,这应该适用于所有Windows 版本。因为我现在很忙,所以稍后会出现代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 2015-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多