当前位置: 首页 > 编程笔记 >

Java 根据网址查询DNS/IP地址

宰父桐
2023-05-05

直接上代码:

import java.io.IOException;
import java.net.*;
/**
 * 查找IP地址
 */
public class TestFindDNS {
  public static void main(String[] args) throws IOException {
    //
    String href = "http://www.cncounter.com/tools/shorturl.php";
    // 端口号
    int port = parsePort(href);
    // 域名
    String host = parseHost(href);
    // IP 地址
    String address = parseIp(host);
    //
    System.out.println("host=" + host);
    System.out.println("port=" + port);
    System.out.println("address=" + address);
  }
  /**
   * 获取端口号
   *
   * @param href 网址, ftp, http, nntp, ... 等等
   * @return
   * @throws IOException
   */
  public static int parsePort(String href) throws IOException {
    //
    URL url = new URL(href);
    // 端口号; 如果 href 中没有明确指定则为 -1
    int port = url.getPort();
    if (port < 0) {
      // 获取对应协议的默认端口号
      port = url.getDefaultPort();
    }
    return port;
  }
  /**
   * 获取Host部分
   *
   * @param href 网址, ftp, http, nntp, ... 等等
   * @return
   * @throws IOException
   */
  public static String parseHost(String href) throws IOException {
    //
    URL url = new URL(href);
    // 获取 host 部分
    String host = url.getHost();
    return host;
  }
  /**
   * 根据域名(host)解析IP地址
   *
   * @param host 域名
   * @return
   * @throws IOException
   */
  public static String parseIp(String host) throws IOException {
    // 根据域名查找IP地址
    InetAddress.getAllByName(host);
    InetAddress inetAddress = InetAddress.getByName(host);
    // IP 地址
    String address = inetAddress.getHostAddress();
    return address;
  }
}

根据IP获取地址

package test;
import net.sf.json.JSONObject;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class GetAddressByIp {
    public static void main(String[] args) {
        String resout = "";
        try {
            String str = getJsonContent("http://ip.taobao.com/service/getIpInfo.php?ip="+"138.30.25.101");
            System.out.println(str);
            JSONObject obj = JSONObject.fromObject(str);
            JSONObject obj2 =  (JSONObject) obj.get("data");
            String code = obj.get("code").toString();
            if(code.equals("0")) {
                resout =  obj2.get("country")+"--" +obj2.get("area")+"--" +obj2.get("city")+"--" +obj2.get("isp");
            } else {
                resout =  "IP地址有误";
            }
        } catch(Exception e) {
            e.printStackTrace();
            resout = "获取IP地址异常:"+e.getMessage();
        }
        System.out.println("result: " + resout);
    }
    public static String getJsonContent(String urlStr) {
        try {
            // 获取HttpURLConnection连接对象
            URL url = new URL(urlStr);
            HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
            // 设置连接属性
            httpConn.setConnectTimeout(3000);
            httpConn.setDoInput(true);
            httpConn.setRequestMethod("GET");
            // 获取相应码
            int respCode = httpConn.getResponseCode();
            if (respCode == 200) {
                return ConvertStream2Json(httpConn.getInputStream());
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "";
    }
    private static String ConvertStream2Json(InputStream inputStream) {
        String jsonStr = "";
        // ByteArrayOutputStream相当于内存输出流
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len = 0;
        // 将输入流转移到内存输出流中
        try {
            while ((len = inputStream.read(buffer, 0, buffer.length)) != -1) {
                out.write(buffer, 0, len);
            }
            // 将内存流转换为字符串
            jsonStr = new String(out.toByteArray());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return jsonStr;
    }
}

 

 类似资料:
  • 我明白任何客户端应用程序请求查询域名将发送到DNS服务器域名到IP解析。但是如果请求的查询只是IP地址,这是否意味着该查询不会发送到DNS服务器进行解析?我想知道客户机应用程序是否会决定节省到DNS服务器的行程?请指教。谢谢!!

  • 本文向大家介绍Shell脚本获取本地网卡IP、mac地址、子网掩码、dns IP、外网IP,包括了Shell脚本获取本地网卡IP、mac地址、子网掩码、dns IP、外网IP的使用技巧和注意事项,需要的朋友参考一下

  • 主要功能: 1、输入域名或IP地址查询所属地理区域; 2、DIV+CSS模板方便修改; 3、可自己升级更新IP数据库; 3、免费、开源程序。 演示:http://www.damazha.com/tool/ip

  • 问题内容: 我想从Swift中的DNS查询中获取IP地址(例如192.168.0.1或87.12.56.50)。我用100种不同的方法尝试了100次…没有任何帮助,所以我必须寻求帮助。到目前为止,这是我的代码: 问题答案: 您的代码将地址检索为“套接字地址”结构。 可用于将地址转换为数字IP字符串回收的代码,现已更新为Swift 2 ): 输出(示例): 还要注意第一行的用法,因为名称中 带有“

  • 本文向大家介绍python实现查询IP地址所在地,包括了python实现查询IP地址所在地的使用技巧和注意事项,需要的朋友参考一下 使方法一、用IP138数据库查询域名或IP地址对应的地理位置。 方法二、本来想调用阿里的ip接口查询ip归属地。结果发现阿里的接口非常不给力,主要是不准确,不过是免费的且有地区和ISP的信息。以下是实现代码 但是多次查询发现ip归属地不准确,于是使用17mon的ip查

  • 本文向大家介绍Java判断IP地址为内网IP还是公网IP的方法,包括了Java判断IP地址为内网IP还是公网IP的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java判断IP地址为内网IP还是公网IP的方法。分享给大家供大家参考。具体分析如下: tcp/ip协议中,专门保留了三个IP地址区域作为私有地址,其地址范围如下: 10.0.0.0/8:10.0.0.0~10.255.255