NetInfo.cs

using System;// String,Convert
using System.Web;// HttpContext.Current
using System.Net;// Dns
using System.Net.Sockets;// AddressFamily
using System.Text.RegularExpressions;// Regex
using System.Management;// 需要在项目中添加System.Management引用

public class NetInfo
{
    /// <summary>
    /// 构造函数
    /// </summary>
    public NetInfo() { }

    /// <summary>
    /// 用户名
    /// </summary>
    public string UserName
    {
        get
        {
            string name = HttpContext.Current.User.Identity.Name;
            return name.Substring(name.IndexOf('\\') + 1);
        }
    }

    /// <summary>
    /// 主机名
    /// </summary>
    public string HostName
    {
        get
        {
            string ipAddr = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
            if (String.IsNullOrEmpty(ipAddr))
            {
                ipAddr = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
                if (String.IsNullOrEmpty(ipAddr))
                {
                    ipAddr = HttpContext.Current.Request.UserHostAddress;
                }
            }
            return Dns.GetHostEntry(ipAddr).HostName;
        }
    }

    /// <summary>
    /// 网络地址
    /// </summary>
    public string NetworkAddress
    {
        get
        {
            string result = null;
            string ipAddr = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
            if (String.IsNullOrEmpty(ipAddr))
            {
                ipAddr = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
                if (String.IsNullOrEmpty(ipAddr))
                {
                    ipAddr = HttpContext.Current.Request.UserHostAddress;
                }
            }
            if (Regex.IsMatch(ipAddr, @"((?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))))"))
            {
                result = ipAddr;
            }
            else
            {
                foreach (IPAddress address in Dns.GetHostAddresses(Dns.GetHostName()))
                {
                    if (address.AddressFamily == AddressFamily.InterNetwork)
                    {
                        result = address.ToString();
                    }
                }
            }
            return result;
        }
    }

    /// <summary>
    /// 物理地址,目前只能显示服务器相应地址,无法显示客户机
    /// </summary>
    public string PhysicalAddress
    {
        get
        {
            string macAddr = String.Empty;
            ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
            ManagementObjectCollection moc = mc.GetInstances();
            foreach (ManagementObject mo in moc)
            {
                if ((bool)mo["IPEnabled"] == true)
                {
                    macAddr = mo["MacAddress"].ToString();
                    break;
                }
            }
            moc = null;
            mc = null;
            return macAddr;
        }
    }

    /// <summary>
    /// 获取网段地址
    /// </summary>
    /// <param name="userIp">网络地址</param>
    /// <param name="userMask">子网掩码</param>
    /// <returns>匹配后的网段地址</returns>
    public string GetSubnet(string userIp, string userMask)
    {
        string[] ip_s = userIp.Split('.');
        string[] mask_s = userMask.Split('.');
        int length = mask_s.Length;
        string result = null;
        bool zero = false;
        for (int i = 0; i < length; i++)
        {
            int ip_n = Convert.ToInt32(ip_s[i]);
            int mask_n = Convert.ToInt32(mask_s[i]);
            int match = ip_n & mask_n;
            if (zero)
            {
                match = 0;
                result += match.ToString();
                if (i != length - 1) result += '.';
                continue;
            }
            if (match != ip_n)
            {
                if (mask_n == 0)
                {
                    result += mask_n.ToString();
                }
                else
                {
                    result += ((ip_n / mask_n) * mask_n).ToString();
                }
                zero = true;
            }
            else
            {
                result += match.ToString();
            }
            if (i != length - 1) result += '.';
        }
        return result;
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值