如何将公共IP地址获取到Windows批处理变量中?

问题描述 投票:0回答:1

如何将公共 IP v4 地址放入 Windows 批处理变量(

*.bat
*.cmd
文件)?

如果您使用网络浏览器访问此 URL

https://api.ipify.org
,您的公共 IP v4 将以纯文本形式显示。 我的目标是将此地址放入 Windows 批处理变量中。

我尝试了以下 Windows 批处理代码:

@echo off
%SystemRoot%\System32\bitsadmin.exe /transfer "Job" "https://api.ipify.org" "%TEMP%\ipify.org" >nul
for /f %%i in (%TEMP%\ipify.org) do (set "res=%%i")
echo My public IP address is: %res%

上面的代码构成了一个最小的可重现示例。

此批处理代码不接受任何输入参数。
此批处理代码生成以下输出:

The system cannot find the file C:\temp\ipify.org
My public IP address is:

上面的代码不起作用,因为它没有将公共 IP 地址获取到 Windows 批处理变量中,并且不显示它。

调试显示文件

ipify.org
未创建,因为
bitsadmin
返回错误代码0x80072f7d。
使用
bitsadmin
不是强制性的。

下面是一个类似的 PowerShell 命令,显示公共 IP 地址:

$ip = Invoke-RestMethod -Uri 'https://api.ipify.org?format=json'
"My public IP address is: $($ip.ip)"

...在 Python 中:

from requests import get
ip = get('https://api.ipify.org').text
print('My public IP address is: {}'.format(ip))

上面的 PS 和 Python 代码只是所寻求功能的工作示例。 使用 PowerShell 或 Python 代码的答案将被接受。 仅适用于所有 64 位版本 Windows 的 Windows 批处理代码,无需安装额外的 PE 文件/可执行文件。

batch-file batch-processing windows64
1个回答
0
投票

无需在 URL 中指定格式,但我认为

https
前缀需要替换为
http
。根据您选择的操作系统中未更改的系统设置,它应该可以在没有 PowerShell 或 python 的情况下工作,或者需要包含其他/非标准可执行文件。

<!-- :
@Echo Off
SetLocal EnableExtensions
Set "PublicIP="
For /F %%G In ('%SystemRoot%\System32\cscript.exe //NoLogo "%~f0?.wsf" 2^>NUL') Do Set "%%G"
If Not Defined PublicIP GoTo :EOF
Echo Your public IP is: %PublicIP%
Pause
Exit /B
-->
<Job><Script Language="VBScript">
        Set IPRequest = CreateObject("Microsoft.XMLHTTP")
        Call IPRequest.Open("GET", "http://api.ipify.org", FALSE)
        IPRequest.Send()
        WScript.Echo("PublicIP=" & IPRequest.ResponseText)
</Script></Job>
© www.soinside.com 2019 - 2024. All rights reserved.