接続されたクライアントを確認する最も信頼できる方法は何ですか?

接続されたクライアントを確認する最も信頼できる方法は何ですか?

私は、Yocto を使用して最初から開発した組み込み Linux OS を持っています。これは、Windows XP/7 クライアントと通信します。組み込み OS は DHCP サーバーを実行し、クライアントにアドレスを提供します。問題は、クライアントが「ロックダウン」され、多くの標準ポートと操作方法をブロックすることです。組み込みシステムによってクライアントの存在が検出されると、スタートアップ スクリプトがシステムをテストするサーバーを起動します。そうでない場合は、別の OS に kexec します。システムの起動時間を大幅に増やさずに、起動時 (Linux の場合) にイーサネット経由で接続されたクライアントが存在するかどうかを検出する最適な方法は何ですか?

私が試したことと、うまくいかなかったことは次のとおりです。

  1. ICMPパケットはクライアント側でブロックされるため、従来のpingは機能しません。
  2. arping は機能します (ARP スキャンを使用する nmap も同様) が、Windows クライアントは「スマート」にダイヤルアウトしようとするため、実際に接続を確立するまでに 20 ~ 25 秒かかります。これは許容できません。理想的には、5 ~ 10 秒で何かを検出するべきです。これを高速化するためにサーバー側で設定できるものはありますか? 常に最初にこのパーティションで起動するため、最も速いソリューションが最善のソリューションです。
  3. ifplugd、ethtool、netplugd、および /sys/class/net/eth0/operstate と /sys/class/net/eth0/carrier のプローブは機能しません。組み込みシステムのイーサネット ポートは内部スイッチに接続されているため、ハードウェア的には常に「アップ」かつ「接続」されているためです。
  4. 将来のソリューションでは、クライアント側で Bonjour を使用し、サーバー側で Avahi を使用してコネクションレス プロトコルを使用できるようになると思われますが、実装には時間がかかり、クライアント側に追加するソフトウェアの承認に非常に長い時間がかかるため、暫定的なソリューションが必要になります。

繰り返しになりますが、これらのユニットは別の会社によって構成され、ロックされているため、クライアント側では何もできません。では、クライアントが存在するかどうかを検出するために、サーバー上で他に何を試すことができますか?

答え1

内部スイッチがあるとおっしゃいましたね。そのスイッチの管理にアクセスできますか? I2C (組み込みスイッチ) または SNMP のどちらですか?

組み込み OS が DHCP サーバーを実行していると述べています。クライアントが DHCP 要求を行うと、クライアントが存在し、到達可能であることの証明になるのではないですか?

「スマート」と「ダイヤルアウト」の意味がわかりません。Windows マシンがイーサネットで通信する場合は、ARP に応答する必要があります。これまでのところ、ARP が最良のオプションのようです。

関連情報