下面是详细讲解“C#获取真实IP地址实现方法”的完整攻略和示例:
一、获取真实IP的意义
在进行网络编程开发时,获取客户端的真实IP地址非常重要,因为很多情况下客户端和服务器之间可能存在代理服务器、反向代理等中间层,这些中间层会在请求头中添加一些信息,从而导致服务器获取到的IP地址不是客户端的真实IP地址。因此,需要通过一些技术手段来获得客户端的真实IP地址。
二、获取真实IP的实现方法
1.获取客户端IP地址的常规方法
在C#编写的Web应用程序中,可以通过查找HTTP请求头中的"X-Forwarded-For"、"Proxy-Client-IP"、"WL-Proxy-Client-IP"等信息,来获取客户端真实的IP地址。具体代码如下:
public static string GetClientIP()
{
string ip = string.Empty;
if (HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null)
{
ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString().Split(',')[0].Trim();
}
else
{
ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString();
}
return ip;
}
2.通过Socket获取客户端IP地址
除了常规方法外,还可以通过Socket获取客户端的真实IP地址,具体代码如下:
public static string GetClientIP()
{
string ip = string.Empty;
try
{
ip = HttpContext.Current.Request.UserHostAddress;
if (string.IsNullOrEmpty(ip) || ip == "::1")
{
//如果是本地访问
IPHostEntry ipHost = Dns.GetHostEntry(Dns.GetHostName());
IPAddress ipAddress = ipHost.AddressList.Where(x => x.AddressFamily == AddressFamily.InterNetwork).FirstOrDefault();
ip = ipAddress.ToString();
}
}
catch
{
//如果获取失败
ip = "";
}
return ip;
}
三、示例
示例一:获取客户端IP地址
下面是一个WebAPI控制器的示例,该控制器可用于获取客户端IP地址:
[Route("api/[controller]")]
[ApiController]
public class IPController : ControllerBase
{
[HttpGet]
public IActionResult GetIP()
{
string ip = HttpHelper.GetClientIP();
if (string.IsNullOrEmpty(ip))
{
return NotFound();
}
else
{
return Ok(ip);
}
}
}
上述控制器可以通过访问"http://localhost:5000/api/IP"来获取客户端IP地址。
示例二:通过Socket获取客户端IP地址
下面是一个可以通过Socket获取客户端IP地址的示例,代码如下:
Socket listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
listenSocket.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8080));
listenSocket.Listen(10);
while (true)
{
Socket clientSocket = listenSocket.Accept();
string ip = ((IPEndPoint)clientSocket.RemoteEndPoint).Address.ToString();
Console.WriteLine(ip);
}
上述代码会监听本地的8080端口,当有客户端连接时,会通过RemoteEndPoint属性获取客户端的IP地址。
四、总结
以上就是C#获取真实IP地址实现方法的攻略和示例。在实际开发过程中,根据实际需求和环境选择恰当的方法获取客户端IP地址。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#获取真实IP地址实现方法 - Python技术站