C\#실제 IP 주 소 를 가 져 옵 니 다(IP 를 긴 성형 으로 전환 하고 내부 네트워크 IP 여 부 를 판단 하 는 방법)
이전에 IP 주 소 를 가 져 온 C\#코드 는 다음 과 같 습 니 다.
/// <summary>
/// C# IP
/// </summary>
/// <returns></returns>
public static string GetIP()
{
string ip = HttpContext.Current.Request.ServerVariables["http_x_forwarded_for"];
if (UserCheck.IsNull(ip)) ip = HttpContext.Current.Request.ServerVariables["remote_addr"];
return ip;
}
보아하니 httpx_forwarded_for 는 다른 소프트웨어 나 ISP 에 의 해 수정 되 어 httpx_forwarded_for 에서 실제 프 록 시 ip 주 소 를 얻 을 수 없습니다.이전 로그 인 로 그 는 ip 주소 가 허용 되 는 ip 세그먼트 에 있 는 지 판단 하여 시스템 에 로그 인 할 수 없습니다.마지막 으로 코드 를 수정 하면 다음 과 같 습 니 다.내부 네트워크 나 개인 주소 인지,ipv 4 의 주소 규격 에 부합 되 는 지,부합 되 지 않 는 지,remote 를 사용 하 는 지 판단 합 니 다.addr 클 라 이언 트 의 ip 주 소 를 가 져 옵 니 다.실제 주 소 를 안전하게 가 져 오 는 실현 코드:
/// <summary>
/// C# IP
/// </summary>
/// <param name="ip"></param>
/// <returns></returns>
public static long IpToNumber(string ip)
{
string[] arr = ip.Split('.');
return 256 * 256 * 256 * long.Parse(arr[0]) + 256 * 256 * long.Parse(arr[1]) + 256 * long.Parse(arr[2]) + long.Parse(arr[3]);
}
/// <summary>
/// C# IP / ip
/// </summary>
/// <param name="ip"></param>
/// <returns></returns>
public static bool IsPrivateIp(string ip)
{
long ABegin = IpToNumber("10.0.0.0"), AEnd = IpToNumber("10.255.255.255"),//A IP
BBegin = IpToNumber("172.16.0.0"), BEnd = IpToNumber("172.31.255.255"),//'B IP
CBegin = IpToNumber("192.168.0.0"), CEnd = IpToNumber("192.168.255.255"),//'C IP
IpNum = IpToNumber(ip);
return (ABegin <= IpNum && IpNum <= AEnd) || (BBegin <= IpNum && IpNum <= BEnd) || (CBegin <= IpNum && IpNum <= CEnd);
}
/// <summary>
/// C# IP
/// </summary>
/// <returns></returns>
public static string GetIP()
{
string ip = HttpContext.Current.Request.ServerVariables["http_x_forwarded_for"];
if (UserCheck.IsNull(ip)) ip = HttpContext.Current.Request.ServerVariables["remote_addr"];
else// ip , ipv4
{
ip = ip.Trim().Replace(" ", "");
if (!Regex.IsMatch(ip, @"^\d+(\.\d+){3}$") || IsPrivateIp(ip))
ip = HttpContext.Current.Request.ServerVariables["remote_addr"];// / remote_addr
}
return ip;
}
2014-07-02 업데이트:cdn 가속 문제,cdn 가속 후 http 판단x_forwarded_for,http_x_forwarded_for 는 마음대로 위조 할 수 있 고 모든 내용 을 배치 할 수 있 기 때문에 다음 그림 에 나타 난 ip 주소 에는 내부 망 주소 나 2 개의 ip 주소 에 문제 가 발생 할 수 있 습 니 다.그래서 http 획득x_forwarded_for 내용 을 얻 으 려 면 split 에서 첫 번 째 항목 을 가 져 와 야 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.