2010-06-04 71 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; 
    }