2010-06-04 194 views
3

我需要在IIS 7和IIS 6上使用C#獲取指定網站的tcp端口。我有一個知道網站名稱的控制檯應用程序。它應該找到這個網站的服務端口。獲取tcp端口網站服務於

+0

您需要提供更多信息 - 是指列出IIS上的所有網站及其所在端口?或者你的意思是查看http請求並查看它請求的端口?如果您告訴我們您正在嘗試做什麼,我們可以給出合適的答案。 – Oded 2010-06-04 21:19:32

+0

我需要啓動一個具有指定網站名稱的啓動參數的控制檯應用程序。該應用程序應該以等於tcp端口的退出碼退出。 – 2010-06-04 21:21:57

回答

1

好的。我會給你一個不同的答案,因爲你評論說我最後的回答不是你的問題的答案。

嘗試將一個global.asax文件添加到您的asp.net應用程序。它將具有處理服務器上不同事件的功能。對於Application_Start函數,可以使用一些代碼將網站運行的端口號保存在某個文件或數據庫中。

然後,控制檯應用程序可以訪問相同的文件或數據庫來查找端口號。

如果這不適合你,那麼在SO上問一個更好的問題可能是「如何在運行時以編程方式讀取網站的IIS設置?」

+0

在這裏查看更多有用的信息:http://www.w3schools.com/asp/coll_servervariables.asp – 2010-06-04 21:26:30

+0

您是否回答有關ASP.NET網頁的問題? – 2010-06-04 21:26:30

+0

哦,我看到你正在運行一個單獨的網站控制檯程序。一分鐘後,我以爲你從網站上啓動了控制檯程序。 – 2010-06-04 21:38:52

4

你可以用servervariables得到 Request.ServerVariables [「SERVER_PORT」]

+0

我需要在控制檯應用程序中工作的代碼。不在ASP網頁中。 – 2010-06-04 21:28:42

+0

你可以把這些信息放在網頁服務器上......如果你不能掃描每一個端口,只需把這些信息放到ap​​p.config中 – a52 2010-06-18 14:40:56

1

默認情況下,IIS綁定到端口80(默認HTTP端口),但我敢肯定的答案並非如此簡單。

也許你可以在IIS 6.0中使用管理腳本來遍歷IIS對象來查找端口號,但是這假設腳本在服務器上物理運行。

唯一的其他選擇是運行每個65535端口的掃描,以查看是否存在使用wget的html偵聽器。

+1

每一個正常的AV會殺死掃描所有端口的進程。 – 2010-06-06 10:57:29

2

我想我可以使用IIS 6和Microsoft.Web.Administration的System.DirectoryServices爲IIS 7

0

不得不在今天這出自己,並得到了我想要的答案,所以想我會發布它進入這個老的線程。

您可以通過閱讀IIS元數據庫來確定端口,IIS元數據庫在IIS6及更高版本中是一個xml文檔。

在IIS6獲取文件SYSTEMROOT \ SYSTEM32 \ inetserv \ MetaBase.xml和看節點

/配置/ MBProperty/IIsWebServer [@ ServerComment = $ websitename]/serverBindings

在IIS7得到文件systemroot \ system32 \ inetserv \ config \ applicationHost.config (它是xml,儘管擴展名爲.config)並查看節點 /configuration/system.applicationHost/sites/site[@name='$websitename']

1

FOR 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; 
    }