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