Java如何实现简单的whois查询

利用Java socket 实现根据IP地址查询该IP相关的.注册信息。

源代码直接下载:java_whois.zip

相关的两个类WhoisBean.java 和WhoisQuery.java 代码实现如下:

Java代码

import java.util.LinkedHashMap;

import java.util.List;

import java.util.Map;

import java.util.Map.Entry;

/**

*

* @author Michael sun

*/

public class WhoisQuery {

/**

*

* @param ip

*/

private void queryIpInfo(String ip) {

Map map = new LinkedHashMap();

try {

WhoisBean bean = new WhoisBean();

bean.setTimeout(0);

// bean.setServer("whois.apnic.net");

bean.setServer("whois.ripe.net");

bean.queryInfoByIp(ip);

List infoList = bean.getInfoList();

String value = "";

String key = "";

for (String infoTmp : infoList) {

String[] arr = infoTmp.split(":[ ]*");

if (arr.length > 1) {

key = arr[0];

value = arr[1];

} else {

value = arr[0].trim();

}

if (null == map.get(key)) {

map.put(key, "");

}

value = map.get(key) + value;

map.put(key, value);

}

} catch (Exception e) {

e.printStackTrace();

}

for (Entry entry : map.entrySet()) {

System.out.println(entry.getKey() + ":" + entry.getValue());

}

}

/**

* @param args

*/

public static void main(String[] args) {

String ip = "129.42.58.216";// "163.1.13.189";

WhoisQuery query = new WhoisQuery();

query.queryIpInfo(ip);

}

}

Java代码

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.io.PrintStream;

import java.net.Socket;

import java.util.ArrayList;

import java.util.List;

/**

* WhoisBean

* @author Michael sun

*/

public class WhoisBean {

/**

* server address

*/

private String server = "";

/**

* port

*/

private int port = 43;

/**

* timeout/minute

*/

private int timeout = 0;

/**

* infoList

*/

private List infoList = new ArrayList();

/**

* @param ip

* @throws Exception

*/

@SuppressWarnings("unchecked")

public void queryInfoByIp(String ip) throws Exception {

Socket theSocket = null;

BufferedReader br = null;

PrintStream ps = null;

int qryCount = 0;

while (qryCount < 5) {

qryCount++;

try {

theSocket = new Socket(server, port);

theSocket.setSoTimeout(timeout * 1000);

ps = new PrintStream(theSocket.getOutputStream());

ps.println(ip);

br = new BufferedReader(new InputStreamReader(theSocket

.getInputStream()));

infoList.add("ip:" + ip);

String readLine = "";

int i = 0;

System.out.println("Whois query read start.... ");

while ((readLine = br.readLine()) != null) {

System.out.println("***" + readLine);

if (readLine.length() > 0 && readLine.charAt(0) != '%') {

infoList.add(readLine);

i++;

// 默认读取100行数据

if (i > 100 || readLine.startsWith("source")) {

break;

}

}

}

System.out.println("querylist size:" + infoList.size());

break;

} catch (Exception e) {

System.out.println("EXCEPTION : " + e);

} finally {

if (null != br) {

br.close();

}

if (null != ps) {

ps.close();

}

if (null != theSocket) {

theSocket.close();

}

}

}

}

/**

* @return the server

*/

public String getServer() {

return server;

}

/**

* @return the port

*/

public int getPort() {

return port;

}

/**

* @return the timeout

*/

public int getTimeout() {

return timeout;

}

/**

* @param pServer the server to set

*/

public void setServer(String pServer) {

server = pServer;

}

/**

* @param pPort the port to set

*/

public void setPort(int pPort) {

port = pPort;

}

/**

* @param pTimeout the timeout to set

*/

public void setTimeout(int pTimeout) {

timeout = pTimeout;

}

/**

* @return the infoList

*/

public List getInfoList() {

return infoList;

}

/**

* @param pInfoList the infoList to set

*/

public void setInfoList(List pInfoList) {

infoList = pInfoList;

}

}

运行WhoisQuery这个类就可以看到如下信息:

Java代码

Whois query read start....

***% This is the RIPE Database query service.

***% The objects are in RPSL format.

***%

***% The RIPE Database is subject to Terms and Conditions.

***% See http://www.ripe.net/db/support/db-terms-conditions.pdf

***

***% Note: This output has been filtered.

***% To receive output for a database update, use the "-B" flag.

***

***% Information related to '129.0.0.0 - 129.255.255.255'

***

***inetnum: 129.0.0.0 - 129.255.255.255

***netname: EU-ZZ-129

***descr: Various Registries

***country: EU # Country is really world wide

***remarks: These addresses were issued by

*** The IANA before the formation of

*** Regional Internet Registries.

***

***org: ORG-NCC1-RIPE

***admin-c: iana1-RIPE

***tech-c: iana1-RIPE

***status: ALLOCATED UNSPECIFIED

***mnt-by: RIPE-NCC-HM-MNT

***mnt-lower: RIPE-NCC-HM-MNT

***mnt-routes: RIPE-NCC-RPSL-MNT

***source: RIPE # Filtered

querylist size:17

ip:129.42.58.216

inetnum:129.0.0.0 - 129.255.255.255

netname:EU-ZZ-129

descr:Various Registries

country:EU # Country is really world wide

remarks:These addresses were issued byThe IANA before the formation ofRegional Internet Registries.

org:ORG-NCC1-RIPE

admin-c:iana1-RIPE

tech-c:iana1-RIPE

status:ALLOCATED UNSPECIFIED

mnt-by:RIPE-NCC-HM-MNT

mnt-lower:RIPE-NCC-HM-MNT

mnt-routes:RIPE-NCC-RPSL-MNT

source:RIPE # Filtered

【Java如何实现简单的whois查询】相关文章:

java whois_Java如何实现简单的whois查询相关推荐

  1. java代码实现一个简单ES条件查询

    1.导入es依赖 我使用的es是7.13.0的版本 <properties><elasticsearch.version>7.13.0</elasticsearch.ve ...

  2. AJAX for Java简单表数据查询实例

    AJAX for Java简单表数据查询实例<?XML:NAMESPACE PREFIX = O /> AJAX WebShop 3对Java开发具有良好的支持,同时也提供了各种层次的后台 ...

  3. java 航班_Java实现简单航班查询系统-Go语言中文社区

    #java实现简单航班管理系统 题目要求:声明一个Flight(航班)类,该类包含private域航班号(如:CA1430),起飞时间(如:10:15AM),到达时间(如:2:30PM).为该类声明合 ...

  4. 成绩查询系统源java代码_基于jsp的成绩查询系统-JavaEE实现成绩查询系统 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的成绩查询系统, 该项目可用各类java课程设计大作业中, 成绩查询系统的系统架构分为前后台两部分, 最终实现在线上 ...

  5. java中多条件与不定条件查询

    java中多条件与不定条件查询 网站或各类管理系统都会用到搜索,会用到一个或多个不确定条件搜索,单条件搜索比较简单,有时候会有多个条件共同查询,如果系统中已经提供了相关的方法供你使用最好,像我做这老系 ...

  6. Whois查询接口文档

    Whois查询接口文档 whois(读作"Who is",非缩写)是用来查询域名的IP以及所有者等信息的传输协议.简单说,whois就是一个用来查询域名是否已经被注册,以及注册域名 ...

  7. python安全攻防---信息收集---whois查询

    whois是用来查询域名的IP以及所有者信息的传输协议.简单地说,whois就是一个数据库,用来查询域名是否以及被注册,以及注册域名的详细信息(如域名所有人.域名注册商等). 使用whois查询,首先 ...

  8. java对mysql的简单操作的综合运用——登录+注册+修改密码

    本篇博客是java对mysql的简单操作的综合运用--登录系统.java对mysql的简单操作的综合运用--注册系统.java对mysql的简单操作的综合运用--修改密码系统的整合. 因为使用的是数据 ...

  9. java对mysql的简单操作——增删改查的总结

    增删改查的详细内容可以点击以下链接: java对mysql的简单操作--增加数据 java对mysql的简单操作--删除数据 java对mysql的简单操作--修改数据 java连接mysql5.1教 ...

最新文章

  1. 机器人瓦力船长机器人_警察“瓦力”来啦!机器人巡逻南京路 这样的它你喜欢吗?...
  2. java web应用解决乱码问题
  3. android path 详解
  4. 【译】Diving Into The Ethereum VM Part 2 — How I Learned To Start Worrying And Count The Storage Cost
  5. 会导致所有者权益减少的项目是_处置固定资产而发生的净损失为什么会导致所有者权益减少...
  6. jquery下载教程,Juery3.0框架使用案例以及基础语法;
  7. 使用模型压缩库Distiller遇到的问题
  8. sumo交通流仿真软件的使用说明
  9. 降噪提升动漫图片,人物照片等图片画质(分享)
  10. 养生的常见方法有哪些?
  11. WIN11 EDGE设置IE(internet explore)兼容相关
  12. MTK androiod5.1源码精简系统APP
  13. linux实验实训报告,linux实验实训报告.doc
  14. EasyNVS摄像机公网全终端无插件网页摄像机直播管理服务运行出现“请求服务不存在或已停止”
  15. MTO 和MaTO MMDTLZ
  16. vim E35: No previous regular expression
  17. Python爬取中原地产香港26281套在售二手房数据并分析
  18. 企业微信开发:获取 access_token(二)
  19. 卷子打印用什么软件,什么软件可直接扫描试卷打印
  20. 一个完整的产品专题页面策划思路是什么样子?

热门文章

  1. 一部手机,万物皆可复制粘贴,将AR玩出了新高度
  2. 关于OpenCV中常见函数用法总结
  3. linux 删除文件夹
  4. OpenCV数据结构与基本绘图(Mat 类、Point类、Scalar类等)
  5. RDKit | 基于RDKit输出分子结构图(Image)的方法
  6. Windows下有关NDK安装出现的问题的总结
  7. python mysql类里_Python MySql 操作类
  8. python acm 素数个数_湘潭大学OJ-1098求区间内素数个数问题
  9. 浙江大学医学院附属儿童医院倪艳组招聘博士后和科研助理-肠道微生物和代谢方向...
  10. 行业盛会!2018中国人体微生物组大会