「Who's Home」プロジェクト用にルーターからMACアドレスを取得する方法が必要


11

この種のプロジェクトは以前Bluetoothで行われていましたが、30フィートの範囲と追加のバッテリー消費により、人々の電話の代わりにルーターにpingを実行したいだけです。ルーターが各デバイスの一意のMACアドレスを追跡していることを知っています。私は各電話のアドレスを登録し、PIに定期的にルーターをチェックして動的なWebページを更新し、誰が家にいるかを表示することを望んでいました。

PIでこの情報を取得する合理的な方法があるかどうか知りたい。


wifiについてはどうですか(代わりに電話のホスト名をpingします)?
user236012 2016

2
また、ルーターから静的IPアドレスを割り当て、nmapとIPアドレスを使用してデバイスを識別することもできます。
ArtOfCode 2016

ここで、WindowsのC#で同様のことを行いました。stackoverflow.com / questions / 2567107 /…-必要に応じて、最新バージョンのコードをお送りします。Raspberry PiでのC#の有用性はわかりませんが、正しい方向を示しているはずです。ガレージから入る前でも、家にいることを確実に検出します。
Aric TenEyck 2016

毎分結果をWebサーバーに投稿するルーターにbashスクリプトを配置することで、これとさらに多くの情報をキャプチャします。このシステムでは、インターネットの稼働時間、接続されているクライアント、WAN IP、ファイバー減衰とパワーバジェット、VOIPサービス、wifiパスワードなどを監視および管理します。マイレージは、ルーターのCPUパワーによって異なります。
EDP

1
ルーターで画面をこする?Linuxベースのルーター(openwrt)にアップグレードして、ログインしてarpキャッシュを確認することもできます。
するThorbjörnRavnアンデルセン

回答:


6

可能です。スクリプトにログイン認証情報を提供し、情報を表示するページを読むことをお勧めします。次に、その内容を解析し、必要なデータを配列に入力します。これらのページには日付や時刻などの詳細情報が含まれている場合があるため、本当に素晴らしいログを作成できます。

ここに私がどのように進むかについての簡単な例があります。

ルーターのページで次のようなものが見つかります。

<div id="flex">
 <div id="dm-name">
  name : Your_device_name
 </div>
 <div id="dm-ip">
  IP : 192.168.x.xxx
 </div>
 <div id="dm-mac">
  <span>MAC:D4:04:CD:FE:5A:17</span>
 </div>
</div>

したがって、すべてのデバイスがそのようにリストされることを知っています。そして、すべてのMACアドレスは同じ長さになります。

スクリプトはそのようなものになる可能性があります。

var string_to_parse = "file read from router.html";
cursor = 0;  // The position of your cursor;
i =0;
    while(cursor > 0){

    begin_at = string_to_parse.indeOf('MAC:');
    end_at = length_of_Mac; // this is standard for al mac

    mac[i] = string_to_parse.substring(begin_at, begin_at + end_at);
    cursor = begin_at + end_at;
i++;
    }

このコードは微調整が必​​要ですが、アイデアはそこにあります。すべてのファイルを実行してすべてのMacアドレスを検索するループです。ファイルの最後に到達するまで。


これが私がすることです。それはあなたのルーターが死んでいるかどうかを検出する追加のボーナスがあります。
slebetman 2016

1
+1ウェブサイトのスクレイピングは興味深い選択肢です。自分で考えなかったので少しイライラしています。
Jacobm001

@MadeInDreams参照するルーターのページはルーターのDHCPリースのページですか?または、ルーターのアクティブな接続ページはありますか?
Chetan Bhargava、2016

ルーターによって異なりますが、ほとんどの場合、接続されているすべてのデバイスを一覧表示するページがあります。この例は、私のネットワークのメインページ
MadeInDreamsの

6

Raspberry Piで一意のMACアドレスを追跡するには、arpwatchと呼ばれるツール(むしろサービス)が必要です。私はBSDでarpwatchを広範囲に使用しており、すべてのarpおよびrarp要求をsyslogに記録します。

Syslogから、日付と時刻、およびMACアドレスを解析できます。

ARPは機能し、テーブルは物理ネットワーク上にのみ存在します(専門用語:コリジョンドメイン)。パケットが別のネットワークに送信されると、送信元MACアドレスはルーターのMACアドレスに置き換えられます。

実行arpラズベリーパイにコマンドのみコマンドが実行されるホスト(ラズベリーパイ)で取引されているホスト(IP通信)のMAC + IPアドレスの一覧が表示されます。ネットワーク上の他のホストのMACアドレスはリストされません

別の高度な方法は、Raspberry Piでnmapを使用してホストを検出することです。を使用nmap -sPして、ネットワーク上のすべてのホストにpingを実行できます。ネットワーク上のすべてのアクティブなホストのIPアドレスがわかります。次に、arpコマンドを実行して、アクティブなMacを確認できます。

chetan@Linux:~$ nmap -sP 192.168.100.0/24

Starting Nmap 6.40 ( http://nmap.org ) at 2016-02-23 16:08 PST
Nmap scan report for 192.168.100.4
Host is up (0.0087s latency).
Nmap scan report for 192.168.100.58
Host is up (0.0024s latency).
Nmap scan report for 192.168.100.160
Host is up (0.049s latency).
Nmap scan report for 192.168.100.164
Host is up (0.063s latency).
Nmap done: 256 IP addresses (4 hosts up) scanned in 2.68 seconds

1
これはおそらく、Webスクレイピングよりもはるかに堅牢で柔軟な方法だと思います。多くのISP発行のルーターでは、接続されたデバイス(情報付き)を表示することになっているページは信頼できません。
ゴルディロックス

@goldilocks +1、はい、受け入れた回答を賛成した後、私はそれについて考えました。アクティブな接続(SPIステータスなど)のページがあるルーターがあると思います。彼らが持っている素敵なルーター。
Chetan Bhargava、2016

4

コマンドライン版のfingをいじっているところです。それはネットワーク上のすべてのものを見つけ、以下を含むCSVファイル吐き出すというまともな仕事をします

  • IPアドレス
  • ノードのカスタム名(.propertiesファイルでカスタム名を割り当てている場合)
  • 状態(UP / DOWN)
  • 最終変更のタイムスタンプ
  • ホスト名(DNSを有効にしている場合)
  • ハードウェアアドレス(ローカルネットワークを検出している場合)
  • ハードウェアベンダー

以前の回答によると、CSVのコンテンツをWebページに取得し、外部に公開する内容に注意するために、いくつかのテキスト操作が必要になります。

私はAndroidバージョンをかなり広範囲に使用しており、ホームネットワーク上のすべてを見つけるのに良い仕事をしています(そして公共のwifiで遊ぶのがちょっと楽しいです)。


3

このコマンドarpにより、ネットワークに接続されているデバイスのリストが表示されます。必要なデータを取得するには基本的な文字列操作を行う必要がありますが、自分で情報を取得するよりも確かに簡単です。

機能メモ

一部のルーターはデフォルトでこのタイプの機能をブロックしますが、ルーターはそのように構成されている場合があります。動作しない場合は、ドキュメントを少し調べて、それを許可する方法を確認してください。

セキュリティノート

現在家にいる人を表示するウェブサイトを持っていることは、いくつかの非常に深刻なセキュリティ上の影響があります。実施されているセキュリティについて、および関連するリスクに対して十分かどうか、慎重に検討してください。


いい考えだ、以前のコメントを撤回したと思う。
ガニマ

1
ここでこれにarpを使用することについては、いくつかの興味深い外観の警告があります。彼らは、arpを実行しているデバイスにパケットを送信していない場合、デバイスが表示されない可能性があり、pingが必要になる可能性があることを示唆しています。
16

@goobering +1。arpコマンドを実行するだけでは、ネットワーク上のすべてのアクティブなホストが一覧表示されるわけではありません。Arpwatchはネットワーク上のすべてのarpパケットを記録します。
Chetan Bhargava、2016

1

それは可能であり、他の人々はいくつかの良い方法を提案しています。私は数年前にpythonスクリプトを作成して、netgearルーターからこの情報を画面で取得し、githubに投げました。それは見つけることができるここに。それは粗雑であり、今見てみると、多少異なる方法でやり直しますが、私が引っ越すまでの2、3年後とほとんど同じ目的で機能しました。


+1スクリプトは確かに改善される可能性がありますが、それは問題に対する優れた解決策です。
Jacobm001
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.