2009-07-17 117 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 */} 
相關問題