gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:52:10 25 4
gpt4 key购买 nike

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

我可以获取客户端 MAC 地址以使用 TCPIP ARP 'iphlpapi.dll' 和 'SendARP' 功能。适用于 LAN,但不适用于 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;

你能帮我一下吗?

最佳答案

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

关于web-services - 如何在delphi SOAP服务器中获取客户端mac地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24731074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com