動かざることバグの如し

近づきたいよ 君の理想に

IPからリモートホストを調べるgethostbyaddrをDockerで動かす

環境

  • Docker
  • PHP 8.x

gethostbyaddrとは

PHPではgethostbyaddr関数というのがある。指定したIPのリモートホスト名を取得することができる。

gethostbyaddr('66.249.66.1');

これをDocker使ってワンライナーでやりたい。

結論

これでワンライナーで実行できる

$ docker run --rm --dns 8.8.8.8 php:8-cli php -r "echo gethostbyaddr('66.249.66.1');"
crawl-66-249-66-1.googlebot.com

ポイントは以下

  • --rm: コンテナ実行後に自動的に削除する。不要なコンテナが残らない。
  • --dns 8.8.8.8: DNSサーバーを指定。必須 これがないとDocker内部のDNSサーバーで解決を試みてしまい、どのIPを入力してもIPアドレスが返ってきてしまう。
  • php:8-cli: PHP 8.xのCLIイメージを使用。これにより、PHPスクリプトを直接実行できる。
  • php -r "echo gethostbyaddr('66.249.66.1');": PHPgethostbyaddr関数を実行し、結果を標準出力に表示。

これらのポイントを押さえることで、Docker環境で簡単にgethostbyaddr関数を利用できる。

より便利に

IPアドレスをいちいち書き換えるのが面倒だったので、bashのfunction機能を使ってコマンド化した

gethostbyaddr() { docker run --rm --dns 8.8.8.8 php:8-cli php -r "echo gethostbyaddr('$1');" }

以下のように引数を渡すと実行できる。

$ gethostbyaddr 66.249.66.1
crawl-66-249-66-1.googlebot.com

参考リンク