C#中如何获取IP地址?,看到问题的时候我也很纠结,纠结的不是这个问题是如何的难回答,而是纠结的是这些问题都是比较基本的常识,也是大家会经常用到的。但是却不断的有人问起,追根究底的原因估计就是没有好好的总结。
为了帮助大家能尽快的掌握这些基础知识,特别在网上搜索了各种解决这个问题的方法。同时I也希望大家以后在开发代码的过程中能够学会总结,学会把基础知识闹闹把握。
先看看IP地址都有哪些分类:
1、本地机器IP地址,指当前设备的网络IP
2、当前页面的IP(Web客户端),指访问网站页面的客户端ip,一般用于网站监控、维护
3、用户IP(客户端),指访问客户端的终端ip地址
源码整理如下:
using System.Net;
using System;
using System.Web;
namespace MarcoPro
{
/// <summary>
/// 共用工具类
/// </summary>
public static class IpHelper
{
#region 获得用户IP
/// <summary>
/// 获得用户IP
/// </summary>
public static string GetUserIp()
{
string ip;
string[] temp;
bool isErr = false;
if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_ForWARDED_For"] == null)
ip = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString();
else
ip = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_ForWARDED_For"].ToString();
if (ip.Length > 15)
isErr = true;
else
{
temp = ip.Split('.');
if (temp.Length == 4)
{
for (int i = 0; i < temp.Length; i++)
{
if (temp[i].Length > 3) isErr = true;
}
}
else
isErr = true;
}
if (isErr)
return "1.1.1.1";
else
return ip;
}
#endregion
#region 获得当前页面客户端的IP
/// <summary>
/// 获得当前页面客户端的IP
/// </summary>
/// <returns>当前页面客户端的IP</returns>
public static string GetIP()
{
string result = String.Empty;
result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (null == result || result == String.Empty)
{
result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
if (null == result || result == String.Empty)
{
result = HttpContext.Current.Request.UserHostAddress;
}
if (null == result || result == String.Empty || !IsIP(result))
{
return "0.0.0.0";
}
return result;
}
#endregion
/// <summary>
/// 是否为ip
/// </summary>
/// <param name="ip"></param>
/// <returns></returns>
private static bool IsIP(string ip)
{
return System.Text.RegularExpressions.Regex.IsMatch(ip,
@"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$");
}
/// <summary>
/// 获取本地机器IP地址
/// </summary>
/// <returns></returns>
public static string GetLocalIP()
{
string strHostIP = string.Empty;
IPHostEntry oIPHost = Dns.GetHostEntry(Environment.MachineName);
if (oIPHost.AddressList.Length > 0)
{
strHostIP = oIPHost.AddressList[0].ToString();
}
return strHostIP;
}
#region 把IP地址转换为数字格式
/// <summary>
/// 把IP地址转换为数字格式
/// </summary>
/// <param name="strIp">IP地址</param>
/// <returns>数字</returns>
public static int IPtoNum(string strIp)
{
string[] temp = strIp.Split('.');
return (int.Parse(temp[0])) * 256 * 256 * 256 + (int.Parse(temp[1])) * 256 * 256 * 256 + (int.Parse(temp[2])) * 256 * 256 * 256;
}
#endregion
}
}