我的电脑正坐在路由器/防火墙后面。如何以编程方式找出我的外部IP地址。我可以使用http://www.whatsmyip.org/进行即席查询,但TOS不允许自动检查。
有什么想法吗?
答案 0 :(得分:46)
http://ipecho.net/plain似乎是一个 可行的替代方案,因为whatismyip.com现在需要会员资格 他们的自动链接。他们非常善良 offering此服务免费, 所以请不要滥用它。
答案 1 :(得分: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>
这应该很容易解析。 此外,该网站存在了大约十年。 希望它会存在一段时间。
答案 2 :(得分:11)
如果您可以访问带有modphp的网络服务器,您可以自己动手:
<?php print $_SERVER['REMOTE_ADDR']; ?>
如果您不希望被滥用,则必须保密或添加请求限制。
我多年来一直在我的服务器上使用它。
显式:
在您网站的public_html文件夹中创建名为whatismyip.php的文件。它可以被称为任何东西,并且可以在你的webroot中的任何地方。
添加上面的行,然后查询您的服务器:
curl http://example.com/whatismyip.php
例如。
答案 3 :(得分:6)
不幸的是,截至2013年,whatismyip.com对该服务收费。
3年后,http://www.icanhazip.com仍然强劲。只需输出IP作为文本,绝对没有别的。
http://checkip.dyndns.org仍然有效。
如果你想确保它不会失效,你也可以使用谷歌,但它仍然可以阻止你违反TOS。
https://www.google.ie/search?q=whats+is+my+ip
但即使他们阻止我,他们仍然会在错误消息中告诉我我的客户端IP地址。
答案 4 :(得分:3)
curl ifconfig.me
或
curl ifconfig.me/ip
如果您没有安装curl,
wget ifconfig.me/ip 2>/dev/null && cat ip
希望这有帮助。
答案 5 :(得分:2)
如果您所在的路由器说UPnP,您可以随时使用UPnP库来处理您正在开发的任何语言,以查询路由器的外部IP。
答案 6 :(得分:2)
http://myexternalip.com提供此类信息。至 检索你的IP你有很多选择:
答案 7 :(得分:2)
由于此问题曾被问过,现在有一个免费提供的网络服务,专门用于以编程方式确定您的IP地址,称为ipify。
$ curl 'https://api.ipify.org?format=json'
结果
{"ip": "1.2.3.4" /* your public IP */}
答案 8 :(得分:1)
另一种方法是,如果您可以访问云电子邮件(yahoo,google,hotmail),请给自己发送电子邮件。然后查看标题,您应该在那里看到您的IP地址。
我会查找确切的区域,但标题可能会因每个项目不同而有所不同,查找收件人并按照这一点进行操作,直到找到看似发送的内容
编辑:这回答了如何找到IP地址,而不是通过PROGRAMMATIC方法
答案 9 :(得分:1)
我的WRT54G路由器通过其本地路由器访问功能(http(s)管理界面)告诉我,我想可以用许多其他设备完成类似的操作。在这种情况下,输入页面将包含此短语的四行中的IPv4地址的八位字节给出:
class = num maxLength = 3 size = 3 value =' i 'name ='wan_ipaddr_ N 'id ='wan_ipaddr_ N '
其中 i 是八位字节值, N 是八位字节数。 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与上面的curl选项一起使用,我也这样做了:
使用浏览器获取路由器的自签名证书(保存为Linksys.crt)。
将其添加到我的CA捆绑包中:
openssl x509 -in Linksys.crt -text >> /usr/ssl/certs/ca-bundle.crt
或者,您可以使用--insecure选项绕过证书验证,这可能在这种情况下更有意义。
答案 10 :(得分:0)
whatismyip.com或ipchicken.com很容易解析。
如果你有一个虚拟主机或vps,你也可以确定它,而不用担心它随机下降而让你陷入困境。
答案 11 :(得分:0)
答案 12 :(得分:-2)
简单但不优雅的用途。我安装了一些安全摄像头和我的有线电视提供商--Broad Open West或WOWWAY每月需要10美元来设置一个静态IP - EXTORTION用于DHCP保留...所以,我用以下代码创建了一个VBS文件,将结果删除dropbox和google drive ...由于某种原因,必须删除要同步的新文件。
这在我家的电脑上运行。我的电脑设置为在停电时恢复,并且计划每天运行一次任务(请注意,如果您经常运行,该站点将阻止您的请求)。
现在我可以在旅途中获取我的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