PHPでドメイン名からIPアドレスを取得する簡単ツールを作る方法

Pocket

サブドメインを設定する際などに取得したドメインのIPアドレスが必要になるときがあります。

そんな時に便利なツールをPHPで作成したので解説していきます。

※ターミナルやコマンドプロンプトを使用する場合は「nslookup ドメイン名」でIPアドレスを取得できます。

 

完成イメージ

完成イメージは以下のようになります。

初期表示

テキスト欄にホスト名を入力し「IPアドレスを取得する」をクリックします

ドメイン名(ホスト名)指定後

 取得したIPアドレスを表示します。

プログラムの内容

使用している技術

・PHP

・Bootstrap4

ソースコード

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
	<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">	

    <meta name="description" content="ドメイン名(ホスト名)を指定し取得ボタンでIPアドレスを取得します">
    <title>ドメイン名(ホスト名)からIPアドレスを取得する</title>
</head>
<body>
<?php $ipaddress=empty($_GET['host'])?null:gethostbyname($_GET['host']) ?>
<div class="container mt-5">
    <div class="row">
        <div class="col-12">
            <div class="card text-white bg-dark">
                <h1 class="h4 text-center card-header"><a href="/app/domain-ipaddress" class="text-white">ドメイン名(ホスト名)からIPアドレスを取得します</a></h1>
                <div class="card-body">
                    <form>  
                        <div class="form-group">
                            <div class="input-group mb-3">
                                <input name="host" class="form-control" value="<?= $_GET['host'] ?>" type="text" placeholder="ドメイン名(ホスト名)を入力してください" />
                                <div class="input-group-append"><button class="btn btn-warning" name="btn-submit" value="exec"><i class="fas fa-search fa-fw"></i>IPアドレスを取得する</button></div>
                            </div>
                        </div>
                    </form>      
                </div>
                <div class="card-body">
                    <?php if(!empty($_GET['btn-submit'])): ?>
                        <?php if($ipaddress==$_GET['host']): ?>
                            <div class="alert alert-dismissible alert-danger">
                                <strong>IPアドレスを取得できませんでした</strong>
                            </div>
                        <?php else: ?>
                            <div class="alert alert-dismissible alert-success">
                                <strong>IPアドレスを取得しました!</strong>取得したIPアドレス: <?= $ipaddress ?>
                            </div>
                            
                        <?php endif ?>
                    <?php endif ?>
                </div>
            </div>
        </div>    
    </div>    
</div>    
</body>
</html>

HEAD部

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
	<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">	

    <meta name="description" content="ドメイン名(ホスト名)を指定し取得ボタンでIPアドレスを取得します">
    <title>ドメイン名(ホスト名)からIPアドレスを取得する</title>
</head>

・Bootstrap4のファイルを読み込み、「description」と「title」を設定します。

PHPの関数を使用しドメイン名(ホスト名)からIPアドレスを取得する

<?php $ipaddress=empty($_GET['host'])?null:gethostbyname($_GET['host']) ?>

三項演算子を使用しドメイン名が未入力の場合はNull、入力された場合にはIPアドレスを取得します。

$_GET[‘host’]について

初期表示時は空でフォーム上で「IPアドレス取得」ボタンをクリックするとテキストボックスに入力したドメインが設定されます。

 

gethostbynameについて

string gethostbyname ( string $hostname )

PHPの関数で引数($hostname)で指定したドメイン名(ホスト名)からIPアドレスを取得します。

返り値は指定した引数($hostname)のIPアドレスを返します。失敗した場合は、そのままの形の hostname を文字列で返します。

Boostrap4の基本クラスを設定

<div class="container mt-5">
    <div class="row">
        <div class="col-12">
          <!--入力フォーム等のタグ -->
        </div>
    </div>
</div>

divタグを入れ子にして、class属性に「container」クラス、「row」クラス、「col-12」クラスを指定します。

Bootstrap4 Cardクラス のタイトルを設定

<div class="card text-white bg-dark">
    <h1 class="h4 text-center card-header">
       <a href="/app/domain-ipaddress" class="text-white">ドメイン名(ホスト名)からIPアドレスを取得します</a>
    </h1>
.........

上記赤枠部分のタイトルを設定します。

text-white:テキストカラーを白にします

bg-dark:背面のカラーをダークにします。

text-center:タイトルを中央寄せにします

 

フォーム設定

<div class="card-body">
    <form>  
        <div class="form-group">
            <div class="input-group mb-3">
                <input name="host" class="form-control" value="<?= $_GET['host'] ?>" type="text" placeholder="ドメイン名(ホスト名)を入力してください" />
                <div class="input-group-append"><button class="btn btn-warning" name="btn-submit" value="exec"><i class="fas fa-search fa-fw"></i>IPアドレスを取得する</button></div>
            </div>
        </div>
    </form>      
</div>

上記赤枠のドメイン名入力(フォーム要素)欄を設定します。

value="<?= $_GET['host'] ?>":ドメイン名が設定されている場合、テキスト欄に表示します。

取得したIPアドレスを表示する

<div class="card-body">
    <?php if(!empty($_GET['btn-submit'])): ?>
        <?php if($ipaddress==$_GET['host']): ?>
            <div class="alert alert-dismissible alert-danger">
                <strong>IPアドレスを取得できませんでした</strong>
            </div>
        <?php else: ?>
            <div class="alert alert-dismissible alert-success">
                <strong>IPアドレスを取得しました!</strong>取得したIPアドレス: <?= $ipaddress ?>
            </div>
            
        <?php endif ?>
    <?php endif ?>
</div>

<?php if(!empty($_GET['btn-submit'])): ?>の判定処理について

$_GET['btn-submit']には「IPアドレスを取得する」ボタンをクリックすると「exec」値が設定されます。値が設定されているかチェックし、設定されている場合にIPアドレスの取得結果を表示します。

IPアドレスが正常に取得できなかった場合

<?php if($ipaddress==$_GET['host']): ?>
    <div class="alert alert-dismissible alert-danger">
        <strong>IPアドレスを取得できませんでした</strong>
    </div>

上記のメッセージが表示されます。

<?php if($ipaddress==$_GET['host']): ?>の判定について

「gethostbyname」関数でドメイン名が正常に取得できない場合は、ドメイン名がそのまま返り値に設定されます。入力したドメイン名と一致する場合はエラーの判定となります。

IPアドレスが正常に取得できた場合

<?php else: ?>
    <div class="alert alert-dismissible alert-success">
        <strong>IPアドレスを取得しました!</strong>取得したIPアドレス: <?= $ipaddress ?>
    </div>
<?php endif ?>

<?= $ipaddress ?>に取得したIPアドレスが表示します。

 

以上、ドメイン名からIPアドレスを取得するツールの解説でした。

今回は「gethostbyname」関数を使用して単純にIPアドレスを表示するツールを作りました。この関数を利用すれば空きドメインを調べることもできますね。

今後は入力したドメインに「.net」や「.com」、「.info」などのトップレベルドメイン自動で付加して調査するツールも作成していきたいと思います。

最後まで読んでいただきありがとうございました。

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です