在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