2014-07-14 34 views
3

我使用delphi XE6 SOAP服务器WebModuleUnit,我可以得到广域网和局域网的客户端IP地址。如何在delphi SOAP服务器上获取客户端mac地址?

我可以得到客户端的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; 

你能帮帮我吗?

回答

4

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

相关问题