나는 SSH를 사용하여 동일한 (Wi-Fi) 네트워크에 있는 Linux 랩톱에 내 (안드로이드) 휴대폰을 연결하려는 매우 일반적인 상황에 처해 있습니다. IP는 DHCP에 의해 할당되므로 클라이언트의 IP만 미리 알 수 있습니다. 클라이언트의 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:
다음 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
제로 구성여기서 해결책이 될 수도 있습니다. 네트워크에서 서비스를 검색하고 두 호스트 사이에 링크를 설정하는 프로토콜입니다.
avahi-daemon
avahi mDNS(패키지 및 ) 를 설정하면 libnss-mdns
호스트는 호스트 이름을 알리고 를 사용하여 이를 확인할 수 있습니다 <hostname>.local
.
답변3
귀하의 문제는 네트워크에 무언가를 연결하고 그것이 어떤 IP를 얻게 될지 알고 싶어한다는 것입니다.
이를 바탕으로 가장 간단한 해결책은 적절한 MAC 주소에 고정 IP를 제공하도록 DHCP 서버를 구성하는 것 같습니다.
DHCP 서버를 제어할 수 있나요? 그렇다면 다음 두 가지 중 하나를 수행할 수 있습니다.
- 특정 MAC에 할당된 IP를 보려면 로그를 확인하세요.
- 정적 지도를 설정합니다.