Vista의 PRIDELEGES없이 VISTA의 포트 (httplistener 또는 기타 .NET 코드 사용)에서들을 수 있습니까? [복제하다

StackOverflow https://stackoverflow.com/questions/169904

  •  05-07-2019
  •  | 
  •  

문제

이 질문은 이미 여기에 답이 있습니다.

사용자가 사용자 정의 포트에서 프록시를 설정할 수 있도록 httplistener를 사용하고 있습니다. httplistener를 시작하면 Vista의 관리자 권한 하에서 응용 프로그램이 실행되지 않으면 예외가 발생합니다.

내가 읽은 내용에서 이것은 예상되는 행동입니다 - 포트에서 듣기 시작하려면 관리자 권한이 필요합니다. 그러나 나는 관리자에게 고도를 필요로하지 않고 항구에서 듣는 많은 프로그램 (Skype와 같은)을 운영하기 때문에 이것에 대한 방법이 있다고 확신합니다.

httplistener와 함께 할 수있는 방법이 있습니까? 그렇지 않은 경우 .NET 코드로 다른 API 호출을 할 수 있도록 포트를 설정할 수 있습니까?

도움이 되었습니까?

해결책

나는 httplistener를 사용한 적이 없지만, 당신의 설명에서, 당신은 당신의 응용 프로그램을 서버 URL 네임 스페이스에 포함시키는 대신 일반 TCP 포트에서 듣고 싶은 것처럼 들립니다 (httplistener가하는 것). 일반 소켓 함수 (System.net.sockets.tcplistener)를 사용하여 관리자 권한을 필요로하지 않고 TCP 포트에서 열고들을 수 있어야합니다. 나는 Skype가 httplistener를 사용하지 않는 거의 확실합니다.

다른 팁

일반적인 TCP/IP (비교적 간단함)를 사용하여 고유 한 HTTP 서버를 작성할 수 있지만 HTTPLISTERE를 사용하는 것이 더 쉽습니다. HTTP.SYS 기능을 Windows XP SP2에 활용합니다.

그러나 http.sys는 URL ACL의 개념을 추가합니다. 이는 부분적으로 http.sys를 사용하면 포트 80의 하위 이름 공간에 바인딩 할 수 있기 때문입니다. TCP/IP를 사용하면이 요구 사항을 직접 피하기는 피하지만 이미 사용중인 포트에 바인딩 할 수는 없습니다.

Windows XP에서는 httpcfg.exe 프로그램을 사용하여 사용자 계정에 특정 URL에 바인딩 할 권리를 부여하는 URL ACL을 설정할 수 있습니다. 플랫폼 SDK 샘플에 있습니다.

Windows Vista에서는 httpcfg가 여전히 지원되지만 기능은 Netsh에 흡수되었습니다.

netsh http show urlacl

... 기존 URL ACL 목록을 표시합니다. ACL은 SDDL로 표현됩니다.

netsh http add urlacl url=http://+:80/MyUri user=DOMAIN\User listen=yes

... MyURI 네임 스페이스를 구성하여 도메인 사용자가 요청을들을 수 있도록합니다.

자신의 컴퓨터에서만 요청을 처리 해야하는 경우 (일반적으로 테스트 목적으로) 로컬 호스트 접두사 대신 * 대신.

예를 들어, "http : //*: 9669/"대신 "http : // localhost : 9669/"를 쓸 수 있습니다. 이것은 httplistener와 잘 작동하며 관리 권한이 필요하지 않습니다 (적어도 Windows 7에서는).

글쎄, 나는 비슷한 것을 다루어야했다. 내 컴퓨터는 제한된 도메인에 있으므로 관리자 권한이 없습니다. 약간의 연구와 읽기 후에 나는이 스레드를 발견하고 Netsh 힌트는 테스트를 개발하기 위해 임시 ACL 바인딩을 사용하게 만들었습니다. 내 컴퓨터에는이 규칙이 존재합니다.

이 항목이 있습니다.

'netsh http show urlacl'을 실행하십시오 (위와 같이)

    [...]
        Reservierte URL            : http://+:80/Temporary_Listen_Addresses/
            Benutzer: \Jeder
                Abhören: Yes
                Delegieren: No
                SDDL: D:(A;;GX;;;WD)
    [...]

따라서 httplistener를 비 Admin (Jeder)으로 사용할 수 있습니다.

    [...]
    HttpListener l = new HttpListener();
    string prefix = "http://+:80/Temporary_Listen_Addresses/";
    l.Prefixes.Add(prefix);
    l.Start(); // does not throw any "Permission Denied/Access Denied/Zugriff verweigert"
    [...]

이것이이 스레드를 찾는 사람이라면 누구나 도움이되기를 바랍니다.

XP에서는 먼저 포트를 열기 위해 명령 줄 (httpcfg)을 사용해야했습니다. 그렇지 않으면 아들이 아닌 사람들에게는 작동하지 않습니다.

보다 여기 - 페이지는 문제를 설명하고 지퍼 맨 아래에 그것을 사용할 수있게합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top