我正在使用socket,我正在使用TIdTCPClient和TIdTCPServer。 我需要检查TIdTCPClient连接的TIdTCPServer是否在同一网络上。
我该怎么做?
在
答案 0 :(得分:6)
您需要知道客户端的子网掩码才能进行这种比较。套接字不会公开该信息,因此您必须直接询问操作系统(例如,在Windows上,您可以在GetAdaptersInfo()
或GetAdapterAddresses()
返回的列表中查找客户端连接的本地IP)。一旦你有了掩码,你就可以用它掩盖客户端的IP和服务器的IP,看看结果值是否相同。
答案 1 :(得分:1)
你对“同一个网络”是什么意思?您可以模仿traceroute实用程序并检查有多少跳(及其路由器的地址),并与预期的跳转进行比较。
答案 2 :(得分:0)
点击命中,解决我的情况我只需要验证主机是否是本地主机。
解决方案:
function IsLocalHost(AHost : string) : Boolean;
var
LStrRegexRedeLocal : string;
begin
if LowerCase(AHost) = 'localhost' then
result := True
else
begin
LStrRegexRedeLocal := '(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^192\.168\.)|(^127\.0\.0\.1)';
result := ExecRegExpr(LStrRegexRedeLocal, AHost);
end;
end;