ネットワーク上にエンティティが存在するかどうかを MAC 経由ですばやく検出しますか?

ネットワーク上にエンティティが存在するかどうかを MAC 経由ですばやく検出しますか?

デバイスの MAC アドレスを使用して、Windows PC/サーバーから現在ネットワークに接続されているかどうかを判断する高速で信頼性の高い方法はありますか? そうでない場合は、Ubuntu サーバーからですか?

  • アイテムがキャッシュ内に長時間留まるため、arp -a だけでは機能しません。
  • arp -a と 5 分ごとにキャッシュをクリアする組み合わせは機能するかもしれませんが、非効率的であり、5 分以内にキャッシュが完全に再作成された場合にのみ機能します。本当に機能するのでしょうか?

背景: 職場で出勤記録を取るのにうんざりしたので、Windows サービスとして実行し、定期的に自分の携帯電話が会社のネットワーク上にあるかどうかを確認し、それをデータベースに記録し、指定された範囲のデータを合計して私がオフィスにいた時間を表示できる Web サイトをホストする簡単なアプリを作成しました (適切なライブラリを使用して数時間でできることは驚くべきことです)。

会社が、可能な限りタイムカードシステムの代わりにアプリを全員に使用してほしいと決定するまでに約 1 週間かかりました。

当初は DHCP 予約を使用して、Android フォンを定期的に ping して検出していました。しかし、拡張すると、iPhone が ping に応答しないという問題にすぐに遭遇しました。それだけでなく、ping は遅いです。ping で確実に存在を確認するには、電話 1 台につき約 1 秒かかります。

arp -a を実行して、MAC の一致を結果から探しましたが、アイテムは実質的に無期限に arp キャッシュに残ります。キャッシュを読み取ってからフラッシュすることを検討しましたが、時間内に確実に再設定されるかどうかはわかりません。それが実行されれば、潜在的な解決策になりますが、5 分ごとに arp キャッシュをフラッシュするという考えは好きではありません。

現在の解決策は、アクセス ポイントで SNMP ポーリングを実行して接続されたクライアントを収集し、それを解析して MAC の一致が見つかるかどうかを確認することです。これは高速で信頼性が高いですが、問題のアクセス ポイントに非常に限定されます。アクセス ポイントを切り替えると、次のアクセス ポイントでは、接続されたクライアントが SNMP 経由でリストされない可能性があります。リストされたとしても、SNMP ポーリングを再設定する必要があります。

特定の電話で接続を受け入れる既知のポートがある場合は、そのポートへの TCP 接続を開いてから、ping の代わりにそれを閉じることができると思いますが、どこかに高速なレイヤー 2 ソリューションがあるはずだと感じています。

答え1

は使用しないでくださいarp。 を使用してくださいarping

https://en.wikipedia.org/wiki/アルピング

Arping は、コンピュータ ネットワーク上のホストを検出し、調査するためのコンピュータ ソフトウェア ツールです。Arping は、ネットワーク インターフェイスの MAC アドレスで識別されるホストにアドレス解決プロトコル (ARP) 要求方式を使用してリンク層フレームを送信することにより、接続されたネットワーク リンク上のホストを調査します。

ユーティリティ プログラムは、ARP を使用して、ユーザーが指定した IP アドレスを解決する場合があります。arping の機能は、インターネット プロトコル スイートのインターネット層でインターネット制御メッセージ プロトコル (ICMP) を使用してネットワークをプローブするユーティリティ ping に似ています。

これは基本的に、arpOS ARP キャッシュ処理全体を行わずに、文字通り 1 回限りの ARP 要求を回線に送信するだけです。

PS この ARP 機能は単一のローカル サブネットでのみ機能することに注意してください。より広い範囲で実行する必要がある場合は、ルーターで実行する必要があります。

PPS 短い DHCP リース (例: 1 分から 5 分) を使用することもできます。確かに、Apple デバイスは過去に DHCP 仕様に従わないことで知られていますが、最近ではそれほど悪くないはずです。そう願っています。

PPPS もarping100% 信頼できるわけではありません (ただし、99% 以上は信頼できるはずです)。一部のデバイスは、ping を無視するのと同様に、要求されていない着信 ARP 要求を無視します。確かに、これは IETF に違反しますが、ping を無視することも違反です...

横糸。

答え2

ARP を使用するのは正解です。デバイスがネットワーク上にあることを知らせてくれることに頼りたくないので、別の方法として自分で行うこともできます。ARP はそれを容易にし、MAC アドレスだけでなく、ネットワークで使用されている IP アドレスも提供します。arpcache をクリアすると、必要に応じて再設定されます。つまり、ネットワーク上で通信する必要があったアドレスだけがキャッシュに設定されます。

より良い解決策としては、クライアントの MAC アドレスがすでにわかっている場合は、ネットワーク内で静的 IP アドレスを割り当てることができます。キャッシュは定期的に古くなるため、これによりキャッシュの問題がある程度解決されます。つまり、次にネットワーク インターフェイスがデバイスと通信する必要があるときに、別のルックアップが実行されます。Apple デバイスが ping を返さないという問題が発生しているため、ネットワーク ブロードキャストを常に ping することを提案します。たとえば、ゲートウェイが 192.168.1.1 の場合、ブロードキャストは 192.168.1.255 で、これに ping を送信すると、ping を受け入れるすべてのデバイスが応答します。

まとめると、ARP キャッシュは、コンピューターとルーターなどの間でパケットを交換するための TCP/IP プロトコルに必要なため、確実に再作成されるため、クリアし続けるだけで済みます。ただし、ネットワーク インターフェイスに負荷がかかります。または、アプリで、会社のネットワークに接続したときにそれを検出し、デフォルトの icmp とは異なるポートでサーバーに ping を送信し、サーバーにその ping をリッスンさせれば、必要なすべてのことを文書化できます。または、アプリで定期的にサーバーに ping を送信します。デバイスが ping を受け入れないからといって、送信できないわけではありません。

答え3

Fing という Android アプリがあり、基本的にネットワーク上のすべてのデバイスに関する情報 (IP と MAC を含む) をスキャンして表示します。

どのプロトコルを使用しているかはわかりませんが、Appleデバイスを検出します。Wiresharkなどを使用してアプリをリバースエンジニアリングし、同じテクニックをツールで使用できます。(誰かがすでに試しています関連するStack Exchangeサイト

関連情報