동일한 네트워크에서 특정 장치의 IP를 감지하는 방법

동일한 네트워크에서 특정 장치의 IP를 감지하는 방법

나는 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를 원하는 값으로 변경합니다 .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

제로 구성여기서 해결책이 될 수도 있습니다. 네트워크에서 서비스를 검색하고 두 호스트 사이에 링크를 설정하는 프로토콜입니다.

avahi-daemonavahi mDNS(패키지 및 ) 를 설정하면 libnss-mdns호스트는 호스트 이름을 알리고 를 사용하여 이를 확인할 수 있습니다 <hostname>.local.

답변3

귀하의 문제는 네트워크에 무언가를 연결하고 그것이 어떤 IP를 얻게 될지 알고 싶어한다는 것입니다.

이를 바탕으로 가장 간단한 해결책은 적절한 MAC 주소에 고정 IP를 제공하도록 DHCP 서버를 구성하는 것 같습니다.

DHCP 서버를 제어할 수 있나요? 그렇다면 다음 두 가지 중 하나를 수행할 수 있습니다.

  • 특정 MAC에 할당된 IP를 보려면 로그를 확인하세요.
  • 정적 지도를 설정합니다.

관련 정보