You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#应用在树莓派Raspbian系统中获取IP与主机名的实现咨询

适配Raspbian树莓派的C#访问端IP与主机名获取方案

你原有代码依赖Windows域环境的DNS反向解析实现主机名获取,迁移到Raspbian(Linux arm架构)后,只要将应用迁移到跨平台的.NET Core/.NET 5+版本,调整IP获取逻辑并增加异常处理,即可同时拿到访问端的IP和主机名。

注意:.NET Framework不支持Linux/arm架构,无法直接在树莓派上运行,迁移前需要先将应用重构为.NET Core 3.1或更高LTS版本的.NET。

实现代码

你原有代码中使用的Request.ServerVariables["REMOTE_ADDR"]属于Windows IIS专属的服务器变量,跨平台下兼容性较差,推荐直接从HTTP连接上下文获取IP,再做反向解析:

// 获取访问端原始IP
IPAddress clientIp = Request.HttpContext.Connection.RemoteIpAddress;
// 处理IPv4映射的IPv6格式,转为可读的标准IPv4字符串
if (clientIp.IsIPv4MappedToIPv6)
{
    clientIp = clientIp.MapToIPv4();
}
string clientIpAddress = clientIp.ToString();

// 反向解析获取主机名,增加异常兜底
string clientHostName = clientIpAddress;
try
{
    var hostEntry = System.Net.Dns.GetHostEntry(clientIp);
    clientHostName = hostEntry.HostName;
}
catch (System.Net.Sockets.SocketException)
{
    // 无对应PTR解析记录时,默认用IP作为主机名填充,可根据业务需求调整
}

运行环境配置注意事项

  • 如需正常解析Active Directory域内设备的完整主机名,需要将树莓派Raspbian系统的默认DNS地址修改为域内DNS服务器地址,否则只能解析当前局域网可识别的主机名。
  • 必须保留反向解析的异常捕获逻辑:跨网络环境下大量IP没有对应的PTR解析记录,未做异常处理会直接抛出运行时异常导致请求中断。
  • 树莓派上部署对应版本的.NET运行时即可,System.Net.Dns属于.NET标准库自带API,无需安装额外依赖包。

内容的提问来源于stack exchange,提问作者Henrique Pombo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 23:51:01