문제

현재 우리는 명령 줄에서 ARP 요청 출력을 구문 분석하고 있습니다.

string cmd = "arp -n ";
cmd.append(ipaddress);
cmd.append(" | grep ");
cmd.append(ipaddress);
fgets( line, 130, fp);
fgets( line, 130, fp);
ret.append(line);
 ...

작동하지만 기본 명령 줄 인터페이스에 크게 의존하지 않는 라이브러리 기능을 사용 하여이 작업을 수행 할 수있는 방법이 있습니까? 이 프로젝트는 현재 LIBPCAP를 사용하고 있습니다.

도움이 되었습니까?

해결책

일반적으로 이것은 OS에 따라 다릅니다. 이것에 대한 실제 표준 API는 없습니다.

Linux에 있다고 가정하면 Open 및 Parse/Proc/Net/Arp. 형식은 ARP 명령의 출력과 유사합니다. ARP 테이블에 넣으려면 최소한 한 번은 문제의 IP에 패킷을 보내야하며, 물론 로컬 세그먼트 외부에서는 아무것도 얻지 못할 것입니다.

이 캐시에 IP를 얻는 것만으로는 쉽습니다. 예를 들어 미사용 포트에서 UDP 패킷을 보내기 만하면 표시됩니다.

또 다른 대안은 원시 소켓을 사용하여 자신의 ARP 패킷을 제작하고 보내는 것이지만 훨씬 더 복잡합니다 :)이 경로를 내려 가고 싶다면 소스 코드를 연구하십시오. arping (오늘 페이지가 다운되었지만 git repo LibpCap과 같은 플랫폼 독립적 인 라이브러리를 사용하여 좀 더 휴대 할 수 있습니다.

다른 팁

나는 조금 걱정한다

외국 호스트의 MAC 주소를 검색하십시오

귀하의 질문의 일부.

동일한 네트워크의 기계에 대한 ARP 테이블에서만 항목을 얻는다는 것을 알고 있기를 바랍니다. 라우터를 통해 기계에 연결하면 ARP 테이블에 라우터 MAC 주소 만 표시됩니다. 따라서 알 수있는 방법이 없습니다 외국 호스트의 MAC 주소 동일한 네트워크의 호스트가 아니라면 (라우터가 관련이 없음).

따라서 대답은 라우터를 통해 도달하는 호스트가 불가능하고 로컬 네트워크에서 호스트가 도달 할 수있는 경우 ARP 명령의 출력조차 플랫폼마다 다를 수 있으므로 플랫폼 특정 액세스 방법 만 사용할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top