JOURNAL

NetToolsを作った話 — IPやWHOISを調べるのに、いちいち別サイトを回るのが面倒だった

自分のグローバルIP確認したいだけなのに検索して、WHOIS調べるのにまた別サイト開いて、DNS引くのにさらに別サイト開いて…というのを毎回繰り返してる自分に嫌気がさして作ったのがNetToolsです。動機としてはかなり「自分が楽したいから」に近いです。

機能調べられること
myip自分のグローバルIPアドレス
WHOISドメインの登録者・有効期限
DNSA/MX/TXTなど各種レコード
headers通信ヘッダーの中身
blacklistIPのブラックリスト登録有無
CIDR計算サブネットの範囲

これを同じ見た目・同じ導線でまとめてあります。バラバラのサイトを回っていた頃と比べると、調べ物にかかる時間は体感でだいぶ減りました。

作って一番得したのは多分自分です。
よく使うのがIPの確認やDNSの名前解決です。とある作業でサーバー側のIPが頻繁に変わることがあるのでドメインに対して確認に使っています。まあ、nslookupすればいいんですがターミナル開かなくてもいいので…。

DNSレコードで大コケした話

ここで一番ハマったのがDNSレコードの取得でした。最初、ドメイン1個に対して全部のレコード種別を1リクエストでまとめて取ろうとしたんですが、これがネームサーバー側の都合で普通に情報が欠けて返ってくることがある。特に_dmarcのTXTレコードとか、複数行にまたがるTXTレコードとか、SPF設定あたりで「え、これ本当は設定されてるはずなのに空で返ってきてるぞ」という状況に何度か出くわして、最初は自分のコードのバグだと思って延々自分を疑っていました。

NetToolsの画面
▲ NetToolsのDNSレコードの取得画面

結局バグではなく、一括取得のやり方自体に無理があったというオチです。

最終的には、Aレコード・MXレコード・TXTレコードなどを個別に順番に問い合わせて、最後にまとめて統合する多段方式に作り直しました。リクエスト回数は増えるんですが、キャッシュと組み合わせれば速度はそこまで落とさずに済んだので、結果オーライです。

作り直しに丸1日かかったのは若干へこみましたが。

後手に回ったレート制限と、地味に効いてるキャッシュ

WHOISやDNSの機能は、裏でサーバーが外部サービスに問い合わせて結果を返しています。この構造上どうしても避けられなかった負荷対策の話も書いておきます。公開してしばらくした頃、明らかに人力じゃないペースでリクエストが飛んでくる瞬間があって、「あ、これ何も制限してないとまずいやつだ」と気づいて慌ててレート制限を入れました。

後手に回った感は否めません。

あとは同じドメインへのWHOIS照会が短時間に何度も来た場合、毎回外部に問い合わせるんじゃなく、一定時間だけ結果をキャッシュして使い回すようにしています。利用者からすると表示が速くなるし、外部サービスへの負荷も減るしで、これは作ってよかったと素直に思える機能でした。利用者からは見えない裏方の仕組みですが、こういうのがちゃんと効いてくれているおかげで、無料でも安定して動かし続けられています。

入力値だけは絶対サボらない

あと地味に気を使ってるのが入力値の扱いです。ネットワーク系のツールって、ユーザーが入れた値をそのまま外部コマンドやAPIに投げがちな構造になりやすくて、ここを雑にやるとまずいことになるのは分かっているので、想定される形式かどうかは必ず一度チェックを挟んでから処理するようにしています。

地味だけど、この手のツールでは一番サボっちゃいけないところだと思っています。👇