Batch file 如何获得公共ipv4而不是ipv6

Batch file 如何获得公共ipv4而不是ipv6,batch-file,cmd,command-line,ip,Batch File,Cmd,Command Line,Ip,我最近升级了我的宽带连接,因此新的连接同时具有ipv6和ipv4。我以前的一个只有ipv4。我想将ipv4放在批处理文件的变量中,而不是ipv6。我使用的当前命令提供了默认的ip,所以之前它用于在变量中存储ipv4,但现在它在变量中存储ipv6。我不知道如何获取ipv4,因为我使用的nslookup只提供ipv6。 这是我当前的批处理文件 @echo off setlocal EnableExtensions Disabledelayedexpansion cd /d "%~dp0&q

我最近升级了我的宽带连接,因此新的连接同时具有ipv6和ipv4。我以前的一个只有ipv4。我想将ipv4放在批处理文件的变量中,而不是ipv6。我使用的当前命令提供了默认的ip,所以之前它用于在变量中存储ipv4,但现在它在变量中存储ipv6。我不知道如何获取ipv4,因为我使用的nslookup只提供ipv6。 这是我当前的批处理文件

@echo off
setlocal EnableExtensions Disabledelayedexpansion
cd /d "%~dp0"
for /f "tokens=1* delims=: " %%A in (
  'nslookup myip.opendns.com. resolver1.opendns.com 2^>NUL^|find "Address:"'
) Do set ExtIP=%%B

<save.ip set /p SavIP=
if "%SavIP%" neq "%ExtIP%" (
  echo %date% %time~0,5% : IP changed from %SavIP% to %ExtIP%.
  >save.ip echo %ExtIP%
  start http://%ExtIP%             #this is where I put the url
) else (
  echo ExtIP didn't change. Nothing to do.
)
@echo关闭
setlocal EnableExtensions Disabledelayedexpansion
cd/d“%~dp0”
对于/f“tokens=1*delims=:”%%A in(
'nslookup myip.opendns.com.resolver1.opendns.com 2^>NUL^|查找“地址:”
)是否设置ExtIP=%%B
save.ip回显%ExtIP%
启动http://%ExtIP%#这是我放置url的地方
)否则(
echo ExtIP没有改变,没什么可做的。
)

我能够在默认网关而不是给定代码中复制此问题。 在我进行更改之前,该命令运行良好,并返回了我用于托管自己服务器的公共IPv4地址

我做了以下工作:

  • 192.168.1.1-->或任何默认网关
  • 使用“admin”和“password”-->登录,或者如果您已经更改了它们,则可以使用任何有效的方法
  • 导航到高级高级设置IPv6
  • 将设置从禁用更改为DHCP
  • 切换这两个设置会返回IPv6或IPv4。切换时,您可能需要重新打开cmd,但由于您使用了.bat,您可能只需重新运行它


    请记住,我使用的是Spectrum,您的默认网关设置可能会有不同的标签。如果您希望在以后的项目中使用IPv6,您可以随时重新切换IPv6。

    我刚刚测试了这个批处理文件,它在我的5/5版本上工作

    @echo关闭
    标题通过Powershell和批处理获取公共IP
    @对于/f“delims=“%%#in(
    'PowerShell-C“Resolve DnsName-Name”'myip.opendns.com'-服务器“'resolver1.opendns.com'”;选择IPAddress“^ | findstr”\。'
    )设置“MyPublicIP=%%#”
    回显我的公共IP地址=%MyPublicIP%
    暂停
    

    下面是另一个调用子例程的函数:GetPublic\u IP

    @echo关闭
    标题通过Powershell和批处理获取公共IP
    设置“MyPublicIP=myip.opendns.com”
    设置“Google=www.Google.com”
    设置“Yahoo=www.Yahoo.com”
    设置“Stack=www.stackoverflow.com”
    调用:GetPublic\u IP“%MyPublicIP%”MyPublicIP
    回显我的公共IP地址=%MyPublicIP%
    调用:GetPublic\u IP“%Google%”Google\u IP
    回显Google IP地址=%Google\u IP%
    呼叫:GetPublic_IP“%Yahoo%”Yahoo_IP
    回声雅虎IP地址=%Yahoo_IP%
    调用:GetPublic\u IP“%Stack%”堆栈\u IP
    回声堆栈溢出IP地址=%Stack\u IP%
    暂停
    出口
    ::------------------------------------------------------------------------------------
    :GetPublic\u IP
    @对于/f“delims=“%%#in(
    'PowerShell-C“Resolve DnsName-Name'”%~1“'-服务器“'resolver1.opendns.com'”选择IPAddress“^ findstr”\。'
    )不设置“%2=%%”#
    退出/B
    ::------------------------------------------------------------------------------------
    
    您可能需要清除或禁用路由器中的DNS缓存,然后刷新。无论哪种方式,这些都不是您的命令或脚本的问题,而是您的硬件/软件配置设置的问题。是因为我使用的是isp提供的DNS服务器吗?让我用1.1.1.1在控制台窗口中运行时的输出进行检查
     nslookup myip.opendns.com.resolver1.opendns.com
    ?是否有两行输出的
    地址:
    包含IPv6地址,下面是查找的域的IPv4地址?看起来您在输出的错误行上进行了筛选。以
    地址:
    开头的行具有网关的IP地址。这是什么e命令
    powershell-NoLogo-NoProfile-command“Resolve DnsName-Name'myip.opendns.com'-Server'resolver1.opendns.com'”
    ?命令
    powershell-NoLogo-NoProfile-command“Resolve DnsName-Name'myip.opendns.com'-Server'resolver1.opendns.com'”
    如何?