39 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using Microsoft.AspNetCore.Mvc;
 | |
| 
 | |
| namespace DysonNetwork.Pass;
 | |
| 
 | |
| [ApiController]
 | |
| [Route("/api/ip-check")]
 | |
| public class IpCheckController : ControllerBase
 | |
| {
 | |
|     public class IpCheckResponse
 | |
|     {
 | |
|         public string? RemoteIp { get; set; }
 | |
|         public string? XForwardedFor { get; set; }
 | |
|         public string? XForwardedProto { get; set; }
 | |
|         public string? XForwardedHost { get; set; }
 | |
|         public string? XRealIp { get; set; }
 | |
|         public string? Headers { get; set; }
 | |
|     }
 | |
|     
 | |
|     [HttpGet]
 | |
|     public ActionResult<IpCheckResponse> GetIpCheck()
 | |
|     {
 | |
|         var ip = HttpContext.Connection.RemoteIpAddress?.ToString();
 | |
| 
 | |
|         var xForwardedFor = Request.Headers["X-Forwarded-For"].FirstOrDefault();
 | |
|         var xForwardedProto = Request.Headers["X-Forwarded-Proto"].FirstOrDefault();
 | |
|         var xForwardedHost = Request.Headers["X-Forwarded-Host"].FirstOrDefault();
 | |
|         var realIp = Request.Headers["X-Real-IP"].FirstOrDefault();
 | |
| 
 | |
|         return Ok(new IpCheckResponse
 | |
|         {
 | |
|             RemoteIp = ip,
 | |
|             XForwardedFor = xForwardedFor,
 | |
|             XForwardedProto = xForwardedProto,
 | |
|             XForwardedHost = xForwardedHost,
 | |
|             XRealIp = realIp,
 | |
|             Headers = string.Join('\n', Request.Headers.Select(h => $"{h.Key}: {h.Value}")),
 | |
|         });
 | |
|     } 
 | |
| } |