在ipv4地址稀缺的今天,分配到公网ip几乎是不可能的,但是我拨号之后的ip竟然是公网IP。
将自己的电脑作为服务器·,做点好玩的程序,就成为了可能。
由于运营商的ip是动态分配的公网ip的所以就需要做一个动态解析。
但是又没有服务器,应该怎么办呢?
思路是首先服务端获取公网ip,将IP加密后作为文章发布到莫个知名论坛上。客户端通过查询这篇文章,并解密来获取ip
这样就可以实现动态解析了
由于电脑还加了个路由器,所以不能直接获取公网ip,此时就需要借助第三方网站了。
百度搜索ip会出现
通过分析找到了关键地址
http://2017.ip138.com/ic.asp
这个网页非常简洁,包含ip和地址
通过爬取这个地址即可获得公网ip
package 动态ip发布; import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection; public class Main {
public static void main(String args[]) {
System.out.println(getip.publicip());
}
}
class getip {
public static String publicip() {
URL url = null;
URLConnection urlconn = null;
BufferedReader br = null;
try {
url = new URL("http://2017.ip138.com/ic.asp");//爬取的网站是百度搜索ip时排名第一的那个
urlconn = url.openConnection();
br = new BufferedReader(new InputStreamReader(
urlconn.getInputStream()));
String buf = null;
String get= null;
while ((buf = br.readLine()) != null) {
get+=buf;
}
int where,end;
for(where=0;where<get.length()&&get.charAt(where)!='[';where++);
for(end=where;end<get.length()&&get.charAt(end)!=']';end++);
get=get.substring(where+1,end);
return get;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
}
更新:
有园友对文章有些疑问
下面进行补充
如上图可以看到下面有一个链接,打开后是
按F12打开浏览器的调试工具
很容易发现这个地址,打开后就是
http://2018.ip138.com/ic.asp