获取外网与内网IP.rar
在IT领域,获取外网与内网IP是网络编程中常见的需求。这通常涉及到网络通信、网络地址识别以及网络API的使用。以下是对这个主题的详细讲解:我们需要理解什么是外网IP(公网IP)和内网IP(私网IP)。外网IP是互联网上唯一标识一个网络设备的地址,由Internet Service Provider(ISP)分配,每个连接到互联网的设备都有一个唯一的外网IP。而内网IP是局域网内部使用的地址,不直接暴露在互联网上,由路由器分配,同一局域网内的设备可能有相同的内网IP。 Delphi是一款强大的面向对象的Pascal编程环境,常用于开发桌面应用程序。在Delphi中获取外网IP,主要涉及HTTP或DNS请求,通过访问特定的URL(如http://checkip.dyndns.org/)来获取网页中包含的外网IP信息,然后解析这些信息。以下是一个简单的示例: ```pascal uses IdHTTP; function GetExternalIP: string; var HTTP: TIdHTTP; begin HTTP := TIdHTTP.Create(nil); try Result := HTTP.Get('http://checkip.dyndns.org/'); //解析结果,找到IP地址Result := ExtractWord(2, Result, ['(', ')']); finally HTTP.Free; end; ```获取内网IP则相对简单,可以使用Windows API函数`GetAdaptersAddresses`,这是一个获取网络适配器信息的函数,其中包括了内网IP。在Delphi中,可以这样实现: ```pascal uses SysUtils, WinApi.IPHlpAPI; function GetLocalIP: string; var Buffer: Pointer; Size: ULONG; Family, Flags: ULONG; Adapter, NextAdapter: PIP_ADAPTER_ADDRESSES; Address: PIP_ADAPTER_UNICAST_ADDRESS; begin Result := ''; Size := 0; if GetAdaptersAddresses(AF_UNSPEC, GAA_FLAG_INCLUDE_PREFIX, nil, Buffer, Size) = ERROR_BUFFER_OVERFLOW then begin GetMem(Buffer, Size); try if GetAdaptersAddresses(AF_UNSPEC, GAA_FLAG_INCLUDE_PREFIX, nil, Buffer, Size) = NO_ERROR then begin Adapter := PIP_ADAPTER_ADDRESSES(Buffer); while Assigned(Adapter) do begin for Address in Adapter.UnicastAddresses do if (Address.lpSockaddr^.sa_family = AF_INET) or (Address.lpSockaddr^.sa_family = AF_INET6) then begin //检查是否为IPv4或IPv6的内网地址if (Address.lpSockaddr^.sa_family = AF_INET) and (PInAddr(Address.lpSockaddr)^.s_addr INADDR_ANY) then begin Result := inet_ntoa(PInAddr(Address.lpSockaddr)^); Break; end else if (Address.lpSockaddr^.sa_family = AF_INET6) and (not IsIPv6LinkLocal(PIPv6Addr(Address.lpSockaddr)^)) then begin Result := inet_ntop(AF_INET6, PIPv6Addr(Address.lpSockaddr)^, nil, 0); Break; end; NextAdapter := PIP_ADAPTER_ADDRESSES(DWORD(Adapter) + Adapter.IfIndex); Adapter := NextAdapter; end; finally FreeMem(Buffer); end; ```上述代码片段展示了如何在Delphi中获取外网和内网IP地址。对于外网IP,通过HTTP请求获取;对于内网IP,则利用Windows API来遍历本地网络适配器的地址信息。请注意,实际应用中可能需要处理各种异常和错误,例如网络不可达、无效响应等。此外,`delphifans.com.nfo`可能是Delphi论坛或者社区的信息文件,而`获取外网IP`可能是该项目的一个源代码文件,用于实现上述功能。在实际项目中,这些资源可以提供更具体的实现细节或讨论,帮助开发者更好地理解和实现获取内外网IP的功能。
181.62KB
文件大小:
评论区