私はSSHを使用して同じ(Wi-Fi)ネットワーク上のLinuxラップトップに自分の(Android)携帯電話を接続したいという非常に一般的な状況にあります。 IPはDHCPによって割り当てられるため、クライアントのIPのみを事前に知ることができます。クライアントのIPを知ると、原則として、同じネットワーク上の可能なすべてのIPに対してsshコマンドを繰り返して、サーバーがリッスンしていることを確認できます。しかし、これは非常に非効率的なようです。それでは、SSHを使用してホストに接続できるように、ホストのIP(MACアドレスを知っている)をどのように把握できますか?他のソフトウェアも同様の機能を達成できることがわかっているので、必ず可能です。関連:SSH構成ファイルの静的エントリを使用できるように、クライアント(Linuxと仮定)でこのIPにホスト名を動的に割り当てることはできますか?
答え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:
次のbashスクリプトは、ホストファイル(/etc/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-daemon
avahi mDNS(パッケージと)を設定すると、libnss-mdns
ホストはホスト名を知らせ、を使用してそれを解決できます<hostname>.local
。
答え3
あなたの問題は、ネットワークに何かを接続し、それがどのIPを取得するかを知りたいということです。
これに基づいて、最も簡単な解決策は、適切なMACアドレスに静的IPを提供するようにDHCPサーバーを設定することです。
DHCPサーバーを制御できますか?その場合は、次の2つのいずれかを実行できます。
- 特定のMACに割り当てられているIPを表示するには、ログを確認してください。
- 静的地図を設定します。