如何在delphi SOAP服务器中获取客户端mac地址?

时间:2014-07-14 06:58:18

标签: web-services delphi soap mac-address

我使用delphi XE6 SOAP服务器WebModuleUnit,我可以在WAN和LAN上获得客户端的IP地址。

我可以获取客户端MAC地址以使用TCPIP ARP' iphlpapi.dll'和' SendARP'功能。 工作局域网,但不工作WAN网络。

如何在工作WAN中获取客户端的MAC地址?

我的代码(它没有工作WAN)

type TIPAddr = u_long;
TMACAddr = array [0..5] of byte;
function SendARP (DestIP, SrcIP: TIPAddr; var TMacAddr: TMACAddr; var len: u_long): DWORD; stdcall; external 'iphlpapi.dll' name 'SendARP';
function GetMacAddress(Client: Ansistring):AnsiString;
///------------------------------
implementation
///------------------------------
function GetMacAddress(Client: Ansistring):AnsiString;
var
l: integer;
mac:TMACAddr;
Rets:Integer;
begin
  memset(@mac[0],0,sizeof(mac));
  l:= sizeof (TMACAddr);
 Rets:=sendARP(inet_addr (P_Char (Client)), 0, mac, l);
 result:=AnsiString(Format('%.2X-%.2X-%.2X-%.2X-%.2X-%.2X',[mac[0],mac[1],mac[2],mac[3],
                                                  mac[4],mac[5]]));
end;


unction TTRX_Service.ClientIP: AnsiString;
var
  WebDispatcher: IWebDispatcherAccess;
begin
  Result := '';
  if Supports(GetSOAPWebModule, IWebDispatcherAccess, WebDispatcher) then
    Result := AnsiString(WebDispatcher.Request.RemoteAddr);

  Debug('MAC Adress:%s',[GetMacAddress(Result)]);
end;

你能帮我吗?

1 个答案:

答案 0 :(得分:4)

很简单,你做不到。 WAN上的客户端将位于将执行NAT(网络地址转换)的路由器后面,并且从它们发送的流量似乎来自单个源。您可能没有注意到,但您会发现WAN上同一办公室的两个客户端将具有相同的IP地址。可靠地获取MAC地址的唯一方法是,如果您的客户端将其作为参数发送,作为Web服务调用的一部分,这只有在运行自定义软件而不是Web浏览器时才有效。