如何获取 public ipv4 而不是 ipv6
How to get public ipv4 instead of ipv6
我最近升级了我的宽带连接,所以新的同时具有 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.
)
我能够在默认网关而不是给定的代码中复制这个问题。
在我进行更改之前,该命令运行良好并返回了我用来托管自己服务器的 public IPv4 地址。
我做了以下事情:
- 192.168.1.1 --> 或者你的默认网关是什么
- 使用“admin”和“password”登录 --> 或者如果您更改了它们,无论什么都有效
- 导航至 高级 > 高级设置 > IPv6
- 已将设置从 已禁用 更改为 DHCP
切换这两个设置会导致返回 IPv6 或返回 IPv4。切换时,您可能需要重新打开 cmd,但由于您使用的是 .bat,您可能只需重新运行它即可。
请记住,我使用的是 Spectrum,您的默认网关设置可能有不同的标签。如果您想在以后的项目中使用它,您可以随时重新切换 IPv6。
我刚刚测试了这个批处理文件,它对我有效 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 <Target> <IP>
@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.whosebug.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 Whosebug 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
::------------------------------------------------------------------------------------
我最近升级了我的宽带连接,所以新的同时具有 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.
)
我能够在默认网关而不是给定的代码中复制这个问题。 在我进行更改之前,该命令运行良好并返回了我用来托管自己服务器的 public IPv4 地址。
我做了以下事情:
- 192.168.1.1 --> 或者你的默认网关是什么
- 使用“admin”和“password”登录 --> 或者如果您更改了它们,无论什么都有效
- 导航至 高级 > 高级设置 > IPv6
- 已将设置从 已禁用 更改为 DHCP
切换这两个设置会导致返回 IPv6 或返回 IPv4。切换时,您可能需要重新打开 cmd,但由于您使用的是 .bat,您可能只需重新运行它即可。
请记住,我使用的是 Spectrum,您的默认网关设置可能有不同的标签。如果您想在以后的项目中使用它,您可以随时重新切换 IPv6。
我刚刚测试了这个批处理文件,它对我有效 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 <Target> <IP>
@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.whosebug.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 Whosebug 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
::------------------------------------------------------------------------------------