C#获取局域网IP与公网IP的两种实现方式
在C#开发中,获取本机IP地址通常分为局域网IP(内网)和公网IP(外网)两种需求。前者可通过本地DNS解析实现,后者需请求外部服务接口。本文将提供获取这两种IP地址的核心代码片段及注意事项。
获取局域网IP地址
局域网IP是机器在当前本地网络中的标识。通过 Dns.GetHostEntry 方法可以获取主机对应的所有IP地址列表。需要注意的是,返回列表中可能包含IPv6地址或虚拟网卡地址,因此需要遍历判断是否为IPv4类型。
第1步:实现基础IP获取方法
该方法利用 Dns.Resolve 或 Dns.GetHostEntry 获取 IPAddress[] 数组,从中筛选出 IPv4 地址。以下代码展示了如何从列表中获取第一个有效的IPv4地址作为局域网IP:
using System;
using System.Net;
using System.Net.Sockets;
public string GetLocalIPAddress()
{
IPHostEntry host;
string localIP = "";
host = Dns.GetHostEntry(Dns.GetHostName());
foreach (IPAddress ip in host.AddressList)
{
if (ip.AddressFamily == AddressFamily.InterNetwork)
{
localIP = ip.ToString();
break;
}
}
return localIP;
}
此方法依赖于本地配置,若有多块网卡(如WiFi、有线、虚拟机),结果可能取决于路由优先级或枚举顺序,通常第一个IPv4地址即为当前活跃的主局域网IP。
获取公网IP地址
公网IP是互联网上识别你设备的地址,通常由路由器NAT转换得出。由于本地系统无法直接获取此信息,必须通过访问支持返回客户端IP的第三方HTTP服务来实现。
第2步:请求第三方IP查询接口
可以使用 System.Net.HttpWebRequest 请求常见的IP查询网址(如 http://www.ip138.com/ip2city.asp 或 https://ip.seeip.org/)。服务器会返回纯文本或HTML格式的响应,其中包含用户的公网IP。
using System;
using System.IO;
using System.Net;
using System.Text;
public string GetPublicIPAddress()
{
try
{
// 使用一个简单的文本类API,避免解析复杂HTML
string url = "http://myexternalip.com/raw";
WebRequest request = WebRequest.Create(url);
using (WebResponse response = request.GetResponse())
using (Stream stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{
string result = reader.ReadToEnd().Trim();
// 验证是否为合法IP格式可进一步处理
return result;
}
}
catch (Exception ex)
{
Console.WriteLine($"获取公网IP失败: {ex.Message}");
return "";
}
}
原文中使用的 ip138.com 接口返回格式为 HTML 片段(如 "您的IP地址是:[x.x.x.x]"),需要使用 IndexOf 和 Substring 配合正则或字符串替换进行清洗。但更稳定的做法是使用返回纯文本的 API(如上述 raw 路径),减少解析出错的风险。
完整调用与注意事项
将上述两个方法集成到项目中时,请注意以下几点:
- 命名空间引入:确保文件头部包含
using System.Net;和using System.Net.Sockets;。 - 异常处理:网络请求存在超时或不可达风险,务必使用
try-catch包裹外部调用代码。 - 防火墙设置:获取公网IP需要出站HTTP权限,企业内网防火墙可能会拦截此类请求。
第3步:组合使用与结果验证
在实际业务逻辑中,可以根据需求分别调用这两个函数。例如,在P2P连接或内网穿透场景中,可能需要同时记录局域网IP以便内网直连,以及公网IP以便向对端注册。
总结
C#中获取IP地址主要依赖 System.Net.Dns 类和 HTTP 请求能力。局域网IP通过本地主机名解析获得,速度快且无需网络连通性;公网IP需借助外部Web服务,稳定性取决于第三方接口的可用性。开发者应根据实际网络环境和安全性要求选择合适的实现方式。
以上就是C#获取本机局域网IP和公网IP地址的详细内容,更多关于C#网络编程的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









