我如何知道我的外部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:

另一种方法是,如果你有机会获得一个云电子邮件(雅虎,谷歌,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,我也这样做了:

  1. 使用浏览器获取路由器的自签名证书(保存为Linksys.crt)。

  2. 将其添加到我的CA软件包:

     openssl x509 -in Linksys.crt -text >> /usr/ssl/certs/ca-bundle.crt 
  3. 添加“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