1. 程式人生 > >JAVA獲取公網ip

JAVA獲取公網ip

for 百度搜索 writer 不能 cep length 是我 沒有 form

在ipv4地址稀缺的今天,分配到公網ip幾乎是不可能的,但是我撥號之後的ip竟然是公網IP。

將自己的電腦作為服務器·,做點好玩的程序,就成為了可能。

由於運營商的ip是動態分配的公網ip的所以就需要做一個動態解析。

但是又沒有服務器,應該怎麽辦呢?

思路是首先服務端獲取公網ip,將IP加密後作為文章發布到莫個知名論壇上。客戶端通過查詢這篇文章,並解密來獲取ip

這樣就可以實現動態解析了

由於電腦還加了個路由器,所以不能直接獲取公網ip,此時就需要借助第三方網站了。

百度搜索ip會出現

技術分享圖片

通過分析找到了關鍵地址

http://2017.ip138.com/ic.asp

技術分享圖片

這個網頁非常簡潔,包含ip和地址

通過爬取這個地址即可獲得公網ip

 1 package 動態ip發布;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.FileWriter;
 5 import java.io.IOException;
 6 import java.io.InputStreamReader;
 7 import java.io.PrintWriter;
 8 import java.net.MalformedURLException;
 9 import java.net.URL;
10 import java.net.URLConnection;
11 12 public class Main { 13 public static void main(String args[]) { 14 System.out.println(getip.publicip()); 15 } 16 } 17 class getip { 18 public static String publicip() { 19 URL url = null; 20 URLConnection urlconn = null; 21 BufferedReader br = null;
22 try { 23 url = new URL("http://2017.ip138.com/ic.asp");//爬取的網站是百度搜索ip時排名第一的那個 24 urlconn = url.openConnection(); 25 br = new BufferedReader(new InputStreamReader( 26 urlconn.getInputStream())); 27 String buf = null; 28 String get= null; 29 while ((buf = br.readLine()) != null) { 30 get+=buf; 31 } 32 int where,end; 33 for(where=0;where<get.length()&&get.charAt(where)!=‘[‘;where++); 34 for(end=where;end<get.length()&&get.charAt(end)!=‘]‘;end++); 35 get=get.substring(where+1,end); 36 return get; 37 } catch (MalformedURLException e) { 38 e.printStackTrace(); 39 } catch (IOException e) { 40 e.printStackTrace(); 41 } finally { 42 try { 43 br.close(); 44 } catch (IOException e) { 45 e.printStackTrace(); 46 } 47 } 48 return null; 49 } 50 }

JAVA獲取公網ip