返回外部 IP 的 Windows 命令

Jun*_*eed 77 windows command-line ip

有没有一个命令可以让我找到我的路由器的外部 IP 或我的 NAT\DSL 路由器等,而无需访问 whatsmyip.net 或类似的。

jfs*_*jfs 140

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

C:\> nslookup myip.opendns.com. resolver1.opendns.com
Run Code Online (Sandbox Code Playgroud)

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

Unix版本:

$ dig +short myip.opendns.com @resolver1.opendns.com
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案,因为它提供了一个实际的命令,并且有效。接受的答案表明没有命令(证明是错误的),并建议使用脚本,而没有真正给出进一步的指导。 (6认同)
  • 像魅力一样工作。 (2认同)
  • 太棒了,无需安装任何东西即可工作。 (2认同)

aki*_*ira 43

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

curl "http://myexternalip.com/raw"
Run Code Online (Sandbox Code Playgroud)

或使用powershell:

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

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


nhi*_*kle 17

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

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

  • 不幸的是,他们改变了 whatismyip.org;IP 地址现在作为 *image* 返回,这使得它对于脚本编写几乎没有用处。下面提到的网站“icanhazip.com”*确实*有效。 (7认同)

小智 9

这很好用,我在检查客户端计算机连接时主要将它与 psexec 一起使用。

nslookup myip.opendns.com resolver1.opendns.com
Run Code Online (Sandbox Code Playgroud)


hyp*_*lug 7

创建一个名为的文件并将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
Run Code Online (Sandbox Code Playgroud)

执行使用

C:\>cscript ip.vbs
Run Code Online (Sandbox Code Playgroud)

正如 nhinkle指出的那样,最好选择一个只返回 IP 而不是 HTML + 广告等的站点,例如:

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


par*_*oid 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
Run Code Online (Sandbox Code Playgroud)

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


更简单的方法:

现在,我只是这样做:

curl icanhazip.com
Run Code Online (Sandbox Code Playgroud)

或者...

curl icanhazip.com | clip
Run Code Online (Sandbox Code Playgroud)

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

你需要cURL


Bra*_*ney 5

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

对于 IPv4:

$tmp =Invoke-WebRequest -URI http://myip.dnsomatic.com/
$tmp.Content
Run Code Online (Sandbox Code Playgroud)

对于 IPv6:

$tmp =Invoke-WebRequest -URI http://myexternalip.com/raw
$tmp.Content
Run Code Online (Sandbox Code Playgroud)

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

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

  • 单线?只需运行 `(Invoke-WebRequest -URI http://myip.dnsomatic.com).Content` (2认同)