장치의 MAC 주소를 사용하여 현재 Windows PC/서버에서 네트워크에 연결되어 있는지 확인하는 빠르고 안정적인 방법이 있습니까? 그렇지 않다면 Ubuntu 서버에서?
- arp -a 항목이 캐시에 너무 오래 머무르기 때문에 자체적으로 작동하지 않습니다.
- arp -a를 5분마다 캐시 지우기와 결합하면 작동할 수 있지만 비효율적으로 보이며 캐시가 5분 이내에 완전히 다시 채워지는 경우에만 작동합니다. 그럴까요?
배경: 직장에 출근하는 것이 지겨워서 Windows 서비스로 실행되는 빠른 앱을 작성하고, 내 휴대폰이 회사 네트워크에 주기적으로 있는지 확인하고, 이를 데이터베이스에 기록한 다음, 다음을 허용하는 웹 사이트를 호스팅합니다. 주어진 범위에 걸쳐 데이터를 합산하여 내가 사무실에 있었을 때를 볼 수 있습니다(몇 시간 안에 올바른 라이브러리를 사용하여 수행할 수 있는 놀라운 작업).
회사에서 가능한 경우 모든 사람이 근무 시간 시스템 대신 앱을 사용하기로 결정하기까지 약 일주일이 걸렸습니다.
원래 저는 DHCP 예약을 사용하고 정기적으로 Android 휴대폰에 핑을 보내 이를 감지했습니다. 하지만 확장할 때 iPhone이 핑에 응답하지 않는 문제에 빠르게 부딪혔습니다. 그 외에도 핑이 느립니다. 핑을 통해 해당 장치가 있는지 확실하게 확인하는 데는 전화기당 약 1초가 걸립니다.
arp -a를 실행하고 MAC 일치 결과를 조사해 보았지만 항목은 거의 무기한으로 arp 캐시에 남아 있습니다. 캐시를 읽은 다음 플러시하는 것을 고려했지만 시간이 지나면 안정적으로 다시 채워질지 모르겠습니다. 만약 그렇다면 그것은 잠재적인 해결책이지만, 5분마다 arp 캐시를 플러시하는 아이디어는 마음에 들지 않습니다.
현재 해결책은 액세스 포인트에서 SNMP 폴링을 수행하여 연결된 클라이언트를 수집한 다음 이를 구문 분석하여 MAC 일치 항목을 찾을 수 있는지 확인하는 것입니다. 빠르고 안정적이지만 문제의 액세스 포인트에 매우 구체적입니다. 액세스 포인트를 전환하면 다음 액세스 포인트는 SNMP를 통해 연결된 클라이언트를 나열하지 못할 수 있습니다. 그렇더라도 snmp 폴링을 재구성해야 합니다.
특정 전화에서 연결을 허용하는 알려진 포트가 있는 경우 해당 포트에 대한 TCP 연결을 열고 핑 대신 닫을 수 있다고 생각합니다. 하지만 여기 어딘가에 빠른 레이어 2 솔루션이 있어야 한다고 생각합니다. .
답변1
을 사용하지 마십시오 arp
. 사용 arping
.
https://en.wikipedia.org/wiki/Arping
Arping은 컴퓨터 네트워크에서 호스트를 검색하고 조사하기 위한 컴퓨터 소프트웨어 도구입니다. Arping은 네트워크 인터페이스의 MAC 주소로 식별되는 호스트에 주소가 지정된 ARP(주소 확인 프로토콜) 요청 방법을 사용하여 링크 계층 프레임을 전송하여 연결된 네트워크 링크의 호스트를 검색합니다.
유틸리티 프로그램은 ARP를 사용하여 사용자가 제공한 IP 주소를 확인할 수 있습니다. arping 기능은 인터넷 프로토콜 제품군의 인터넷 계층에서 ICMP(인터넷 제어 메시지 프로토콜)를 사용하여 네트워크를 검색하기 위한 유틸리티 ping과 유사합니다.
이는 기본적으로 arp
전체 OS ARP 캐싱 비즈니스 없이 수행되는 작업입니다. 즉, 문자 그대로의 일회성 ARP 요청을 유선으로 보냅니다.
추신: 이 전체 ARP 비즈니스는 단일 로컬 서브넷에서만 작동한다는 점을 기억하십시오. 더 넓은 도달 범위가 필요한 경우 라우터에서 실행해야 합니다.
PPS 짧은 DHCP 임대(예: 1분~5분)를 사용할 수 있습니다. 물론 Apple 장치는 과거에 DHCP 사양을 따르지 않는 것으로 알려져 있었지만 요즘에는 그다지 나쁘지 않습니다. 나는 희망.
PPPS Even은 arping
100% 신뢰할 수는 없습니다(물론 99% 이상이어야 함). 일부 장치는 핑을 무시하는 것처럼 일부 장치는 원치 않는 인바운드 arp 요청을 무시합니다. 예, IETF를 위반하지만 핑 무시도 마찬가지입니다...
씨.
답변2
ARP를 사용하는 것이 정확했습니다. 다른 방법으로 네트워크에 있다고 알려주는 장치에 의존하고 싶지 않기 때문에 직접 수행할 수 있습니다. ARP는 이를 용이하게 할 수 있으며 Mac 주소를 제공할 뿐만 아니라 네트워크에서 사용하는 IP 주소도 제공합니다. Arpcache를 지우면 필요에 따라 다시 채워집니다. 즉, 네트워크에서 통신해야 했던 주소로만 캐시를 채웁니다.
더 나은 솔루션은 클라이언트의 MAC 주소를 이미 알고 있는 경우 네트워크에서 고정 IP 주소를 할당할 수 있다는 것입니다. 이렇게 하면 캐시가 주기적으로 오래되어 캐싱 문제가 어느 정도 해결됩니다. 이는 다음에 네트워크 인터페이스가 장치와 통신해야 할 때 또 다른 조회를 수행한다는 의미입니다. 이제 Apple 장치가 핑백을 하지 않는 문제가 있으므로 항상 네트워크 브로드캐스트를 핑할 수 있다고 제안했습니다. 예를 들어 게이트웨이가 192.168.1.1인 경우 브로드캐스트는 192.168.1.255이며, 여기에 ping을 보내면 ping을 허용하는 모든 장치가 응답합니다.
요약하자면, 컴퓨터와 라우터 등 간의 패킷 교환을 위해 TCP/IP 프로토콜에 필요한 만큼 안정적으로 다시 채워지므로 arp 캐시를 계속 지울 수 있습니다. 그러나 이는 네트워크 인터페이스에 로드를 가할 뿐입니다. . 또는 앱에서 회사 네트워크에 연결할 때 이를 감지하고 기본 icmp와 다른 포트에서 서버에 ping을 보내고 서버가 해당 ping을 수신하도록 하여 필요한 모든 것을 문서화할 수 있습니다. 아니면 앱이 서버에 너무 자주 핑을 보내도록 하세요. 장치가 핑을 허용하지 않는다고 해서 핑을 보낼 수 없다는 의미는 아닙니다.
답변3
기본적으로 네트워크의 모든 장치에 대한 정보(IP 및 MAC 포함)를 검색하고 표시하는 Fing이라는 Android 앱이 있습니다.
어떤 프로토콜을 사용하는지 모르겠지만 Apple 장치를 감지합니다. Wireshark와 같은 것을 사용하여 앱을 리버스 엔지니어링하고 도구에서 동일한 기술을 사용할 수 있습니다. (누군가 이미 시도한 적이 있습니다.관련 Stack Exchange 사이트에서)