programing

IP 주소를 가져오는 방법?

muds 2023. 6. 25. 20:39
반응형

IP 주소를 가져오는 방법?

나는 내 사이트에 등록하는 사람이 누구든 IP 주소를 얻고 싶습니다.ASPNET에서 이 작업을 수행하는 방법.다음 코드를 사용했지만 올바른 IP 주소를 얻지 못하고 있습니다.

string ipaddress = Request.UserHostAddress;

이 방법을 사용하여 클라이언트 시스템의 IP 주소를 가져올 수 있습니다.

public static String GetIP()
{
    String ip = 
        HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

    if (string.IsNullOrEmpty(ip))
    {
        ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
    }

    return ip;
}

보안을 위해 IP 주소를 사용하는 경우에는 인프라를 알고 있어야 합니다.

웹 서버와 헤더를 설정하는 클라이언트 간에 프록시를 사용하는 경우, 마지막 주소를 신뢰할 수 있어야 합니다.그런 다음 업데이트와 함께 Muhammed가 제안한 코드를 사용하여 항상 전달 헤더에서 마지막 IP 주소를 가져옵니다(아래 코드 참조).

프록시를 사용하지 않는 경우 X-Forwarded-For 헤더는 스푸핑하기 매우 쉽다는 점에 주의하십시오.당신이 그렇게 하지 않을 명확한 이유가 없는 한 무시하는 것이 좋습니다.

당신이 선택할 수 있도록 Muhammed Akhtar의 코드를 다음과 같이 업데이트했습니다.

public string GetIP(bool CheckForward = false)
{
    string ip = null;
    if (CheckForward) {
        ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
    }

    if (string.IsNullOrEmpty(ip)) {
        ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
    } else { // Using X-Forwarded-For last address
        ip = ip.Split(',')
               .Last()
               .Trim();
    }

    return ip;
}

위키백과 기사는 위험에 대해 더 철저히 설명합니다.

HTTP_X_FORWARDED_FORWARDED_FOR를 사용해야 하지만 쉼표로 구분된 여러 IP 주소를 반환할 수 있습니다. 페이지를 참조하십시오.

그래서 당신은 항상 그것을 확인해야 합니다.저는 개인적으로 스플릿 기능을 사용합니다.

public static String GetIPAddress()
{
    String ip = 
        HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

    if (string.IsNullOrEmpty(ip))
        ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
    else
        ip = ip.Split(',')[0];

    return ip;
}

MVC 6에서는 다음과 같은 방법으로 IP 주소를 검색합니다.

HttpContext.Request.HttpContext.Connection.RemoteIpAddress.ToString()

클라이언트가 투명하고 익명이 아닌 프록시를 통해 연결하는 경우 다음 주소에서 해당 주소를 가져올 수 있습니다.

Request.ServerVariables["HTTP_X_FORWARDED_FOR"]

null을 반환하거나 IP를 가져올 수 없는 경우 "unknown"을 반환할 수 있습니다.

Request.ServerVariables["REMOTE_ADDR"]와 같아야 합니다.Request.UserHostAddress둘 중 하나를 사용할 수 있습니다. 요청이 비클러스터된 프록시에서 전송되지 않은 경우.

그러나 익명 프록시에서 요청이 오면 클라이언트의 IP를 직접 가져올 수 없습니다.그래서 그들은 그 대리인들을 익명이라고 부릅니다.

string result = string.Empty;
    string ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
    if (!string.IsNullOrEmpty(ip))
    {
        string[] ipRange = ip.Split(',');
        int le = ipRange.Length - 1;
        result = ipRange[0];
    }
    else
    {
        result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
    }

언급URL : https://stackoverflow.com/questions/1907195/how-to-get-ip-address

반응형