自分のグローバルIP確認したいだけなのに検索して、WHOIS調べるのにまた別サイト開いて、DNS引くのにさらに別サイト開いて…というのを毎回繰り返してる自分に嫌気がさして作ったのがNetToolsです。動機としてはかなり「自分が楽したいから」に近いです。
| 機能 | 調べられること |
|---|---|
| myip | 自分のグローバルIPアドレス |
| WHOIS | ドメインの登録者・有効期限 |
| DNS | A/MX/TXTなど各種レコード |
| headers | 通信ヘッダーの中身 |
| blacklist | IPのブラックリスト登録有無 |
| CIDR計算 | サブネットの範囲 |
これを同じ見た目・同じ導線でまとめてあります。バラバラのサイトを回っていた頃と比べると、調べ物にかかる時間は体感でだいぶ減りました。
作って一番得したのは多分自分です。
よく使うのがIPの確認やDNSの名前解決です。とある作業でサーバー側のIPが頻繁に変わることがあるのでドメインに対して確認に使っています。まあ、nslookupすればいいんですがターミナル開かなくてもいいので…。
DNSレコードで大コケした話
ここで一番ハマったのがDNSレコードの取得でした。最初、ドメイン1個に対して全部のレコード種別を1リクエストでまとめて取ろうとしたんですが、これがネームサーバー側の都合で普通に情報が欠けて返ってくることがある。特に_dmarcのTXTレコードとか、複数行にまたがるTXTレコードとか、SPF設定あたりで「え、これ本当は設定されてるはずなのに空で返ってきてるぞ」という状況に何度か出くわして、最初は自分のコードのバグだと思って延々自分を疑っていました。
結局バグではなく、一括取得のやり方自体に無理があったというオチです。
最終的には、Aレコード・MXレコード・TXTレコードなどを個別に順番に問い合わせて、最後にまとめて統合する多段方式に作り直しました。リクエスト回数は増えるんですが、キャッシュと組み合わせれば速度はそこまで落とさずに済んだので、結果オーライです。
作り直しに丸1日かかったのは若干へこみましたが。
後手に回ったレート制限と、地味に効いてるキャッシュ
WHOISやDNSの機能は、裏でサーバーが外部サービスに問い合わせて結果を返しています。この構造上どうしても避けられなかった負荷対策の話も書いておきます。公開してしばらくした頃、明らかに人力じゃないペースでリクエストが飛んでくる瞬間があって、「あ、これ何も制限してないとまずいやつだ」と気づいて慌ててレート制限を入れました。
後手に回った感は否めません。
あとは同じドメインへのWHOIS照会が短時間に何度も来た場合、毎回外部に問い合わせるんじゃなく、一定時間だけ結果をキャッシュして使い回すようにしています。利用者からすると表示が速くなるし、外部サービスへの負荷も減るしで、これは作ってよかったと素直に思える機能でした。利用者からは見えない裏方の仕組みですが、こういうのがちゃんと効いてくれているおかげで、無料でも安定して動かし続けられています。
入力値だけは絶対サボらない
あと地味に気を使ってるのが入力値の扱いです。ネットワーク系のツールって、ユーザーが入れた値をそのまま外部コマンドやAPIに投げがちな構造になりやすくて、ここを雑にやるとまずいことになるのは分かっているので、想定される形式かどうかは必ず一度チェックを挟んでから処理するようにしています。
地味だけど、この手のツールでは一番サボっちゃいけないところだと思っています。👇
