从http://curl.haxx.se/download.html 中抓取你自己的副本curl
from 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 ]&003由我创建)
没有内置的命令可以做到这一点。问题的一部分是,当你通过路由器连接到互联网时,你的网络硬件并没有直接连接到互联网,所以你的系统并没有特别指定一个IP。在某些情况下,如果你有一个反向代理,你甚至可能会有多个外部IP,就像许多企业网络的设置一样。你最好的办法是创建一个脚本来查询whatismyip.org,或者试着找一个已经存在的脚本。它比大多数其他的IP检测网站更容易在自定义脚本中使用。)
这个很好用,我主要是在检查客户端计算机连接时用它和psexec一起使用。
创建一个名为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
执行,正如nhinkle注意到的,最好选择一个只返回IP而不是HTML+广告等的网站。如:
(来源:原http://externip.com/about )
使用Powershell 3.0(Windows 7的默认值是2.0),你可以使用 Invoke-WebRequest
For IPv4:*
$tmp =Invoke-WebRequest -URI http://myip.dnsomatic.com/
$tmp.Content
For IPv6:
$tmp =Invoke-WebRequest -URI http://myexternalip.com/raw
$tmp.Content
For IPv6:
&001
这将给你一个变量,如果你有什么特定的事情要做,可以用它来做。我实际上是用这个来建立一个脚本,定期上传我的路由器的动态IP,让另一台机器每隔一段时间测试一次,然后用最新的IP来更新DNS,如果它改变了,我就可以通过使用一个名字从任何地方访问我的设备,而不是不断地追寻IP。:)
我在几个月前做了这个批处理脚本:
@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%
。
SIMPLER METHOD:
现在,我就用这个来代替:
curl icanhazip.com
或者………..把当前的公共IP地址放到剪贴板中。
没有第三方程序在Windows上很难,因为Telnet不是默认提供的,但是,如果有的话(XP)或打开了(Windows Vista以上),只需输入:
telnet curlmyip.com 80
,屏幕上就会闪烁,你会得到一个光标….. 接下来输入:
GET
………..然后你会看到头像,后面是你的IP(很抱歉我把它模糊了,只是显示出它的位置! ):
其他的答案显然也可以用,但是,我只是想把问题放在可以在任何窗口上使用的东西上,不需要第三方程序!
对于Windows Vista及以上的系统,你可以通过Programs and features
轻松(安全)地安装telnet,或者使用下面的命令:
pkgmgr /iu:”TelnetClient”
试试这个: 不需要安装任何形式的外部软件。
@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));
}
我希望有一个可以在不安装第三方工具的情况下为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
在任务调度器中,你可以创建一个新的任务。在Trigger中,你可以使用设置每1天每天,在高级选项下,你可以选择每小时立即执行。同时在设置中勾选在错过了预定的启动时间后尽快运行任务。在Action下粘贴上面的执行代码。
这个powershell代码可以优化一下,因为我不是powershell大师(我是第一次使用)。现在我测试一下这个脚本是否每小时调用一次。
ipchicken.com将返回您的表面上的IP地址的文本格式,如果你可以解析返回的HTML,你提取你的路由器的外部IP。另外,你可以安装一个动态DNS代理,更新您的外部IP到FQDN,然后只需做nslookup在您的FQDN上看到您当前的IP号。以前有免费的,比如DynDNS,但现在大多数都需要付费订阅。