在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 }
更新:
有園友對文章有些疑問
下面進行補充
如上圖可以看到下面有一個鏈接,打開后是
按F12打開瀏覽器的調試工具
很容易發現這個地址,打開后就是
http://2018.ip138.com/ic.asp