透過 MAC 快速檢測網路上是否存在實體?

透過 MAC 快速檢測網路上是否存在實體?

是否有一種快速可靠的方法來使用裝置的 MAC 位址來確定它目前是否從 Windows PC/伺服器連接到網路?如果不是,那麼從 Ubuntu 伺服器?

  • arp -a 不能單獨工作,因為項目在快取中停留的時間太長。
  • arp -a 與每 5 分鐘清除一次快取相結合可能會起作用,但似乎效率低下,並且只有在快取在 5 分鐘內完全重新填充時才有效。會嗎?

背景:我厭倦了在工作中打卡,所以我編寫了一個快速應用程序,它作為 Windows 服務運行,定期檢查我的手機是否存在於公司網絡上,將其記錄到數據庫中,然後託管一個網站,允許透過對給定範圍內的資料進行求和,您可以查看我在辦公室時的情況(令人驚訝的是,您可以在幾個小時內使用正確的庫完成很多工作)。

大約一周後,該公司決定希望每個人都盡可能使用該應用程式來代替我們的時鐘系統。

最初,我使用 DHCP 保留並定期 ping 我的 Android 手機來檢測它。然而,在擴展時,我很快就遇到了 iPhone 不響應 ping 的問題。除此之外,ping 速度很慢。每部電話大約需要一秒鐘的時間才能透過 ping 可靠地確認它的存在。

我嘗試運行 arp -a 並梳理 MAC 匹配的結果,但專案幾乎無限期地保留在 arp 快取中。我考慮過讀取緩存,然後刷新它,但我不知道它是否會及時可靠地重新填充。如果確實如此,那是一個潛在的解決方案,儘管我不喜歡每五分鐘刷新 arp 快取的想法。

我目前的解決方案是對我們的存取點進行 SNMP 輪詢以收集其連接的用戶端,然後對其進行解析以查看是否可以找到 MAC 匹配。它速度快、可靠,但它非常特定於所討論的接入點。如果我們關閉存取點,那麼接下來的存取點可能不會透過 SNMP 列出其連接的用戶端。即使他們這樣做,我也需要重新配置 snmp 輪詢。

我在想,如果有一個已知端口接受任何給定手機上的連接,我可以打開一個到該端口的tcp 連接,然後關閉它來代替ping,但我覺得這裡一定有一個快速的第2 層解決方案。

答案1

不要使用arp.使用arping

https://en.wikipedia.org/wiki/Arping

Arping 是一種電腦軟體工具,用於發現和探測電腦網路上的主機。 Arping 透過使用位址解析協定 (ARP) 請求方法傳送連結層訊框來偵測所連接網路連結上的主機,該封包傳送至由其網路介面的 MAC 位址所識別的主機。

此實用程式可以使用ARP來解析使用者提供的IP位址。 arping 的功能類似於公用程式 ping,用於在 Internet 協定簇的 Internet 層使用 Internet 控制訊息協定 (ICMP) 來偵測網路。

它基本上是arp做什麼的,但沒有整個作業系統 ARP 快取業務,即只是在線上發送文字、一次性的 arp 請求。

PS 請記住,整個 ARP 業務只能在單一本地子網路上工作,如果您需要更廣泛的覆蓋範圍,則必須在路由器上運行它。

PPS 您可以只使用較短的 DHCP 租約(例如 1 分鐘到 5 分鐘)。誠然,Apple 設備過去因不遵守 DHCP 規範而聞名,但現在情況應該不會那麼糟。我希望。

PPPS Evenarping不會 100% 可靠(儘管應該在 99% 以上)。某些裝置會忽略未經請求的入站 arp 請求,就像某些裝置忽略 ping 一樣。是的,它違反了 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,並不意味著它不能發送 ping。

答案3

有一個名為 Fing 的 Android 應用程序,它基本上可以掃描並顯示網路上所有裝置的資訊(包括 IP 和 MAC)。

我不知道它使用哪些協議,但它檢測蘋果設備。您可以使用 Wireshark 等工具來嘗試對應用程式進行逆向工程,並在您的工具上使用相同的技術。 (已經有人嘗試過了在相關的 Stack Exchange 網站上

相關內容