opc*_*0de 3 delphi mac-address winpcap
我想列出连接到我的路由器的所有MAC地址我知道它是可能的,因为我已经看到它完成了.
我认为所有应用程序都使用WinPcap用于此目的是否有一种方法可以将它与我的delphi应用程序连接?
有几种方法可以做到这一点.第一种是通过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.
Run Code Online (Sandbox Code Playgroud)
此方法仅适用于您的本地子网.