나는 ssh를 사용하여 동일한 (wifi) 네트워크에 있는 Linux 노트북에 (안드로이드) 전화를 연결하려는 매우 일반적인 상황에 처해 있습니다. IP는 DHCP에 의해 할당되므로 클라이언트 중 하나만 미리 알 수 있습니다. 클라이언트의 IP를 알면 원칙적으로 동일한 네트워크의 가능한 모든 IP에 대해 ssh 명령을 반복하여 서버가 그곳에서 수신하고 있는지 확인할 수 있습니다. 그러나 이는 매우 비효율적인 것 같습니다. 그렇다면 SSH를 사용하여 연결할 수 있도록 호스트의 IP(MAC 주소를 알고 있음)를 어떻게 알아낼 수 있습니까? 나는 이와 같은 것을 달성하는 다른 소프트웨어에 대해 알고 있으므로 가능할 것입니다. 관련 항목: SSH 구성 파일의 정적 항목을 사용할 수 있도록 클라이언트(Linux라고 가정)에서 이 IP에 호스트 이름을 동적으로 할당할 수 있습니까?
답변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:
/etc/hostsbash 스크립트에 따라 이름이 있는 호스트 파일( ) 에 항목을 추가합니다.핸드폰이름으로 기기에 액세스할 수 있도록핸드폰. 연결된 IP 주소를 새로 고치려면 다시 실행하세요. 및 를 name원하는 값으로 변경합니다 .macsubnet
#!/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
Zeroconf여기서 해결책이 될 수 있습니다. 네트워크에서 서비스를 검색하고 두 호스트 사이에 링크를 설정하는 프로토콜입니다.
avahi-daemonavahi mDNS(패키지 및 ) 를 설정하면 libnss-mdns호스트가 호스트 이름을 알리고 <hostname>.local.
답변3
귀하의 문제는 네트워크에 무언가를 연결하고 그것이 어떤 IP를 얻게 될지 알고 싶어한다는 것입니다.
이를 바탕으로 가장 간단한 해결책은 적절한 MAC 주소에 대한 고정 IP를 제공하도록 DHCP 서버를 구성하는 것입니다.
DHCP 서버를 제어할 수 있습니까? 그렇다면 다음 두 가지 중 하나를 수행할 수 있습니다.
- 해당 MAC에 어떤 IP가 할당되었는지 로그를 확인하세요.
- 정적 지도를 설정합니다.


