MACアドレスを収集するためのツールをGoで書いた

collect-mac-address というものを書いたのでそれに対する感想というか振り返りみたいなものを書いておく。 github.com

どんなツールなのか?

collect-mac-addressコマンドラインツールで、実行するとPC名とMACアドレス一覧が出力されるただそれだけのプログラムだ。 Goで書いているのでGoが使える環境なら go get すればコマンドとしてすぐ使える。 また、クロスコンパイルするビルドスクリプトを用意しているので、GoかDockerがローカルに入っていればビルドスクリプトをキックしてもらうだけでどのOS環境でも実行できるファイルが作れる。

なんで書いたのか?

フリーランスとしてお手伝いしている会社がオフィス移転を機に無線LAN環境も一新して、WPA-PSK + MACアドレスで認証するようにしたいという話があったのがきっかけだった。

MACアドレスを収集するだけなら、各々にifconfig 相当のことをしてもらって結果を送ってもらえばいいだけという話ではあるのだが、

  • 社員にはビジネス職の人が多いので、コマンドラインで実行させるのは心苦しい
  • 仮に実行できたとしても、その後アクセスポイントに設定する用のフォーマットに整形する必要がある
  • WindowsMacで手順が違う

という前提があり、 これを手順としてドキュメント化して実行してもらうのは結構効率が悪そう(問い合わせも多く結局正しく整形されてないものがきたりしそう)だと思った。

そんなに数が多いわけでもないので全部自分が実施して回ることも一瞬考えたが、フリーランスという関わり方で属人的なことをするのは微妙だよなーと思ったので、各々が実行ファイルをダブルクリックしてコピペするくらいのツールを作ろうと思った。 この要件に対してGoのクロスコンパイルがちょうど良くハマりそうで、あまり使ったことがなかったので丁度良いお勉強になりそうだったのも大きな要因だった。

学びがあった点

まずGoのクロスコンパイルはめちゃくちゃ簡単だった。

たったこれだけで、MAC用のバイナリが出来上がる。

GOOS=darwin GOARCH=386 go build -o ./bin/darwin386/hoge

今回は、Win/Mac/Linux用でビルドされるようにスクリプトを書いたが、この手のツールなら大体このスクリプトをコピペして使っていけそうな気がしている。 github.com

また、Docker全盛期な昨今、ビルドするためだけにGoが必要なのも微妙だなというのがあったので、Dockerでビルドできるようにもしてみた。

最初はビルドする用のDockerイメージを作ってDockerHubにpushしておこうかとも思ったが、 そんなに使われる前提でも無いツールなので、そこまでする必要無いかと思い至り特にイメージ等は用意せずシェルスクリプトを書くにとどめた github.com

改善点とか

  • 実行したらSlackに自動でポストされるのも良いかなーと思った
    • が、あまり便利にすると何をやっているのか分からなくなってしまうので、少しコストがかかるくらいの方がセキュリティを意識してもらいやすいのではないか。
    • 社員数が多ければ意識ではなくツールで解決した方がいいと思うが、社員数が少ないのであれば既存社員の意識をあげて後に入る社員の意識がつられて上がることの方が大事ではないか。
    • とか、そんなことを考えたり。
  • ビルドされた成果物が危険な実行ファイルとして判定されてしまう
    • コードサイニングされていないから?
    • あまり詳しく調べていないが、ダブルクリックするだけで済むようにしたい

まとめ

まぁそんな大層なツールではないのだが、書いて公開までするとそれなりに学びがあるなーというのは思ったので、 今後もアウトプットの一環としてカジュアルにやっていければなと思っている