非常に典型的な状況ですが、同じ (WiFi) ネットワークにある Linux ノートブックに (Android) フォンを SSH を使用して接続したいとします。IP は DHCP によって割り当てられるため、事前にわかっているのはクライアントの IP だけです。クライアントの IP がわかれば、原理的には、同じネットワーク内のすべての可能な IP に対して SSH コマンドをループして、サーバーがそこでリッスンしているかどうかを確認できます。ただし、これは非常に非効率に思えます。では、ホストの IP (MAC アドレスがわかっている) を調べて SSH を使用して接続するにはどうすればよいでしょうか。これと同じような機能を実現する他のソフトウェアがあることは知っているので、おそらく可能であるはずです。関連: クライアント (Linux であると想定) でこの IP にホスト名を動的に割り当てて、SSH 構成ファイルで静的エントリを使用できるようにすることはできますか。
答え1
次の 2 つの手順で実行できます。
ステップ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:
/etc/hosts次のbashスクリプトは、hostsファイル( )に名前のエントリを追加します。携帯電話名前でデバイスにアクセスできるようになります携帯電話関連付けられている IP アドレスを更新するには、もう一度実行します。name、macおよび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
ゼロコンフが解決策になるかもしれません。これは、ネットワーク上のサービスを検出し、2 つのホスト間のリンクを確立するためのプロトコルです。
avahi-daemonavahi mDNS (パッケージおよび)を設定すると、libnss-mdnsホストはホスト名をアドバタイズし、 を使用して解決できるようになります<hostname>.local。
答え3
問題は、何かをネットワークに接続したときに、それがどの IP を取得するか知りたいということのようです。
これを踏まえると、最も簡単な解決策は、適切な MAC アドレスに静的 IP を割り当てるように DHCP サーバーを構成することだと思われます。
DHCP サーバーを制御できますか? 制御できる場合は、次の 2 つのうちのいずれかを実行できます。
- ログをチェックして、指定された MAC に割り当てられた IP を確認します。
- 静的マップを設定します。


