【问题标题】:Discover computers on local network with specific open port using .NET使用 .NET 发现具有特定开放端口的本地网络上的计算机
【发布时间】:2010-02-04 01:33:56
【问题描述】:

我需要“发现”运行 Windows WCF 服务的本地计算机,以便与它们交谈。现在你必须手动输入 ipaddress:port 组合,但我想要一个(网络?)应用程序来监控运行服务的机器并报告它。

当我尝试连接到无效的 ip/端口时,它需要“永远”超时,因此检查本地网络上的所有 ip 是不可行的。有没有一种快速的方法来发现哪些机器打开了端口(所有机器的防火墙中都有针对该特定端口的洞)

TIA

【问题讨论】:

    标签: c# .net networking


    【解决方案1】:

    我已经这样做了好几次了。只需将超时值设置得非常低。

    如果它是一台真正的机器但没有打开端口,它应该很快就会失败。如果您正在执行子网扫描,那么,是的,您需要(比如说)1 秒超时。

    多线程扫描 - 编写代码很有趣

    编辑:我找不到我的代码。这是其他人的解决方案链接

    http://social.msdn.microsoft.com/forums/en-US/netfxnetcom/thread/c8161442-61b5-4840-999b-5bb36bda0b6d/

    【讨论】:

    • 你能分享一些sn-ps的代码让我开始吗?我不确定哪些 .NET 类最适合这个。
    【解决方案2】:

    您能否将客户端配置为联系 Web 应用并报告它正在运行您的 wcf 服务的位置?

    这将要求网络应用程序在已知的不会改变的机器上运行。

    【讨论】:

      【解决方案3】:

      为什么不让他们经常使用多播来广播“HELLO”数据包。这当然是假设在您的场景中可以使用多播并且您没有跨路由域进行通信。只需使用“HELLO”数据包内容,例如 ipv4 单播地址,即可确保您知道应该与什么对话。当然你不需要使用多播,你可以向 255.255.255.255 发送一个广播,这不是一个复杂的任务,然后监听这些消息。这样做的好处是您还可以启用端口协商。例如,如果您的应用程序通常绑定到一个端口,但该端口不可用,它可以自动选择一个端口并让您知道它绑定到哪个端口。避免手动配置维护和涉及的麻烦。地狱,它甚至可以使用广播来发送消息并检查它是否收到它。如果没有,请发出警报,让系统管理员知道。 我使用这些方法来管理软开关(语音)的测试工具,它工作得很好。 当然,我可能对此很不屑一顾。只是在这里开箱即用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-03-15
        • 1970-01-01
        • 1970-01-01
        • 2013-09-29
        • 2012-06-19
        • 2013-02-08
        • 2014-10-22
        相关资源
        最近更新 更多