2.
//局域网IP
public static string GetClientIP()
{
string userHostAddress = string.Empty;
string HostName = System.Net.Dns.GetHostName(); //得到主机名
System.Net.IPHostEntry IpEntry = Dns.GetHostEntry(HostName); //得到主机IP
userHostAddress = IpEntry.AddressList[0].ToString();
return userHostAddress;
}
4.一台电脑绑定多个MAC则取不到
//获取mac地址
public static string GetCustomerMac()
{
string IP = "192.168.0.12";
string dirResults = "";
ProcessStartInfo psi = new ProcessStartInfo();
Process proc = new Process();
psi.FileName = "nbtstat";
psi.RedirectStandardInput = false;
psi.RedirectStandardOutput = true;
psi.Arguments = "-a " + IP;
psi.UseShellExecute = false;
proc = Process.Start(psi);
dirResults = proc.StandardOutput.ReadToEnd();
proc.WaitForExit();
//匹配mac地址
Match m = Regex.Match(dirResults, "\\w+\\-\\w+\\-\\w+\\-\\w+\\-\\w+\\-\\w\\w");
//若匹配成功则返回mac,否则返回找不到主机信息
if (m.ToString() != "")
{
return m.ToString();
}
else
{
return "找不到主机信息";
}
}
5.一个电脑绑定多个MAC,取正在使用的
//下面一种方法可以获取远程的MAC地址
[System.Runtime.InteropServices.DllImport("Iphlpapi.dll")]
static extern int SendARP(Int32 DestIP, Int32 SrcIP, ref Int64 MacAddr, ref Int32 PhyAddrLen);
[System.Runtime.InteropServices.DllImport("Ws2_32.dll")]
static extern Int32 inet_addr(string ipaddr);
///
/// SendArp获取MAC地址
///
///
目标机器的IP地址如(192.168.1.1)
///
目标机器的mac 地址
public bool getMacAddr_Remote(string RemoteIP)
{
bool masf = false;
System.Text.StringBuilder macAddress = new System.Text.StringBuilder();
try
{
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));
}
else
{
macAddress.Append(temp.Substring(x - 2, 2) + "-");
}
x -= 2;
}
if (macAddress.ToString() != "")
{
dbhelper db = new dbhelper();
DataTable dt = new DataTable();
string sql = "";
sql = "select * from rtbase.dbo.user_ip_mac where ip='" + RemoteIP + "' and mac='" + macAddress.ToString() + "'";
dt = db.getTable(sql);
if (dt.Rows.Count > 0)
{
masf= true;
}
}
}
catch
{
}
return masf;
}
1.
public static string GetTrueIp()
{
string userHostAddress = string.Empty;
userHostAddress = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if ((userHostAddress != null) && (userHostAddress != string.Empty))
{
//可能有代理
if (userHostAddress.IndexOf(".") == -1) //没有".",非IPv4格式
{
userHostAddress = null;
}
else if (userHostAddress.IndexOf(",") != -1) //有",",估计有多个代理,取第一个不是内网的IP。
{
userHostAddress = userHostAddress.Replace(" ", "").Replace("'", "");
string[] strArray = userHostAddress.Split(",;".ToCharArray());
for (int i = 0; i < strArray.Length; i++)
{
if (((IsIPAddress(strArray[i]) && (strArray[i].Substring(0, 3) != "10.")) && (strArray[i].Substring(0, 7) != "192.168")) && (strArray[i].Substring(0, 7)
!= "172.16."))
{
//找到不是内网的地址
return strArray[i];
}
}
}
else
{
//代理即是IP格式
if (IsIPAddress(userHostAddress))
{
return userHostAddress;
}
userHostAddress = null;
}
}
string str2 = ((HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null) && (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]
!= string.Empty)) ? HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] : HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
string empty = string.Empty;
switch (userHostAddress)
{
case null:
case "":
userHostAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
break;
}
if ((userHostAddress == null) || (userHostAddress == string.Empty))
{
userHostAddress = HttpContext.Current.Request.UserHostAddress;
}
return userHostAddress;
}
///
/// 检查输入是否为ip地址字符串
///
///
输入字符串
///
private static bool IsIPAddress(string input)
{
//原作者表达式@"^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$"
return Regex.IsMatch(input, @"^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])((\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])){3}|(\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])){5})$");
}