라우터에 연결된 모든 MAC 주소를 나열하고 싶습니다.내 라우터에 연결된 모든 MAC 주소 목록 및 IP 주소
모든 응용 프로그램이이 목적으로 WinPcap을 사용한다고 생각합니다. 내 델파이 응용 프로그램과 인터페이스 할 수있는 방법이 있습니까?
라우터에 연결된 모든 MAC 주소를 나열하고 싶습니다.내 라우터에 연결된 모든 MAC 주소 목록 및 IP 주소
모든 응용 프로그램이이 목적으로 WinPcap을 사용한다고 생각합니다. 내 델파이 응용 프로그램과 인터페이스 할 수있는 방법이 있습니까?
이렇게 할 수있는 방법이 몇 가지 있습니다. 첫 번째는 SNMP를 통해 라우터에 연결하고 atTable (1.3.6.1.2.1.3.1)을 읽는 것입니다. 이렇게하면 MAC 주소와 일치하는 IP 주소 목록이 제공됩니다. Synapse의 SNMP 기능을 사용하여 테이블을 읽을 수 있습니다. SNMPv1 또는 SNMPv2c를 실행하는 라우터에 연결하려면 올바른 읽기 커뮤니티 문자열이 필요합니다. SNMPv3의 경우 올바른 인증 세부 정보가 필요합니다.
또 다른 방법은 ARP를 사용하는 것입니다. ARP 요청을 보내려면 iphlpapi dll을 사용할 수 있습니다. 시작해야 할 코드가 있습니다.
unit MyARP
interface
uses
Windows, Classes, SysUtils, WinSock;
function SendARP(DestIp: DWORD; srcIP: DWORD; pMacAddr: pointer; PhyAddrLen: Pointer): DWORD;stdcall; external 'iphlpapi.dll';
function MySendARP(const IPAddress: String): String;
implementation
function MySendARP(const IPAddress: String): String;
var
DestIP: ULONG;
MacAddr: Array [0..5] of Byte;
MacAddrLen: ULONG;
SendArpResult: Cardinal;
begin
DestIP := inet_addr(PAnsiChar(AnsiString(IPAddress)));
MacAddrLen := Length(MacAddr);
SendArpResult := SendARP(DestIP, 0, @MacAddr, @MacAddrLen);
if SendArpResult = NO_ERROR then
Result := Format('%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X',
[MacAddr[0], MacAddr[1], MacAddr[2],
MacAddr[3], MacAddr[4], MacAddr[5]])
else
Result := '';
end;
end.
이 방법은 로컬 서브넷에서만 작동합니다.
일반적으로 라우터가 이러한 쿼리를 지원한다고 가정하면 SNMP 또는 uPNP를 사용하여 rouer 자체를 쿼리해야합니다.
ARP가 아마도 갈 방법입니다. [delphi-get-mac-of-router] (http://stackoverflow.com/questions/4550672/delphi-get-mac-of-router). –
WinPCap은 네트워크에서 로깅/스니핑 및 패킷 캡처를위한 것으로 IP 및 Mac만을 나열하지 않습니다. –
아마도 당신의 가정 일뿐입니다. – opc0de