在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打开浏览器的调试工具
很容易发现这个地址,打开后就是