2009-07-17 265 views
40

我的电脑坐在路由器/防火墙后面。如何以编程方式查明我的外部IP地址是什么。我可以使用http://www.whatsmyip.org/进行临时查询,但TOS不允许进行自动检查。我如何知道我的外部IP地址是什么?

任何想法?

+13

+1尊重的TOS! – RichieHindle 2009-07-17 22:57:16

+0

如果你没有拥有你正在使用的服务器,那么你需要确保你有权访问网络之外的主机,然后才能真正投入到项目中。 – 2009-07-18 02:55:54

回答

45

http://ipecho.net/plain似乎是一个 可行的替代方案,因为whatismyip.com现在需要其成员的自动链接 。他们非常友善地为 offering这项服务免费,所以请不要滥用它。

+2

有关为什么这是首选方式的详细信息: http://www.whatismyip.com/automation – Justin 2009-07-17 22:23:37

+0

whatismyip现在收取此服务。你可以在http://www.whatismyip.com/membership-options/找到更多信息。 – RyanfaeScotland 2013-01-18 11:59:16

+0

http://www.ipveg.com不需要任何身份验证或任何限制 – 2013-12-23 09:21:44

12

不幸的是,没有简单的方法来做到这一点。

我会使用像www.whatsmyip.org这样的网站并解析输出。

checkip.dyndns.com返回一个非常简单的HTML文件,该文件是这样的:

<html> 
    <head> 
    <title>Current IP Check</title> 
    </head> 
    <body> 
    Current IP Address: 84.151.156.163 
    </body> 
</html> 

这应该是很容易解析。 此外,该网站存在了大约十年。有希望它会在一段时间左右。

+0

不幸的是,DynDns服务仅在您使用其服务时才能使用(http://dyn.com/support/developers/checkip-tool/)。 – 2013-06-30 17:27:12

+0

我确实使用它。在大多数语言中解析起来非常简单 - 在Python中,它是一行代码,用于删除所有额外的代码行(filebuffer [before:after],其中前后是字符数,常量。)@IvanMesic,你不必使用他们的任何服务来使用这个网站。 – JFA 2013-11-15 16:53:26

0

whatismyip.com或ipchicken.com很容易解析。

如果你有一个虚拟主机或虚拟主机,你也可以确定它,而不用担心它随机下降让你卡住。

11

如果你有机会与modphp一个Web服务器,你可以滚你自己:

<?php print $_SERVER['REMOTE_ADDR']; ?> 

如果你不希望让受虐待,你必须保守秘密或添加请求限制。

我一直在我的服务器上使用多年。

明确:

创建一个在您的网站上的public_html文件夹,名为whatismyip.php文件。它可以被称为任何东西,并可以在你的webroot中的任何地方。

添加上面的线,然后查询您的服务器:

curl http://example.com/whatismyip.php 

例如。

+0

我在几年前向服务器添加了一个像这样的脚本这是非常有用的。其他一切都是奇怪的矫枉过正。 – JAL 2009-07-18 15:10:20

+1

但我们很懒,这就是为什么我们在寻找快速的东西! – georgiecasey 2013-07-26 18:42:16

1

另一种方法是,如果您有权访问云电子邮件(yahoo,google,hotmail),请发送电子邮件给自己。然后查看标题,你应该看到你的IP地址。

我会查找确切的区域,但标题可以从每个implmentation变化,寻找接收,通过并按照直到你得到的东西,看起来像是发自于

编辑:这回答了如何找到IP地址,而不是通过PROGRAMMATIC方法

+3

这是一个非常低效的想法。 – 2009-07-18 02:54:47

+0

可能效率不高,但如果您在锁定的工作站上,并且无法使用您可能使用的另一种方法访问外部设备。 – Wayne 2009-07-18 03:00:53

2

如果你在后面的路由器说UPnP,你可以随时使用UPnP库来查询路由器的外部IP。

1

我的WRT54G路由器通过其本地路由器访问功能(http管理界面)告诉我,我想象一下类似的事情可以用许多其他设备完成。在这种情况下,条目页给出了IPv4地址的八位位组中包含该短语四行:

类= NUM​​最大长度= 3尺寸= 3的值=“‘名称=’wan_ipaddr_ Ñ”身份证=“wan_ipaddr_ ñ

是该八位位组值和ñ是八位位组数。顺口溜该位获取并分析它对于我来说,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选项,并且您可以使用点分十进制表示法来寻址路由器。为了与卷曲以上选项使用https,我也这样做:

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

  2. 把它添加到我的CA包:

    openssl x509 -in Linksys.crt -text >> /usr/ssl/certs/ca-bundle.crt 
    
  3. 新增 'Linksys的' 我的hosts文件(C:\ WINDOWS \ SYSTEM32 \ DRIVERS \我的Win8盒等\主机),为的别名路由器的地址。如果为curl指定了点分十进制符号而不是此别名,则会因证书主题名称不匹配而拒绝连接。

或者,您可以使用--insecure选项绕过证书验证,这可能会使情况更加合理。

2
curl ifconfig.me 

curl ifconfig.me/ip 

柜面你没有卷曲安装,

wget ifconfig.me/ip 2>/dev/null && cat ip 

希望这有助于。

-1

简单但不优雅的用途。我安装了一些安全摄像机和我的有线电视提供商 - Wide Open West或WOWWAY,每个月需要10美元来设置一个静态IP-EXTORTION用于DHCP预留......所以,我创建了一个带有以下代码的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 
0

ifcfg.me 允许查找通过

NSLOOKUP
的telnet
FTP
和http

即使适用于IPv6

2

由于这个问题后来被问到,现在有一个免费的可用Web服务,专门用于允许您以编程方式确定您的IP地址,称为ipify

$ curl 'https://api.ipify.org?format=json' 

结果

{"ip": "1.2.3.4" /* your public IP */} 
相关问题