Web サイトのアドレスに基づいて DNS/IP アドレスをクエリする Java メソッド
要件: URL アドレス (例: http://www.cncounter.com/tools/shorturl.php) を指定して、対応する IP アドレスとポート番号を解析します。
注: この記事では、基礎となる DNS プロトコルには関与せず、操作のために Java プラットフォームによって提供される API を直接使用します。
DNS は Domain Name Service であり、ドメイン名サービスです。
Java の URL 関連クラスには java.net.URL や java.net.URI などが含まれることがわかっています。URI はリソース ロケーターであり、file: などのプロトコルが含まれる場合があります。
そこで、ここでは URL クラスを使用します。ポート番号を取得するコードは次のとおりです。
/** * 获取端口号 * * @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()はURLで指定されたポート番号を取得します。指定されていない場合は、-1が返されます。
getDefaultPort() は、http プロトコルのデフォルトのポート番号は 80、https プロトコルのデフォルトのポート番号は 443 など、プロトコルに対応するデフォルトのポート番号を取得します。
次に、ホスト部分を抽出するコードを見てみましょう:
/** * 获取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; }
基本的に、正規表現または文字列を使用してホストを直接インターセプトすることもできますが、複雑な状況に遭遇した場合、対処するのは簡単ではありません。例: https:/ /yourname:passwd@gitee.com/mumu-osc/NiceFish.git のような複雑な URL。
ドメイン名を抽出した後、java.net.InetAddress クラスを使用して IP アドレスを見つけることができます。
コードは次のとおりです:
/** * 根据域名(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() メソッドを通じて簡単なテストを実行します:
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); }
実行結果は次のとおりです:
host=www.cncounter.com port=80 address=198.11.179.83
IP とポート番号がわかっているので、Socket を介して直接接続できます。
もちろん、http プロトコルの場合は、強力で使いやすい Apache の HttpClient ツールを使用できます。 ただし、このライブラリの欠点は、さまざまなバージョンに互換性がなく、プログラミング時に API が頻繁に変更されるため、特定のバージョン番号に従って処理する必要があることです。
完全なコードは次のとおりです:
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 で URL に基づいて DNS/IP アドレスをクエリする方法です。皆様のお役に立てれば幸いです。
関連する推奨事項:
Java 暗号化、復号化、およびデジタル署名の完全なコード例
以上がWeb サイトのアドレスに基づいて DNS/IP アドレスをクエリする Java メソッドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4

Spring Bootは、Java開発に革命をもたらす堅牢でスケーラブルな、生産対応のJavaアプリケーションの作成を簡素化します。 スプリングエコシステムに固有の「構成に関する慣習」アプローチは、手動のセットアップを最小化します。
