2010-03-30 121 views
0

我設置了一個靜態IP並在我的筆記本上做了端口轉發,現在我有一個靜態IP地址,但它相對靜態,每當我重新啓動機器,我得到另一個地址,並且由於我有一個「靜態「IP我現在可以做PayPal IPN消息。但是我怎樣才能從我的Java程序中獲得這個靜態IP?我能想到的一種方式是訪問:http://portforward.com/,並在該頁面上告訴我我的外部IP是什麼,所以我可以使用Java代碼提取它,是否有任何其他方式可以在我的Java代碼中獲得此信息?端口轉發後,如何讓我的外部IP在Java?

回答

1

最好的解決辦法可能是dynamic DNS。本質上,您在計算機(或路由器)上運行程序,以便在IP更改時通知DNS服務器。然後,你可以告訴PayPal域名。

0

我看到這樣的三種方式:

  1. 當你發現,查詢什麼IP你顯然是從連接外部服務器。這很簡單,但您需要這樣的服務才能使用,並且通常情況下,沒有透明的代理會混淆您的結果。
  2. IGD是UPnP的一個子協議,如果你的端口轉發設備支持它,很容易給你結果(很多)。谷歌「IGD JAVA」用於圖書館和樣品。
  3. 註冊一個動態DNS服務,然後查找您自己的DNS名稱。
+0

如何「註冊動態DNS服務」?我需要打電話給我的ISP,安裝一個程序,它是免費的嗎? – Frank 2010-03-30 15:04:30

+0

最簡單的方法是,您只需註冊一個動態DNS服務(例如http://www.dyndns.com/services/dns/dyndns/)並使用他們必須更新您的真實IP的任何機制。大多數(如果不是全部的話)服務提供了一個小工具,您可以運行它來自動更新您的動態DNS名稱。 DynDNS的服務最多可免費使用5個主機名稱。 – 2010-03-30 15:16:01

+0

@Matt:謝謝,非常有幫助!我有點困惑,因此我甚至不需要建立一個靜態IP並進行端口轉發,只需轉到dyndns.com/services/dns/dyndns並註冊他們的服務並運行它們軟件,它會自動發送我的動態地址到我的註冊名稱?設置靜態IP並將其轉發給我自己的目的是什麼? – Frank 2010-03-30 16:00:05

0

可以使用NetworkInterface類:

Enumeration<NetworkInterface> ifcs = NetworkInterface.getNetworkInterfaces(); 
while(ifcs.hasMoreElements()){ 
    NetworkInterface ifc = ifcs.nextElement(); 
    System.out.println("Adresses of: "+ifc.getDisplayName()); 
    Enumeration<InetAddress> adresses = ifc.getInetAddresses(); 
    while(adresses.hasMoreElements()){ 
    System.out.println(adresses.nextElement().getHostAddress()); 
    } 
} 

這個片段將顯示所有接口,並綁定到這些綜合方案的。您需要查看列表以查找適當的接口(另請參閱NetworkInterface.getByName(String name))然後查看該接口的地址。一旦找到合適的InetAdress,就可以使用它來獲取字符串或字節表示。

+1

這將返回本地地址,而不是公共地址。 – 2010-07-12 05:36:07

1

有一個公共服務,您可以通過腳本調用以檢索您的外部IP地址。請記住,他們已經改變了鏈接位置一次。如果你控制自己的服務器,你應該編寫你自己的PHP腳本來簡單地將調用者的地址返回給腳本。

http://www.whatismyip.com/faq/automation.asp - 按照開發商聯繫,他們提供

import java.net.*; 
import java.io.*; 

URL myExternalIP = new URL("PUT THE LINK HERE"); 
BufferedReader in = new BufferedReader(new InputStreamReader(
       myExternalIP.openStream())); 

String ip = in.readLine(); //you get the IP as a String 
System.out.println(ip); 

自己的服務器腳本是一個簡單的一行。創建一個名爲whatismyip.php的文件,這裏是內容。

<? echo $_SERVER['REMOTE_ADDR']?>