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. cv python 样例_【CV实战】OpenCV—Hello world代码示例
  2. send(),recv()函数详解
  3. Spring boot项目整合Hadoop的HDFS
  4. SAP云平台里两种类型的WebIDE
  5. 熊吃人该不该杀?这头3米高的大熊吃了7个人,还在洞里藏了很多女人用的东西.........
  6. Linux启动更新命令,Linux更新和查询命令chkconfig详细介绍
  7. go语言和java比_闲话Python, Go, Java
  8. 数组中的键值对去重_javascript利用对象键值对中键的唯一性实现数组去重
  9. 如何优雅的使用iBatis
  10. 7、乐趣国学—趣谈“圣贤”
  11. python:植物大战僵尸源代码
  12. VMware虚拟机安装win10 32位
  13. android软件音量控制
  14. 凸优化极简笔记(三):椭圆方程的矩阵形式
  15. 2017已经接近尾声,然而我却什么都没干成
  16. Daytime服务器
  17. 示波器的使用及其原理
  18. eoLinker-AMS接口管理系统 项目管理教程
  19. 趣图:菜鸟多线程 vs 老鸟多线程
  20. 从Flash中导出透明背景的GIF动画

热门文章

  1. 月薪25-80K丨一汽(南京)招聘雷达感知开发工程师、主管、主任、高级主任
  2. undistortPoints()函数用法总结
  3. 编程实现灰度处理函数
  4. ICML2020 | 神经网络的图结构如何影响其预测性能?
  5. 3d旋转相册代码源码_如何使用CSS开发精美3D旋转相册?
  6. MPB:林科院袁志林组-巢式PCR检测植物组织痕量内生真菌的方法及其引物
  7. MPB:南农韦中组-​铁载体对根际细菌互作效应的介导作用研究方法
  8. ISME:污水厂抗性组受细菌组成和基因交换驱动且出水中抗性表达活跃
  9. 植物微生物组培养与重组技术:从描述性研究走向功能性研究
  10. 计算机专业教育,科学网—中国大学计算机教育路在何方? - 吴军的博文