JAVA获取公网ip

在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 }

原文地址:https://www.cnblogs.com/pojdd/p/8647615.html

时间: 2024-08-28 23:23:52

JAVA获取公网ip的相关文章

java 获取公网(外网IP)很实用!

package com.lovo.util; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class PublicInterIp { /** * @param args * @throws Exception */ public S

Linux学习之命令行获取公网IP方法详解

本文和大家分享的主要是主要是linux命令行获取公网IP相关内容,一起来看看吧,希望对大家学习linux有所帮助. curl ipinfo.io $ curl ipinfo.io { "ip": "36.10.25.4", "city": "Hangzhou", "region": "Zhejiang", "country": "CN", &quo

C#联机获取公网IP

C#获取IP的方式有很多种,这里通过http://www.ipip.net/这个稳定的在线IP库的来获取公网IP. 1 string tempip = "0.0.0.0"; 2 WebRequest wr = WebRequest.Create("http://www.ipip.net/"); 3 Stream s = wr.GetResponse().GetResponseStream(); 4 if (s != null) 5 { 6 StreamReader

自动获取公网ip的脚本

随手写了一个获取公网IP的脚本,其实主要是区分""和``的区别 #!/bin/bash ip_add=`curl -s -4 icanhazip.com` echo "public IP:$ip_add " 在/bin/bash中以上赋值""是取一个字符串的,而``取得是指令运行后的字符串的,当然也可以在此基础上可以运用到iptables,DNS等等的一些脚本里

python从淘宝ip库中获取公网ip的信息

看到一个题目:  从ip.taobao.com中获取公网ip的信息 分析: 1.生成公网IP地址: 2.根据ip.taobao.com返回的代码,用json解析 下面是淘宝的接口说明 ''' 接口说明 1. 请求接口(GET): http://ip.taobao.com/service/getIpInfo.php?ip=[ip地址字串] 2. 响应信息: (json格式的)国家 .省(自治区或直辖市).市(县).运营商 3. 返回数据格式: {"code":0,"data&q

java获取客户端IP地址和MAC地址

最近项目中要获得客户端的mac地址.服务端是移植的centos系统,arm架构的盒子.客户端是手机和移动设备.(其它场景应该也是类似的) 首先要获得ip地址: 根据客户端的http请求,利用request.getRemoteAddr()获取客户端Ip地址.在局域网内getRemoteAddr()和getRemoteHost()获得的结果相同.request.getRemoteAddr()是获得客户端的ip地址 .getRemoteHost()是获得客户端的主机名 .在有些场景中,可能有Squid

正则获取公网IP信息

因工作需求,需要用到获取公网IP信息: echo  $(curl -s http://txt.go.sohu.com/ip/soip)|  grep -P -o -i "(\d+\.\d+.\d+.\d+)"

关于java获取本地ip的几种方法

关于java获取本地ip的几种方法1.获取本地ip的方法 System.out.println(InetAddress.getLocalHost().getHostAddress()); 2.域名解析ip的方法 System.out.println(InetAddress.getByName("www.sina.com.cn")); 3.获取本地出口ip的方法(局域网NAT或本地找交换机出口ip的方法) 建立通讯TCP,telnet,mina通讯等. Socket client = n

.Net一个很有用的帮助类,包含获取获取浏览器版本号、 获取操作系统版本号、获取客户端IP地址、取客户端真实IP、获取公网IP、判断是否是IP格式

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Text.RegularExpressions;using System.Threading.Tasks;using System.Web; namespace ZC.Common.Log{    class UserHelper    { #region 获取浏览器版本号 /// <summary>