如何找出我的外部 IP 地址是啥?

Posted

技术标签:

【中文标题】如何找出我的外部 IP 地址是啥?【英文标题】:How do I find out what my external IP address is?如何找出我的外部 IP 地址是什么? 【发布时间】:2010-11-11 20:48:13 【问题描述】:

我的计算机位于路由器/防火墙后面。如何以编程方式找出我的外部 IP 地址是什么。我可以使用 http://www.whatsmyip.org/ 进行临时查询,但 TOS 不允许自动检查。

有什么想法吗?

【问题讨论】:

+1 尊重 TOS! 如果您不拥有正在使用的服务器,您需要确保在真正投入项目之前,您可以访问网络外部的主机。 你不能,因为通常一台计算机可能有几个 IP(或者没有,如果你的HTTP请求通过代理) 【参考方案1】:

http://ipecho.net/plain 似乎是一个 可行的替代方案,因为 whatismyip.com 现在需要会员资格 他们的自动链接。他们看起来很友善 offering此服务免费, 所以请不要滥用它。

【讨论】:

有关为什么这是首选方式的更多信息:whatismyip.com/automation whatismyip 现在对这项服务收费。您可以通过whatismyip.com/membership-options了解更多信息【参考方案2】:

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

我会使用像 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>

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

【讨论】:

很遗憾,DynDns 服务只能在您使用他们的服务时使用 (dyn.com/support/developers/checkip-tool)。 我确实用过这个。在大多数语言中很容易解析——在 Python 中,只需一行代码即可删除所有额外的代码行(filebuffer[before:-after] 其中 before 和 after 是之前和之后的字符数,并且是常量.) @IvanMesic,您无需使用他们的任何服务即可使用本网站。【参考方案3】:

如果您可以使用 modphp 访问网络服务器,您可以自己滚动:

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

如果您不希望它被滥用,则必须对其保密或添加请求限制。

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

明确:

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

添加上面的行,然后查询你的服务器:

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

例如。

【讨论】:

几年前我在我的服务器上添加了一个这样的脚本,它非常有用。其他一切都是奇怪的矫枉过正。 但是我们很懒惰,这就是为什么我们正在寻找一些快速的东西!【参考方案4】:

不幸的是,从 2013 年开始,whatismyip.com 对该服务收费。

http://www.icanhazip.com 3 年后依然强劲。只是将 IP 输出为文本,没有别的。

http://checkip.dyndns.org 仍然有效。

如果您想确保它不会出现故障,您也可以使用 Google,但它仍然可以阻止您违反 TOS。

https://www.google.ie/search?q=whats+is+my+ip

但即使他们阻止了我,他们仍然会在错误消息中告诉我我的客户端 IP 地址。

【讨论】:

【参考方案5】:
curl ifconfig.me

curl ifconfig.me/ip

如果你没有安装 curl,

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

希望这会有所帮助。

【讨论】:

【参考方案6】:

如果您后面的路由器使用 UPnP,您可以随时使用 UPnP 库来为您开发的任何语言查询路由器的外部 IP。

【讨论】:

【参考方案7】:

http://myexternalip.com 提供此类信息。到 检索您的 IP 您有很多选择:

http://myexternalip.com/ - 浏览器 + 大量使用示例 http://myexternalip.com/raw - 纯文本答案,只有你的 ip,没有其他废话 http://myexternalip.com/json - 为 json-parsers 准备的响应,也支持 jsonp HEAD http://myexternalip.com - 仅发送 HEAD 请求并获得答案

【讨论】:

【参考方案8】:

自从不久前有人问过这个问题以来,现在有一个免费提供的网络服务,专门用于让您以编程方式确定您的 IP 地址,称为ipify。

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

结果

"ip": "1.2.3.4" /* your public IP */

【讨论】:

【参考方案9】:

另一种方法是,如果您可以访问云电子邮件(雅虎、谷歌、hotmail),请给自己发送电子邮件。然后查看标头,您应该会在其中看到您的 IP 地址。

我会查找确切的区域,但标题可能因每个实施而异,查找接收者并按照该区域进行操作,直到找到类似于发送者的内容

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

【讨论】:

这是一个效率极低的想法。 可能效率低下,但如果您在锁定的工作站上并且无法访问外部设备,则可以使用另一种方法。【参考方案10】:

我的 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
    
    在我的主机文件(我的 Win8 机器上的 C:\Windows\System32\Drivers\etc\HOSTS)中添加了“Linksys”,作为路由器地址的别名。如果 curl 使用点分十进制表示法而不是此别名,则会由于证书使用者名称不匹配而拒绝连接。

或者,您可以只使用 --insecure 选项绕过证书验证,这在这种情况下可能更有意义。

【讨论】:

【参考方案11】:

whatismyip.com 或 ipchicken.com 非常容易解析。

如果您有虚拟主机或 vps,您也可以确定它,而不必担心它会随机关闭而让您卡住。

【讨论】:

【参考方案12】:

ifcfg.me 允许查找通过

nslookup 远程登录 ftp 和http

甚至适用于 IPv6

【讨论】:

【参考方案13】:

这种用法简单但不优雅。我使用以下代码创建了一个 VBS 文件,以将结果拖放到保管箱和谷歌驱动器......尽管出于某种原因,必须删除该文件以供新文件同步。

这在我家的 PC 上运行。我的电脑设置为在停电时恢复,并且计划每天运行一次此任务(请注意,如果您经常运行它,该站点将阻止您的请求)。

现在我可以在路上获取我的 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

【讨论】:

以上是关于如何找出我的外部 IP 地址是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 STUN 请求中获取我的外部 IP 地址和外部端口号?

我的 Heroku 应用程序的 IP 地址是啥

使用 Python 查找网络(外部)IP 地址

如何从 phpmyadmin 中找出 mySQL 服务器的 IP 地址

在 C# 中通过远程处理获取外部 IP 地址

如何访问我的IIS服务器? (查找我的ISS IP地址)