ルーターに接続されているすべてのMACアドレスを一覧表示したいのですが、これを確認したので、それが可能であることがわかります。
すべてのアプリケーションがこの目的でWinPcapを使用していると思いますが、delphiアプリケーションとインターフェイスする方法はありますか?
ルーターに接続されているすべてのMACアドレスを一覧表示したいのですが、これを確認したので、それが可能であることがわかります。
すべてのアプリケーションがこの目的でWinPcapを使用していると思いますが、delphiアプリケーションとインターフェイスする方法はありますか?
これを行うにはいくつかの方法があります。1つ目は、SNMPを介してルーターに接続し、atTable(1.3.6.1.2.1.3.1)を読み取ることです。これにより、MACアドレスに一致するIPアドレスのリストが表示されます。SynapseのSNMP機能を使用してテーブルを読み取ることができます。SNMPv1またはSNMPv2cを実行しているルーターに接続するには、正しい読み取りコミュニティストリングが必要です。SNMPv3の場合、正しい認証の詳細が必要になります。
もう1つの方法は、ARPを使用することです。ARP要求を送信するには、iphlpapidllを使用できます。ここにあなたが始めるべきいくつかのコードがあります。
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を使用してルーター自体にクエリを実行する必要があります。