檢查已連接客戶端的最可靠方法?

檢查已連接客戶端的最可靠方法?

我有一個使用 Yocto 從頭開始開發的嵌入式 Linux 作業系統。這與 Windows XP/7 用戶端對話。嵌入式作業系統運行 DHCP 伺服器並向客戶端提供位址。問題在於客戶端被「鎖定」並阻止了許多標準連接埠和執行操作的方法。如果嵌入式系統偵測到客戶端存在,我的啟動腳本將啟動測試系統的伺服器;否則我 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?

您聲明您的嵌入式作業系統運行 DHCP 伺服器。如果用戶端發出 DHCP 請求,這不是證明客戶端存在並且可以存取嗎?

我不知道你所說的「智能」和「撥出」是什麼意思。如果 Windows 電腦要在乙太網路上進行通信,則需要回應 ARP。到目前為止,琶音似乎是最好的選擇。

相關內容