我如何知道我的外部IP地址是什么?
我的电脑坐在路由器/防火墙后面。 我如何以编程方式找出我的外部IP地址是什么。 我可以使用http://www.whatsmyip.org/进行临时查询,但是TOS不允许自动检查。
有任何想法吗?
http://ipecho.net/plain似乎是一个可行的select,因为whatismyip.com现在需要自动链接的会员资格。; 他们非常友善地似乎提供这项服务是免费的,所以请不要滥用它。
不幸的是,有没有简单的方法来做到这一点。
我会使用像www.whatsmyip.org这样的网站,并parsing输出。
checkip.dyndns.com返回一个非常简单的HTML文件,如下所示:
<html> <head> <title>Current IP Check</title> </head> <body> Current IP Address: 84.151.156.163 </body> </html>
这应该很容易parsing。 而且该网站已经存在了大约十年。 有希望,这将是一段时间左右。
如果你有modphp访问web服务器,你可以推出自己的:
<?php print $_SERVER['REMOTE_ADDR']; ?>
如果你不想被滥用,你必须保密或者增加请求限制。
我一直在我的服务器上使用多年。
明确:
在你的网站的public_html文件夹中创build一个名为whatismyip.php的文件。 它可以被称为任何东西,并在您的webroot任何地方。
添加上面的行,然后查询您的服务器:
curl http://example.com/whatismyip.php
例如。
不幸的是截至2013年,whatismyip.com收取服务费用。
http://www.icanhazip.com 3年后依然强劲。 只输出IP作为文本,绝对没有别的。
http://checkip.dyndns.org仍然有效。;
您也可以使用谷歌,如果你想确保它不会停止,但它仍然可以阻止你违反TOS。
https://www.google.ie/search?q=whats+is+my+ip
但即使他们阻止我,他们仍然告诉我我的客户端IP地址在错误信息。
如果您所在的路由器说UPnP,则可以随时使用UPnP库来查找路由器的外部IP。
curl ifconfig.me
要么
curl ifconfig.me/ip
Incase你没有curl安装,
wget ifcondig.me/ip 2>/dev/null && cat ip
希望这可以帮助。
http://myexternalip.com提供这种信息。; 要检索您的IP,您有很多select:
- http://myexternalip.com/ – 浏览器+很多关于如何使用它的例子
- http://myexternalip.com/raw – 一个纯文本的答案,只有你的IP,没有其他废话
- http://myexternalip.com/json – 为jsonparsing器准备的resposnse,也支持jsonp
- HEAD http://myexternalip.com – 只发送HEAD请求并获得答案
另一种方法是,如果你有机会获得一个云电子邮件(雅虎,谷歌,Hotmail的),发送自己的电子邮件。 然后查看标题,你应该看到你的IP地址。
我会查找确切的区域,但标题可能会有所不同,每个implmentation,寻找收件人,并跟随,直到你看起来像发送的东西
编辑:这回答如何findIP地址,而不是通过PROGRAMMATIC方法
我的WRT54G路由器告诉我通过其本地路由器访问function(httppipe理界面),我想象一下类似的可以做许多其他设备。 在这种情况下,入口页面在包含这个短语的四行中给出了IPv4地址的八位字节:
class = num maxLength = 3 size = 3 value ='i'name ='wan_ipaddr_ N'id ='wan_ipaddr_ N '
其中, i是八位组的值, N是八位组的数字。 这位打油诗为我提取并parsing它,cygwin提供:
#! /usr/bin/env perl use strict; use warnings 'all'; my( $account, $password ) = @ARGV; open QUERY, "curl --sslv3 --user '$account:$password' https://Linksys/ --silent |" or die "Failed to connect to router"; my @ipaddr = ('x','x','x','x'); while( <QUERY> ) { $ipaddr[$2] = $1 if /value='(\d+)' name='wan_ipaddr_([0-3])/; } close QUERY; print join('.', @ipaddr);
这不能保证这将适用于所有版本的路由器固件。
如果您的路由器设置为使用http接口,请删除–sslv3 curl选项,您可以使用点分十进制表示法来寻址路由器。 要使用上面的curl选项的https,我也这样做了:
-
使用浏览器获取路由器的自签名证书(保存为Linksys.crt)。
-
将其添加到我的CA软件包:
openssl x509 -in Linksys.crt -text >> /usr/ssl/certs/ca-bundle.crt
- 添加“Linksys”到我的主机文件(C:\ Windows \ System32 \ Drivers \ etc \ HOSTS在我的Win8框),作为路由器的地址的别名。 如果为curl而不是此别名提供点分十进制记法,则由于证书主题名称不匹配而拒绝连接。
或者,您可以使用–insecure选项绕过证书validation,这在情况下可能更有意义。
whatismyip.com或ipchicken.com很容易parsing。
如果你有一个虚拟主机或虚拟主机,你也可以确定它,而不用担心它随机下降让你卡住。
ifcfg.me允许通过查找
NSLOOKUP
远程login
FTP
和http
甚至可以使用IPv6
由于这个问题后来被问到,现在有一个免费提供的Web服务,专门用来允许您以编程方式确定您的IP地址,称为ipify 。
$ curl 'https://api.ipify.org?format=json'
结果是
{"ip": "1.2.3.4" /* your public IP */}
简单但不优雅的用途。 我安装了一些安全摄像机,而我的有线电视提供商 – Wide Open West或WOWWAY每个月要10美元来设置一个静态的IP-EXTORTION用于DHCP保留…所以,我用下面的代码创build了一个VBS文件, Dropbox和谷歌驱动器…必须删除文件新的同步,虽然由于某种原因。
这在我家的个人电脑上运行。 我的电脑设置为在停电时恢复运行,并且计划每天运行一次(请注意,如果您经常运行,该站点将阻止您的请求)。
现在我可以在路上看到我的IP地址,看着人们偷我的东西:-)
get_html "http://ipecho.net/plain", "C:\Users\joe\Google Drive\IP.html" get_html "http://ipecho.net/plain", "C:\Users\joe\Dropbox\IP.html" sub get_html (up_http, down_http) dim xmlhttp : set xmlhttp = createobject("msxml2.xmlhttp.3.0") xmlhttp.open "get", up_http, false xmlhttp.send dim fso : set fso = createobject ("scripting.filesystemobject") dim newfile : set newfile = fso.createtextfile(down_http, true) newfile.write (xmlhttp.responseText) newfile.close set newfile = nothing set xmlhttp = nothing end sub