//CDN加速后取到的IP customerIp = Request.Headers["Cdn-Src-Ip"]; if (!string.IsNullOrWhiteSpace(customerIp)) return customerIp; customerIp = Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (!string.IsNullOrWhiteSpace(customerIp)) return customerIp; if (Request.ServerVariables["HTTP_VIA"] != null) customerIp = Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (customerIp == null) customerIp = Request.ServerVariables["REMOTE_ADDR"]; customerIp = Request.ServerVariables["REMOTE_ADDR"]; if (string.Compare(customerIp, "unknown", true) == 0) return Request.UserHostAddress; return string.IsNullOrWhiteSpace(customerIp) ? userIP : customerIp;

获取ip第二种方式:

public string TestGetIp2()
            return ExcuteAjaxService<object>(() =>
                string ipStr = string.Empty;
                if (Request.ServerVariables["HTTP_VIA"] != null)
                    ipStr = Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
                    ipStr = Request.ServerVariables["REMOTE_ADDR"].ToString();
                string hostName = string.Empty;
                IPAddress ip = IPAddress.Parse(ipStr);
                IPHostEntry host = Dns.GetHostEntry(ip);
                hostName = host.HostName;
                return new { Ip = ipStr, HostName = hostName };

获取mac方式:

[DllImport("Iphlpapi.dll")]
        static extern int SendARP(Int32 destIp, Int32 srcIp, ref Int64 macAddr, ref Int32 phyAddrLen);
        [DllImport("Ws2_32.dll")]
        static extern Int32 inet_addr(string ipaddr);
        public string GetMac(string remoteIp)
            return ExcuteAjaxService<object>(() =>
                var macAddress = new StringBuilder();
                    Int32 remote = inet_addr(remoteIp);
                    Int64 macInfo = new Int64();
                    Int32 length = 6;
                    SendARP(remote, 0, ref macInfo, ref length);
                    string temp = Convert.ToString(macInfo, 16).PadLeft(12, '0').ToUpper();
                    int x = 12;
                    for (int i = 0; i < 6; i++)
                        if (i == 5)
                            macAddress.Append(temp.Substring(x - 2, 2));
                            macAddress.Append(temp.Substring(x - 2, 2) + "-");
                        x -= 2;
                    return macAddress.ToString();
                catch
                    return macAddress.ToString();

辅助方法(与该博客无关):

private string ExcuteAjaxService<T>(Func<T> action)
                var msg = action.Invoke();
                return JsonConvert.SerializeObject(new { IsSuccess = true, Message = msg });
            catch (Exception ex)
                return JsonConvert.SerializeObject(new { IsSuccess = false, Message = ex.Message, Exception = ex });

ending

2019-10-28测试发现:第一种获取ip的方式有效,第二种异常获取ip第一种方式:public string TestGetIp() { return ExcuteAjaxService&lt;object&gt;(() =&gt; { string userIP = "未获取用户IP";... if(Context.Request.ServerVariables["HTTP_VIA"]!=null) ip=Context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString(); ip=Context.Request.ServerVariables["RE
本文实例讲述了C#获取本机IP地址和Mac地址的方法。分享给大家供大家参考。具体分析如下: 查找了几个方法,经过调试修改,下面这个方法能很好的获取到本地的IPMAC地址。可以用于这方面的功能实现。主要是要添加System.Management的引用。 using System; using System.Management; using System.Net; public class Program static void Main(string[] args) string ip = ""; string mac = ""; Managem
使用SendARP获取(在局域网内有效) [System.Runtime.InteropServices.DllImport("Iphlpapi.dll")] private static extern int SendARP(Int32 dest, Int32 host, ref Int64 mac, ref Int32 length); [System.Runtime.InteropServices.DllImport("Ws2_32.dll")]
一、思路(主要用于局域网内) 通过Web获取客户端IP地址较简单,从客户端web服务器发送的数据报中(Request对象)中即可解析出,但实际应用中,还要考虑代理服务器,路由器的转发等等。 而获取MAC的过程较复杂,因为客户端向服务器发送的请求对象中不包含MAC地址,因此得到两种思路来获取客户端MAC地址:   (1).在客户端获取客户机的MAC地址,所以当请求到达客户端后,通...
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">     protected void Page_Load(object sender, EventArgs e)         //获取客户端IPv4         lblClientIPv4.Text = GetClientIPv4();
c#中如何获取本机用户名、MAC地址IP地址、硬盘ID、CPU序列号、系统名称、物理内存 我们在利用C#开发桌面程序(Winform)程序的时候, 经常需要获取一些跟系统相关的信息, c#中如何获取本机用户名、MAC地址IP地址、硬盘ID、CPU序列号、系统名称、物理内存。 首先需要引入命名空间: using System.Management;/// 操作系统的登录用户名: st...
  说明:本文中的内容是我综合博客园上的博文和MSDN讨论区的资料,再通过自己的实际测试而得来,属于自己原创的内容说实话很少,写这一篇是为了记录自己在项目中做过的事情,同时也想抛砖引玉。参考的博文及其作者在下文均有提及。待到自己以后对HTTP、TCP/IP等知识学深入了,一定再来这里深入讨论这个内容。   首先说一下接下来要讲到的一些名词。   在Web开发中,我们大多都习惯...
WebApi过滤器:AuthorizationFilterAttribute -> ActionFilterAttribute -> ExceptionFilterAttribute 记一次VS2022升级.Net7导致原来的.Net6项目编译失败,最后不断排查直到解决的思路与心得【错误编码:NETSDK1045】(sdk排查 -> 分析器排查 -> VS2022升级日志排查) Lingbug: 生成的manifest是没问题的,我在升级2022前,都是可以的,升级后就不行了,升级过程会自动初始化分析器位置,所以我要修改分析器的解析位置,解析我装sdk的文件夹。 记一次VS2022升级.Net7导致原来的.Net6项目编译失败,最后不断排查直到解决的思路与心得【错误编码:NETSDK1045】(sdk排查 -> 分析器排查 -> VS2022升级日志排查) 小超wuli: 难不是路径或配置的 manifest 有没有排错 C#获取当前方法信息,上端调用方方法信息以及方法调用链 为啥调用方的方法是‘MoveNext’? .Net中使用Castle进行IOC+AOP(动态注入+代理) LanPst: CastleRegister 的 Register方法在哪里调用呢? 记一次VS2022升级.Net7导致原来的.Net6项目编译失败,最后不断排查直到解决的思路与心得【错误编码:NETSDK1045】(sdk排查 -> 分析器排查 -> VS2022升级日志排查) c#Enumerable集合的Aggregate扩展方法的三个重载 C#通过表达式树解析出sql语句