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;
}
}
NetInfo.cs
最新推荐文章于 2022-09-27 14:57:32 发布