この種のプロジェクトは以前Bluetoothで行われていましたが、30フィートの範囲と追加のバッテリー消費により、人々の電話の代わりにルーターにpingを実行したいだけです。ルーターが各デバイスの一意のMACアドレスを追跡していることを知っています。私は各電話のアドレスを登録し、PIに定期的にルーターをチェックして動的なWebページを更新し、誰が家にいるかを表示することを望んでいました。
PIでこの情報を取得する合理的な方法があるかどうか知りたい。
この種のプロジェクトは以前Bluetoothで行われていましたが、30フィートの範囲と追加のバッテリー消費により、人々の電話の代わりにルーターにpingを実行したいだけです。ルーターが各デバイスの一意のMACアドレスを追跡していることを知っています。私は各電話のアドレスを登録し、PIに定期的にルーターをチェックして動的なWebページを更新し、誰が家にいるかを表示することを望んでいました。
PIでこの情報を取得する合理的な方法があるかどうか知りたい。
回答:
可能です。スクリプトにログイン認証情報を提供し、情報を表示するページを読むことをお勧めします。次に、その内容を解析し、必要なデータを配列に入力します。これらのページには日付や時刻などの詳細情報が含まれている場合があるため、本当に素晴らしいログを作成できます。
ここに私がどのように進むかについての簡単な例があります。
ルーターのページで次のようなものが見つかります。
<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アドレスを検索するループです。ファイルの最後に到達するまで。
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
コマンドライン版のfingをいじっているところです。それはネットワーク上のすべてのものを見つけ、以下を含むCSVファイルを吐き出すというまともな仕事をします:
- IPアドレス
- ノードのカスタム名(.propertiesファイルでカスタム名を割り当てている場合)
- 状態(UP / DOWN)
- 最終変更のタイムスタンプ
- ホスト名(DNSを有効にしている場合)
- ハードウェアアドレス(ローカルネットワークを検出している場合)
- ハードウェアベンダー
以前の回答によると、CSVのコンテンツをWebページに取得し、外部に公開する内容に注意するために、いくつかのテキスト操作が必要になります。
私はAndroidバージョンをかなり広範囲に使用しており、ホームネットワーク上のすべてを見つけるのに良い仕事をしています(そして公共のwifiで遊ぶのがちょっと楽しいです)。
このコマンドarp
により、ネットワークに接続されているデバイスのリストが表示されます。必要なデータを取得するには基本的な文字列操作を行う必要がありますが、自分で情報を取得するよりも確かに簡単です。
機能メモ:
一部のルーターはデフォルトでこのタイプの機能をブロックしますが、ルーターはそのように構成されている場合があります。動作しない場合は、ドキュメントを少し調べて、それを許可する方法を確認してください。
セキュリティノート:
現在家にいる人を表示するウェブサイトを持っていることは、いくつかの非常に深刻なセキュリティ上の影響があります。実施されているセキュリティについて、および関連するリスクに対して十分かどうか、慎重に検討してください。