3 Stimmen

Ermitteln des TCP-Ports, über den die Website bedient wird

Ich muss einen tcp-Port der angegebenen Website auf IIS 7 und IIS 6 mit C# erhalten. Ich habe eine Konsolenanwendung, die den Namen der Website kennt. Sie sollte einen Port finden, an dem diese Website bedient wird.

4voto

a52 Punkte 366

Die Sie mit Servervariablen erhalten können Request.ServerVariables["SERVER_PORT"]

2voto

Roman Prykhodchenko Punkte 11674

Ich denke, ich kann System.DirectoryServices für IIS 6 und Microsoft.Web.Administration für IIS 7 verwenden.

1voto

Vivian River Punkte 29806

NUN GUT. Ich werde Ihnen eine andere Antwort geben, da Sie bemerkt haben, dass meine letzte Antwort nicht die Antwort auf Ihre Frage war.

Versuchen Sie, eine global.asax Datei zu Ihrer asp.net-Anwendung hinzufügen. Sie enthält Funktionen zur Behandlung verschiedener Ereignisse auf dem Server. Für die Application_Start Funktion können Sie einen Code einfügen, der die Nummer des Ports, über den die Website läuft, in einer Datei oder Datenbank speichert.

Dann kann die Konsolenanwendung auf dieselbe Datei oder Datenbank zugreifen, um die Portnummer zu ermitteln.

Wenn Ihnen das nicht zusagt, wäre vielleicht eine bessere Frage an SO: "Wie kann ich die IIS-Einstellungen für eine Website zur Laufzeit programmatisch auslesen?"

1voto

ggonsalv Punkte 1264

Standardmäßig bindet sich IIS an Port 80 (Standard-HTTP-Port), aber ich bin sicher, die Antwort ist nicht so einfach.

Vielleicht hätten Sie die Admin-Skripte in IIS 6.0 verwenden können, um die IIS-Objekte zu durchsuchen und die Anschlussnummer zu finden, aber das setzt voraus, dass das Skript physisch auf dem Server läuft.

Die einzige andere Möglichkeit ist, jeden 65535-Port zu scannen, um zu sehen, ob es einen html-Listener gibt, vielleicht mit wget.

1voto

Mehdi Bugnard Punkte 3809

FÜR IIS 7 ;-)

private bool checkPortIsOpen(string portNumer)
    {
        ServerManager serverMgr = new ServerManager();

        int index = 0;
        bool isOpen = true;

        foreach (Site mySite in serverMgr.Sites)
        {
            foreach (Microsoft.Web.Administration.ConfigurationElement binding in mySite.GetCollection("bindings"))
            {
                string protocol = (string)binding["protocol"];
                string bindingInfo = (string)binding["bindingInformation"];

                if (protocol.StartsWith("http", StringComparison.OrdinalIgnoreCase))
                {
                    string[] parts = bindingInfo.Split(':');
                    if (parts.Length == 3)
                    {
                        string port = parts[1];
                        if(port.Equals(portNumer.ToString()))
                        {
                            isOpen = false;
                            webSite_portInUse = mySite.Name;
                        }

                    }
                }
                index++;

            }
        }
        return isOpen;
    }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X