如何检测本地网络上其他设备的IP地址?

6

我已经使用以下代码(使用sockets)检测出了我的计算机的本地IP地址:

Function Ip_Local : String;
  Var Acces_Sock : TCustomIpClient;
Begin
  Acces_Sock := TCustomIpClient.Create(Nil);
  Try
    Result := Acces_Sock.LocalHostAddr
  Finally
    Acces_Sock.Free;
  End;
End; 

如何检测路由器的内部LAN IP地址,如果可能的话,还包括任何连接到局域网的设备,如DVR?


1
根据定义,默认网关地址已知,可以通过IpHelper API查询,其他设备必须使用UPnP或ICMP进行发现 - Premature Optimization
1个回答

1

使用Indy:

function CsiGetRemoteIpAddress(const pHostName: string): string;
begin
  TIdStack.IncUsage;
  try
    Result := GStack.ResolveHost(pHostName);
  finally
    TIdStack.DecUsage;
  end;
end;

在这种情况下,主机名是什么? - volvox
如果pHostName是我的计算机主机名,那么ResolveHost(pHostName)将解析出我的计算机的IP地址。我不知道路由器的主机名。 - volvox
ok - ResolveHost(pHostName) 函数无法解析给定路由器主机名的 IP 地址,它只能解析计算机主机名的 IP 地址。至少目前是这样。 - volvox

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接