ルーターに接続されているすべての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の場合は、正しい認証の詳細が必要です。
もう1つの方法は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のいずれかで照会する必要があります。
ARPがおそらく行く方法です:[delphi-get-mac-of-router](http://stackoverflow.com/questions/4550672/delphi-get-mac-of-router) –
WinPCapは、ネットワーク上でロギング/スニッフィングやパケットキャプチャを行うためのものであり、IPとMacのみを列挙するものではありません。 –
おそらくそれはちょうど仮定だった – opc0de