要件: 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 サイトの他の関連記事を参照してください。

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境
