Answers:
没有内置命令可以执行此操作。问题的一部分是,当您通过路由器连接到Internet时,您的网络硬件没有直接连接到Internet,因此没有为您的系统专门分配IP。在某些情况下,由于建立了许多公司网络,如果您在反向代理后面,甚至可能会有多个外部IP。最好的选择可能是创建一个查询whatismyip.org的脚本,或者尝试查找是否已经存在。
(作为一个提示,whatismyip.org比大多数其他解决方案更可取,因为它仅以纯文本形式返回您的IP,没有多余的文本,链接,图像或其他垃圾。在自定义脚本中使用它比大多数其他方法要容易得多。其他IP检测站点。)
您可以使用DNS请求而不是HTTP请求来查找您的公共IP:
C:\> nslookup myip.opendns.com. resolver1.opendns.com
它使用resolver1.opendns.com
dns服务器将神奇的myip.opendns.com.
主机名解析为您的 IP地址。(注意:.
查找中的尾部阻止附加搜索域,这可能会产生错误的结果。)
Unix版本:
$ dig +short myip.opendns.com @resolver1.opendns.com
curl
从http://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由我创建)
这很好用,在检查客户端计算机连接时,我主要将它与psexec一起使用。
nslookup myip.opendns.com resolver1.opendns.com
创建一个名为的文件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)
我几个月前做了这个批处理脚本:
@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。
使用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。
当然,随着站点的变化或输出的变化,您需要相应地进行更新。:)
powershell.exe -noprofile -command ""
。用分号分隔换行符
(Invoke-WebRequest -URI http://myip.dnsomatic.com).Content
尝试以下操作:
不需要安装任何类型的外部软件。
@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));
}
由于默认情况下不提供Telnet,因此在Windows上很难没有第三方程序,但是,如果存在(XP)或已打开(Windows Vista及更高版本),则默认情况下不提供Telnet,只需键入:
telnet curlmyip.com 80
屏幕将闪烁,然后您将得到一个光标...下一个类型:
GET
用大写字母...您将看到标题,然后是您的ip(对不起,我对其进行了模糊处理,仅显示它的位置!):
这里的其他答案显然是可行的,但是,我试图在没有第三方程序的情况下可以在任何Windows上使用的问题继续存在!
对于Windows Vista及更高版本,您可以通过轻松(安全)安装telnet Programs and features
,或使用以下命令:
pkgmgr /iu:”TelnetClient”
curlmyip.com
,但经过测试可以工作checkip.dyndns.org
。
我希望有一个适用于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专家(这是我的第一次)。现在,我正在测试脚本是否每小时调用一次。
如果您可以解析提取路由器外部IP的返回HTML,ipchicken.com将以文本格式返回您的明显IP地址。或者,您可以安装这些动态DNS代理之一,以将您的外观上的外部IP更新为FQDN,然后只需在FQDN上执行nslookup即可查看当前的IP号。曾经有像DynDNS这样的免费帐户,但其中大多数现在都需要付费订阅帐户。