PythonでサイトURLからIPアドレスを取得する【URL→ドメイン→IP】

PythonでサイトURLからIPアドレスを取得する【URL→ドメイン→IP】 プログラミング

「URLからサイトのIPアドレスを取得したい」
このことをPythonで実現します。

それも標準ライブラリだけを使って対応します。
つまり、他のライブラリをインストールせずに対応するということです。

本記事の内容

  • サイトURLからドメイン(ホスト)を取得する
  • ドメインからIPを取得する
  • 【サンプルコード】サイトURLからIPアドレスを取得する

それでは、上記に沿って解説していきます。

サイトURLからドメイン(ホスト)を取得する

Example Domain
https://example.com/

まずは、上記サイトを例にして言葉(キーワード)を定義します。
定義というより、実データで説明すると言った方が適切かもしれません。

キーワード実データ
サイトURLhttps://example.com/
ドメイン(ホスト)example.com
IPアドレス93.184.216.34

IPアドレスは、下記ツールの結果を参照。

ドメイン/IPアドレス サーチ 【whois情報検索】
https://www.cman.jp/network/support/ip.html

言葉の定義が明確になったので、説明を進めます。
サイトURLからドメイン(ホスト)を取得するには、urllib.parseモジュールを利用します。

urllib.parseモジュール

正直、正規表現でドメインだけ抽出することは可能です。
実際、過去にそのようなことをしたこともあります。

でも、Python標準ライブラリで便利なモノが用意されています。
それなら、その便利なモノを使う方がよいでしょう。

そして、その便利なモノがurllib.parseモジュールになります。
urllib.parseモジュールの機能は、URLを解析して構成要素にすることです。

実際の動作を確認しましょう。

from urllib.parse import urlparse

url = "https://example.com/category/123/?a=1&b=2#pppp"
parsed_url = urlparse(url)
print(parsed_url)

上記を実行した結果は、以下。

ParseResult(scheme='https', netloc='example.com', path='/category/123/', params='', query='a=1&b=2', fragment='pppp')

これは、地味に便利ですね。
個別に値を取得する場合は、次のようにします。

from urllib.parse import urlparse

url = "https://example.com/category/123/?a=1&b=2#pppp"
parsed_url = urlparse(url)
print(parsed_url.scheme)
print(parsed_url.netloc)
print(parsed_url.path)
print(parsed_url.params)
print(parsed_url.query)
print(parsed_url.fragment)

上記の実行結果は、以下。

https
example.com
/category/123/

a=1&b=2
pppp

簡単ですね。

まとめ

urllib.parseモジュールを使うと、簡単にドメインを取得できます。
別途ライブラリをインストールする必要もないので、気楽に使えます。

念のために、コードを整理しておきます。

from urllib.parse import urlparse

url = "https://example.com/"
parsed_url = urlparse(url)
domain = parsed_url.netloc

上記のコードでURLからドメインを取得できます。
それも、追加でライブラリも必要としません。

以上、サイトURLからドメインを取得する方法について説明しました。
次は、ドメインからIPを取得していきます。

ドメインからIPを取得する

ドメインがあれば、IPアドレスを取得できます。
そのためには、socketモジュールを用います。

socketモジュールとは、Python標準ライブラリです。
そのため、別途ライブラリをインストールする必要がありません。

socketモジュールは、オペレーティングシステムのソケットAPIを利用しています。
OS(プラットフォーム)に依存すると言えます。
ただ、以下のOSすべてで動作します。

  • Windows
  • Linux
  • macOS

機能としては、ネットワーク関連のサービスを提供しています。
そして、今回はその中のgethostbyname()関数を利用します。

ホスト名は、ドメインのことです。
実際には、以下のように使います。

import socket

domain = "example.com"
ip = socket.gethostbyname(domain)
print(ip)

上記の実行結果は、以下。

93.184.216.34

【whois情報検索】と同じ結果になりました。

以上、ドメインからIPを取得する方法について説明しました。
最後に、プログラムを整理して動かしてみましょう。

【サンプルコード】サイトURLからIPアドレスを取得する

urllib.parseモジュールを使って、サイトURLからドメインを取得可能です。
そして、socketモジュールを使って、ドメインからIPアドレスを取得できます。

このことを上記で確認してきました。
これらの処理をまとめたのが、以下のサンプルコードになります。

from urllib.parse import urlparse
import socket

url = "https://example.com/"
parsed_url = urlparse(url)
domain = parsed_url.netloc

ip = socket.gethostbyname(domain)
print(ip)

上記を実行した結果は、以下となります。

93.184.216.34

追加でライブラリをインストールする必要がありません。
これが何より、ありがたいです。

Pythonには便利なライブラリがたくさん公開されています。
そして、簡単にインストールもできます。

でも、標準ライブラリでも十分にいろいろなことに対応できます。
依存関係や処理速度を考えたら、標準ライブラリで対応する方がベターなはずです。

「まずは、標準ライブラリを調べる」
このことを意識していきたいモノですね。

タイトルとURLをコピーしました