문제

로컬로 실행되는 경우 디버깅 동작을 표시하는 웹 응용 프로그램을 실행 중입니다 - 리소스 문자열 주변의 인용문 등 - 인터넷에 액세스 할 수없는 컨퍼런스에서 랩톱에서 응용 프로그램을 데모하고 싶습니다. 그것은 로컬이어야합니다.

응용 프로그램은 httpcontext.current.request.islocal을 사용하여 로컬로 실행 중인지 확인합니다.이를 속이는 방법이 있습니까? 실제로 현지에서 달리고 있지만 "거짓"을 반환하도록 속이고 싶습니다.

소스 코드에 액세스 할 수 있습니다 (그리고 "Islocal"수표가 댓글을 달 수있는 빌드를 데모 할 수는 있지만이 데모를위한 특별한 빌드를 만들지 않을 것입니다. 필요하다면 그렇게 할 것입니다. 그러나 기존 코드베이스를 그대로 사용하고 싶습니다.

도움이 되었습니까?

해결책

이를 통해 IIS의 로컬 인스턴스에 대한 요청에 따라 비 로컬 IP 주소를 스푸핑해야합니다. 나는 당신이 아마도 그 일을하는 것보다 데모 빌드를 만드는 데 더 적은 시간을 소비한다고 생각합니다.

다른 팁

request.islocal 속성은 다음 코드를 구현합니다.

public bool IsLocal { 
            get {
                String remoteAddress = UserHostAddress; 

                // if unknown, assume not local
                if (String.IsNullOrEmpty(remoteAddress))
                    return false; 

                // check if localhost 
                if (remoteAddress == "127.0.0.1" || remoteAddress == "::1") 
                    return true;

                // compare with local address
                if (remoteAddress == LocalAddress)
                    return true;

                return false;
            } 

출처 : 소스 소스 코드 (Microsoft : 참고 문헌 .microsoft.com )

도움이 되었기를 바랍니다 !

나는 이것이 사실이라고 생각하지만 지금 당장 확인할 수는 없습니다.

사이트가 루프백 주소 127.0.0.1에 묶여있을 때 ISLOCAL은 TRUE를 반환합니다.

IIS에서 귀하의 웹 사이트가 기계의 비 루백 주소 중 하나 (예 : 192.168.1.100)에 묶여 있는지 확인하면 Islocal은 False를 반환해야합니다.

Cassini는 정의에 따라 항상 로프백 주소에만 결합 할 수 있기 때문에 항상 로컬입니다.

서버에 여러 IP 주소가있는 경우 추가 코드가 필요합니다. 다음은 여러 IP 주소를 처리하고 CloudFlare와 같은 CDN을 request.userhostaddress 속성에 잘못된 IP 주소를 갖습니다.

암호:

private bool IsLocal()
{
    if (Request.IsLocal)
    {
        return true;
    }
    string forwardIP = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
    foreach (NetworkInterface netInterface in NetworkInterface.GetAllNetworkInterfaces())
    {
        IPInterfaceProperties ipProps = netInterface.GetIPProperties();
        foreach (UnicastIPAddressInformation addr in ipProps.UnicastAddresses)
        {
            string ipString = addr.Address.ToString();
            if (Request.UserHostAddress == ipString || forwardIP == ipString)
            {
                return true;
            }
        }
    }
    return false;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top