【问题标题】:How to get public ipv4 instead of ipv6如何获取公共 ipv4 而不是 ipv6
【发布时间】:2021-02-19 11:31:23
【问题描述】:

我最近升级了我的宽带连接,所以新的连接有 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.
)

【问题讨论】:

  • 您可能需要清除或禁用路由器中的 DNS 缓存,然后刷新。无论哪种方式,这些都不是您的命令或脚本的问题,而是您的硬件/软件配置设置的问题。
  • 是不是因为我使用的是我的isp提供的dns服务器?让我检查一下 1.1.1.1
  • 在控制台窗口nslookup myip.opendns.com. resolver1.opendns.com 中运行时输出什么?是否没有两行输出 Addresses: 包含 IPv6 地址,下面是查找的域的 IPv4 地址?看起来您过滤了错误的输出行。以Address: 开头的行是网关的IP 地址。
  • 命令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'"怎么样?

标签: batch-file cmd command-line ip


【解决方案1】:

我刚刚测试了这个批处理文件,它在我身边 5/5 有效!

@echo off
Title Get Public IP by Powershell and Batch
@for /f "delims=" %%# in (
'PowerShell -C "Resolve-DnsName -Name "'myip.opendns.com'" -Server "'resolver1.opendns.com'" | select IPAddress" ^| findstr "\."'
) do Set "MyPublicIP=%%#"
echo My Public IP Address  = %MyPublicIP%
pause

这是另一个调用子程序:GetPublic_IP &lt;Target&gt; &lt;IP&gt;

@echo off
Title Get Public IP by Powershell and Batch
Set "MyPublicIP=myip.opendns.com"
Set "Google=www.google.com"
Set "Yahoo=www.yahoo.com"
Set "Stack=www.stackoverflow.com"

Call :GetPublic_IP "%MyPublicIP%" MyPublicIP 
echo My Public IP Address       = %MyPublicIP%
Call :GetPublic_IP "%Google%" Google_IP 
echo Google IP Address          = %Google_IP%
Call :GetPublic_IP "%Yahoo%" Yahoo_IP 
echo Yahoo IP Address           = %Yahoo_IP%
Call :GetPublic_IP "%Stack%" Stack_IP
echo Stackoverflow IP Address   = %Stack_IP%
pause
EXIT
::------------------------------------------------------------------------------------
:GetPublic_IP <Target> <IP>
@for /f "delims=" %%# in (
'PowerShell -C "Resolve-DnsName -Name '"%~1"' -Server "'resolver1.opendns.com'" | select IPAddress" ^| findstr "\."'
) do Set "%2=%%#
Exit /B
::------------------------------------------------------------------------------------

【讨论】:

    【解决方案2】:

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

    我做了以下事情:

    1. 192.168.1.1 --> 或者你的默认网关是什么
    2. 使用“admin”和“password”登录 --> 或者如果您更改了它们,不管用什么方法
    3. 导航到高级 > 高级设置 > IPv6
    4. 将设置从 Disabled 更改为 DHCP

    切换这两个设置会导致返回 IPv6 或返回 IPv4。当您切换时,您可能需要重新打开 cmd,但由于您使用的是 .bat,您可能只需重新运行它即可。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 2021-10-27
      • 1970-01-01
      • 2017-04-28
      • 2014-07-05
      • 2017-06-14
      • 1970-01-01
      相关资源
      最近更新 更多