如何偵測同一網路中給定設備的IP

如何偵測同一網路中給定設備的IP

我有一個非常典型的情況,我想使用 ssh 將(android)手機連接到同一(wifi)網路中的 Linux 筆記本。 IP 是由 DHCP 分配的,所以我事先只知道客戶端的 IP。知道客戶端的 IP 後,原則上我可以在同一網路中的所有可能的 IP 上循環執行 ssh 命令,以查看伺服器是否正在偵聽。然而,這似乎效率極低。那麼,我如何找出主機的 IP(知道它的 MAC 位址)以便我可以使用 ssh 連接到它?我知道其他軟體可以實現類似的功能,所以它一定是可能的。相關:我可以在客戶端(假設是 Linux)上為該 IP 動態分配主機名,以便我可以在 ssh 設定檔中使用靜態條目嗎?

答案1

您可以透過以下兩個步驟來完成:

步驟1:

掃描您的子網路以填入 ARP 快取。有一些方法,但我建議fping。透過在終端機中執行以下命令在 Ubuntu 上安裝它:

apt-get install fping

....然後掃描您的網路(例如,子網路 192.168.10.0/24):

fping -g 192.168.10.0/24

現在 ARP 快取已充滿子網路中裝置的 MAC 位址。

第2步

在 ARP 快取上套用適當的篩選器以僅查看目標裝置。只需使用以下命令(aa:bb:cc:dd:ee:ff設備的MAC位址在哪裡):

arp -n | grep -i aa:bb:cc:dd:ee:ff | cut -c-15

輸出是目標設備的 IP 位址。

編輯1:

範例 MAC 位址已變更為小寫,因為 Linux 以這種方式顯示(與使用大寫的 Microsoft Windows 不同)

編輯2:

以下 bash 腳本將一個條目新增至主機檔案 ( /etc/hosts) 中,名稱為智慧型手機這樣您就可以使用名稱存取您的設備智慧型手機。要刷新關聯的 IP 位址,只需再次運行即可。將namemac和變更subnet為所需值。

#!/bin/sh
name="cellphone"
mac=aa:bb:cc:dd:ee:ff
subnet=192.168.10.0/24
fping -g ${subnet}
ip="$(arp -n | grep -i ${mac} | cut -c-15)"
sed -i".bak" '/'${name}'/d' /etc/hosts
if [ -z "$ip" ]; then
    echo "Device not found!"
else
    echo "${ip}\t${name}" >> /etc/hosts
fi

答案2

零配置可能是這裡的解決方案。它是一種發現網路上的服務並在兩台主機之間建立連結的協定。

如果您設定 avahi mDNS(套件avahi-daemonlibnss-mdns),主機會公佈其主機名,您可以使用 解析它們<hostname>.local

答案3

聽起來你的問題是你正在將某些東西插入網路並且你希望能夠知道它將獲得什麼IP。

在此基礎上,聽起來最簡單的解決方案是設定 DHCP 伺服器,為適當的 MAC 位址提供靜態 IP。

您可以控制 DHCP 伺服器嗎?如果是這樣,您可能可以做以下兩件事之一:

  • 檢查日誌以查看給定 MAC 指派的 IP。
  • 設定靜態地圖。

相關內容