macmap 0.2.2

A command-line tool to scan local networks and map IP addresses to MAC addresses.
macmap-0.2.2 is not a library.

macmap

ローカルネットワーク上のデバイスをスキャンし、IPアドレスとMACアドレスのマッピングを取得するRust製コマンドラインツールです。

機能

  • ローカルネットワーク上のすべてのアクティブデバイスを自動検出
  • IPアドレスとMACアドレスのマッピング表示
  • ARPリクエストを使用した高速スキャン
  • Rayonによる並列処理で効率的なスキャン
  • すべての有効なネットワークインターフェースをサポート(loopback以外)
  • 同じ端末上の別インターフェースが見えている場合は重複結果を自動で抑制

必要な権限

このツールは生のネットワークパケットを送受信するため、管理者権限が必要です。

インストール

cargo install --git https://github.com/JarodBruce/macmap.git

使用方法

# 管理者権限で実行
sudo ./target/release/macmap

出力例

Scanning network... Please wait.
Scan complete. Found 5 devices:
192.168.1.1: aa:bb:cc:dd:ee:ff
192.168.1.10: 11:22:33:44:55:66
192.168.1.15: 77:88:99:aa:bb:cc
192.168.1.20: dd:ee:ff:00:11:22
192.168.1.25: 33:44:55:66:77:88

技術仕様

  • 言語: Rust
  • 主要ライブラリ:
    • pnet: ネットワークパケット操作
    • local_ip_address: ローカルIPアドレス取得
    • rayon: 並列処理
    • get_if_addrs: ネットワークインターフェース情報取得

仕組み

  1. ローカルIPアドレスとネットワーク情報を取得
  2. ARPスキャン可能なIPv4インターフェースを検出し、utun などのトンネル系や /32 を除外
  3. 各インターフェースの対象IPレンジを計算
  4. 各IPアドレスに対してARPリクエストを並列送信
  5. ARPレスポンスからMACアドレスを取得し、IPごとに重複を除去
  6. 他のローカルインターフェースが既に見えている結果は重複とみなして非表示にする
  7. 最終結果をIPアドレス順に表示

ライセンス

MIT License

注意事項

  • 自分が管理するネットワークでのみ使用してください
  • 不正なネットワークスキャンは法律で禁止されている場合があります
  • 同一CIDRでも別ネットワークの可能性があるため、サブネットだけではなくローカルインターフェース同士の到達性で重複判定します

リリース手順

このプロジェクトでは、GitHub Actionsを利用してcrates.ioへの公開を自動化しています(タグのバージョンに合わせて Cargo.toml が自動更新されます)。 新しいバージョンをリリースする際は、以下の手順を実行してください。

# 1. 変更をコミットしてプッシュする
git add .
git commit -m "Release vX.Y.Z"
git push origin main

# 2. バージョンタグを作成する
git tag vX.Y.Z

# 3. タグをプッシュしてGitHub Actions(自動公開)をトリガーする
git push origin vX.Y.Z