Kann ich auf einem Port (Httplistener oder anderen .NET-Code) auf Vista hören, ohne Administrator-Privilegien zu erfordern? [Duplikat]

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

  •  05-07-2019
  •  | 
  •  

Frage

    

Diese Frage bereits eine Antwort hier:

    
            
  •              Httplistener Zugriff verweigert                                      10 Antworten                          
  •     
    

Ich bin mit Httplistener einem Benutzer zu ermöglichen, einen Proxy auf einem benutzerdefinierten Port einzurichten. Als ich die Httplistener starten, erhalte ich eine Ausnahme, wenn die Anwendung nicht unter Administratorrechten in Vista ausgeführt wird.

Von dem, was ich gelesen habe, das erwartete Verhalten ist - Administratorrechte erforderlich sind auf einem Port starten hören. Aber ich bin sicher, es gibt Möglichkeiten, um dieses, wie ich viele Programme laufen (wie Skype), die, ohne Erhebung zum Administrator auf einem Port zu hören.

Gibt es eine Möglichkeit, dies zu tun mit Httplistener? Wenn nicht, kann ich andere API-Aufrufe in .NET-Code machen den Port einrichten?

War es hilfreich?

Lösung

Ich habe noch nie verwendet eine Httplistener, sondern von Ihrer Beschreibung klingt es eher wie Sie in regelmäßigen TCP-Port hören wollen, sondern Ihre Anwendung in einem Server-URL-Namespace Einbetten (was Httplistener zu tun scheint). Sie sollten regelmäßig Sockel der Lage sein, Funktionen (System.Net.Sockets.TcpListener) verwenden, um auf einem TCP-Port zu öffnen und zu hören, ohne Administratorrechte zu erfordern. Ich bin fast sicher, Skype keine Httplistener verwenden.

Andere Tipps

Während Sie können Ihren eigenen HTTP-Server unter Verwendung von normalen TCP / IP schreiben (es ist relativ einfach), es ist einfacher, Httplistener zu verwenden, die die Vorteile der HTTP.SYS Funktionalität nimmt hinzugefügt in Windows XP SP2.

Allerdings HTTP.SYS fügt das Konzept der URL-ACLs. Dies ist zum Teil, weil HTTP.SYS können Sie Sub-Namespace auf Port 80 Verwenden von TCP / IP direkt diese Anforderung vermeidet binden, bedeutet aber, dass Sie nicht an einen Port binden kann, das sich bereits in Gebrauch ist.

Unter Windows XP können Sie das Httpcfg.exe Programm verwenden, um eine URL ACL Gewährung Ihre Benutzer-Konto einzurichten das Recht auf eine bestimmte URL zu binden. Es ist in der Platform SDK-Beispiele.

Unter Windows Vista wird httpcfg noch unterstützt, aber die Funktionalität wurde in NETSH aufgenommen:

netsh http show urlacl

... wird eine Liste der vorhandenen URL-ACLs zeigen. Die ACLs werden in SDDL ausgedrückt.

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

... das MyURI Namespace so konfigurieren, dass DOMAIN \ User auf Anfragen hören.

Wenn Sie nur Anfragen zu behandeln, von Ihnen Computer besitzen (in der Regel für Testzwecke), können Sie schreiben localhost statt * in Präfix.

Zum Beispiel statt "http: // *: 9669 /" Sie schreiben können "http: // localhost: 9669 /". Dies funktioniert gut mit Httplistener und erfordert keine Administratorrechte (zumindest auf Windows 7).

Nun hatte ich mit etwas Ähnliches zu tun. Arbeitsplatz ist in einer eingeschränkten Domäne, so dass ich nicht über Administratorrechte verfügen. Nach einigen Recherchen und Lesen fand ich diesen Thread und die netsh Hinweise machten mich für die Entwicklung von Tests nur vorübergehend acl Bindungen verwenden. Auf meinem Computer existiert diese Regel.

Es gibt diesen Eintrag:

Ausführen 'netsh http zeigt urlacl' (wie oben dargestellt)

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

So kann ich die Httplistener als Nicht-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"
    [...]

Mai, das hilft jemand diesen Thread zu finden.

In XP, Sie hatten eine Befehlszeile zu verwenden (httpcfg) zuerst den Port zu öffnen, sonst wäre es nicht für Nicht-Administratoren zu arbeiten.

Siehe hier - die Seite erklärt, die Frage, und es gibt ein zip am Boden, um es nutzbar.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top