返回外部IP的Windows命令


Answers:


14

没有内置命令可以执行此操作。问题的一部分是,当您通过路由器连接到Internet时,您的网络硬件没有直接连接到Internet,因此没有为您的系统专门分配IP。在某些情况下,由于建立了许多公司网络,如果您在反向代理后面,甚至可能会有多个外部IP。最好的选择可能是创建一个查询whatismyip.org的脚本,或者尝试查找是否已经存在。

(作为一个提示,whatismyip.org比大多数其他解决方案更可取,因为它仅以纯文本形式返回您的IP,没有多余的文本,链接,图像或其他垃圾。在自定义脚本中使用它比大多数其他方法要容易得多。其他IP检测站点。)


6
不幸的是,他们改变了whatismyip.org。现在,该IP地址将作为图像返回,因此对于脚本编写几乎没有用。下面提到的网站“ icanhazip.com” 可以正常工作。
onnodb 2012年

Yandex正在运行,请检查下面发布的脚本。
Filipe YaBa Polido

从下面的超级用户
PsychoData

107

您可以使用DNS请求而不是HTTP请求来查找您的公共IP:

C:\> nslookup myip.opendns.com. resolver1.opendns.com

它使用resolver1.opendns.comdns服务器将神奇的myip.opendns.com.主机名解析为您的 IP地址。(注意:.查找中的尾部阻止附加搜索域,这可能会产生错误的结果。)

Unix版本:

$ dig +short myip.opendns.com @resolver1.opendns.com

1
像魅力一样工作。
BK 2014年

出色,无需安装任何东西即可工作。
ericosg

在2017年11月的Windows 10上,不再对我有用。BradleyForney的PowerShell回答起作用了。
杰森

仍然为我工作(Windows 10,2017年12月)。非常聪明的@ jfs,OpenDNS是否在某个地方记录了此文档,您是如何发现它的?
Alex KeySmith '17

4
这应该是公认的答案,因为它提供了实际的命令并且可以正常工作。接受的答案表明没有命令(证明是错误的),并建议使用脚本,而没有真正给出进一步的指示。
Cyber​​Claw

30

curlhttp://curl.haxx.se/download.html获取您自己的副本,然后

curl "http://myexternalip.com/raw"

或使用powershell:

$wc = new-object System.Net.WebClient
$wc.DownloadString("http://myexternalip.com/raw")

(免责声明:http : //myexternalip.com由我创建)


那只提供一个IPv6地址。有没有办法获取IPv4地址?
tim11g

我不断阅读并发现下面有关Powershell的IPv4 / IPv6示例。可以使用CURL这样的“ C:> curl” myip.dnsomatic.com ” 获得IPv4
tim11g


6

创建一个名为的文件ip.vbs,并将以下内容复制到其中:

Option Explicit
Dim http : Set http = CreateObject( "MSXML2.ServerXmlHttp" )
http.Open "GET", "http://icanhazip.com", False
http.Send
Wscript.Echo http.responseText   'or do whatever you want with it
Set http = Nothing

使用执行

C:\>cscript ip.vbs

正如nhinkle所指出的,最好选择一个仅返回IP而不返回HTML +广告等的网站,例如:

(来源:原为http://externip.com/about


5

我几个月前做了这个批处理脚本:

@echo off

:: WhatIsMyIP.cmd - returns public IP address
:: requires: wget.exe

if [%1]==[-h] goto :HELP
if [%1]==[--help] goto :HELP
if [%1]==[/?] goto :HELP

wget -q -O %temp%\MyIP http://www.whatismyip.com/automation/n09230945.asp
for /f "delims= " %%G in (%temp%\myip) do set PublicIP=%%G & del %temp%\MyIP
echo. & echo Your public IP address is %PublicIP% & echo.
if [%1]==[--clip] echo %PublicIP% | clip
goto :EOF

:HELP
echo. & echo Usage: whatismyip [--clip] & echo.
goto :EOF

:EOF

它为您提供了将IP地址放入剪贴板的选项,并设置了环境变量- %PublicIP%


简化方法:

现在,我改为这样做:

curl icanhazip.com

要么...

curl icanhazip.com | clip

...将当前的公共IP地址放入剪贴板。

您需要cURL


1
paradroid的脚本运行良好,但是whatsmyip将网页移至Automation.whatismyip.com/n09230945.asp。如果更改为该脚本,则效果很好。

5

使用Powershell 3.0(Windows 7默认为2.0),您可以使用 Invoke-WebRequest

对于IPv4:

$tmp =Invoke-WebRequest -URI http://myip.dnsomatic.com/
$tmp.Content

对于IPv6:

$tmp =Invoke-WebRequest -URI http://myexternalip.com/raw
$tmp.Content

如果您要使用特定的变量,这将为您提供一个变量。我实际上正在使用它来构建脚本,以定期上传路由器的动态IP,定期进行另一台机器测试通信,然后使用最新IP更新DNS(如果已更改),以便可以从任何地方访问我的设备使用名称,而不必不断追逐IP。

当然,随着站点的变化或输出的变化,您需要相应地进行更新。:)


这种方法在Windows 10上对我非常有用。我需要一个单行命令,因此请在后面的引号中运行以上命令powershell.exe -noprofile -command ""。用分号分隔换行符
Jason

1
Oneliner?刚好跑步(Invoke-WebRequest -URI http://myip.dnsomatic.com).Content
merosss '18

3

尝试以下操作:
不需要安装任何类型的外部软件。

@set @script=0 /*
  @echo off
    set @script=
    cscript //nologo //e:jscript "%~dpnx0"
  exit /b
*/

with (new ActiveXObject('Microsoft.XMLHTTP')) {
   open('GET', 'http://internet.yandex.ru/', false);
   send();

   WScript.echo(responseText.match(/IPv4:\s(\d+\.){3}\d+/g));
}

3

由于默认情况下不提供Telnet,因此在Windows上很难没有第三方程序,但是,如果存在(XP)或已打开(Win​​dows Vista及更高版本),则默认情况下不提供Telnet,只需键入:

telnet curlmyip.com 80

屏幕将闪烁,然后您将得到一个光标...下一个类型:

GET

用大写字母...您将看到标题,然后是您的ip(对不起,我对其进行了模糊处理,仅显示它的位置!):

在此处输入图片说明

这里的其他答案显然是可行的,但是,我试图在没有第三方程序的情况下可以在任何Windows上使用的问题继续存在!

对于Windows Vista及更高版本,您可以通过轻松(安全)安装telnet Programs and features,或使用以下命令:

pkgmgr /iu:”TelnetClient”

该(以及大多数答案!)确实假设源网站准确地获取了您的IP地址-某些类型的代理将其弄乱了。我正在从路由器原因中刮出我的IP地址。有趣的是,在这些情况下,使用非标准端口的网站可能会正常工作。
Journeyman Geek

不工作curlmyip.com,但经过测试可以工作checkip.dyndns.org
Sopalajo de Arrierez 2014年

2

您可以使用ifcfg.me。它默认支持Windows随附的一些内部命令。

curl ifcfg.me
nslookup . ifcfg.me
telnet ifcfg.me
ftp ifcfg.me
finger @ifcfg.me

1

我希望有一个适用于Windows的解决方案,而无需安装第三方工具。因此,我采用了powershell选项,该选项应每小时运行一次脚本。

您使用记事本创建此脚本

$wc = new-object System.Net.WebClient
$ip = $wc.DownloadString("http://myexternalip.com/raw")
$LogTime = Get-Date -Format "MM-dd-yyyy_hh-mm-ss"
Add-Content C:\Users\Administrator\Desktop\logs\IPLog.txt $LogTime
Add-Content C:\Users\Administrator\Desktop\logs\IPLog.txt "`n"
Add-Content C:\Users\Administrator\Desktop\logs\IPLog.txt $ip
Add-Content C:\Users\Administrator\Desktop\logs\IPLog.txt "`n"

并保存到getIP.ps1某个地方。您可以直接在Powershell中调用此脚本,也可以像我一样使用任务计划器。这是用于执行的命令:

powershell -executionpolicy bypass -File C:\Users\Administrator\Desktop\getIP.ps1

在任务计划程序中,您将创建一个新任务。在触发条件下,每天每1天使用一次设置而在高级选项下,则选择立即设置 每小时一次。在“ 设置”中错过预定的开始时间后,也请尽快选中“运行任务。在“操作”下,粘贴上面的执行代码。

可以优化powershell代码,因为我不是powershell专家(这是我的第一次)。现在,我正在测试脚本是否每小时调用一次。


1

这是我所知道的,可以使用内置命令来获取公共IP地址,但是您确实可以访问Internet

telnet icanhazip.com

要么

telnet myip.gelma.net

接得好!尽管icanhazip.com这对我不起作用,而另一个对我来说却不能正确执行IPv6。:)
Daniel B

0

如果您可以解析提取路由器外部IP的返回HTML,ipchicken.com将以文本格式返回您的明显IP地址。或者,您可以安装这些动态DNS代理之一,以将您的外观上的外部IP更新为FQDN,然后只需在FQDN上执行nslookup即可查看当前的IP号。曾经有像DynDNS这样的免费帐户,但其中大多数现在都需要付费订阅帐户。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.