国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java 根據網址查詢DNS/IP地址的方法

Java 根據網址查詢DNS/IP地址的方法

2021-02-28 10:25鐵錨 Java教程

這篇文章主要介紹了Java 根據網址查詢DNS/IP地址的方法,具體實現代碼,大家參考下本文

需求: 給定一個URL地址, 例如: http://www.cncounter.com/tools/shorturl.php, 解析對應的IP地址和端口號。

說明: 本文不涉及底層的 DNS 協議, 直接使用Java平臺提供的API進行操作。

DNS也就是 Domain Name Service,即 域名服務。

我們知道, Java中與網址有關的類包括 java.net.URL 和 java.net.URI 等, 其中 URI 是資源定位符, 可能包括 file: 之類的協議。

所以此處我們使用 URL 類, 獲取端口號的代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
  * 獲取端口號
  *
  * @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;
 }

URL 類是Java早期就存在的一個類。 內部邏輯比較復雜, 有興趣可以自己查看相關的JDK實現代碼。

其中獲取端口號的2個方法:

getPort() 就是獲取網址里面指明的端口號, 如果沒有指定, 則返回 -1。

getDefaultPort() 是獲取協議對應的默認端口號, 如 http 協議默認端口號為 80, https 協議默認端口號是 443 等。

然后我們看提取 Host 部分的代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
  * 獲取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;
 }

本質上, 也可以通過正則表達式或者String直接截取 Host, 但如果碰上復雜情況, 也不好處理, 例如: https://yourname:passwd@gitee.com/mumu-osc/NiceFish.git 這樣的復雜網址。

提取出域名之后, 可以通過 java.net.InetAddress 類來查找IP地址。

代碼如下所示:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
  * 根據域名(host)解析IP地址
  *
  * @param host 域名
  * @return
  * @throws IOException
  */
 public static String parseIp(String host) throws IOException {
   // 根據域名查找IP地址
   InetAddress inetAddress = InetAddress.getByName(host);
   // IP 地址
   String address = inetAddress.getHostAddress();
   return address;
 }

可以看到,我們使用了 InetAddress.getByName() 靜態方法來查找IP。

該類也提供了其他靜態方法, 但一般不怎么使用, 有興趣可以點開源碼看看。

然后, 我們通過 main() 方法進行簡單的測試:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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);
 }

執行結果為:

?
1
2
3
host=www.cncounter.com
port=80
address=198.11.179.83

知道IP和端口號, 我們就可以直接通過 Socket 來進行連接了。

當然, 如果是 http 協議, 可以使用 Apache 的 HttpClient 工具, 功能強大而且使用方便。 但這個庫有個不好的地方在于,各個版本之間并不兼容, API 也經常換, 編程時需要根據特定版本號來進行處理。

完整的代碼如下所示:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
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;
  }
}

OK, 請根據具體情況進行適當的封裝和處理。

總結

以上所述是小編給大家介紹的Java 根據網址查詢DNS/IP地址的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:http://blog.csdn.net/renfufei/article/details/78722127

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 色婷婷av久久久久久久 | 亚洲一区二区三区视频 | 亚洲免费视频网 | 黄色网址在线免费 | 国产麻豆乱码精品一区二区三区 | 亚洲黄色在线观看 | 久久不卡 | 草草成人 | 国产精品美乳一区二区免费 | 午夜成人在线视频 | 国产成人高清 | 日韩在线观看中文 | 成人3d动漫一区二区三区91 | 成人婷婷网色偷偷亚洲男人的天堂 | 爱免费视频 | 亚洲精品电影在线观看 | 亚洲日本国产 | 久久久久久久久久久精 | 精品国产视频 | 亚洲一区二区在线播放 | 成年人免费网站 | 黄色一级毛片在线观看 | 成人精品影院 | 国产精品中文字幕在线观看 | 亚洲 欧美 日韩 在线 | 国产欧美日韩一区二区三区 | 亚洲精品在线免费看 | 一区二区日本 | 国产一区二区精品 | 亚洲婷婷综合网 | www久草 | 久久久久一区 | 国产精品美女久久久久久免费 | 日本久久精品一区 | 久久男女 | 精品1区 | 日韩一级视频 | 伊人色综合网 | 毛片a级毛片免费 | 在线欧美日韩 | 91麻豆精品国产91久久久资源速度 |