使用.NET在特定的开放端口上发现本地网络上的计算机

时间:2010-02-04 01:33:57

标签: c# .net networking

我需要“发现”运行我的Windows WCF服务的本地计算机,所以我可以与他们交谈。现在你必须手动输入ipaddress:端口组合,但我希望有一个(web?)应用程序来监视运行该服务的机器并报告它。

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

TIA

3 个答案:

答案 0 :(得分:4)

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

另外,如果它是一台真正的机器但没有打开端口,它应该快速失败。如果您正在进行子网扫描,那么,是的,您需要(例如)1秒超时。

多线程扫描 - 这是一个有趣的代码

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

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

答案 1 :(得分:1)

您是否可以将客户端配置为联系Web应用程序并报告其运行wcf服务的位置?

这将要求Web应用程序在未更改的已知计算机上运行。

答案 2 :(得分:1)

为什么不让它们经常使用多播来广播“HELLO”数据包。当然,假设在您的方案中可以使用多播,而不是在路由域之间进行通信。只需使用“HELLO”数据包内容(如ipv4单播地址)即可确保您知道应该与之交谈。当然你不需要使用多播,你可以发送一个广播到255.255.255.255这不是一个复杂的任务,然后监听这些消息。这样做的好处是您还可以启用端口协商。例如,如果您的应用程序通常绑定到端口但该端口不可用,它可以自动选择一个端口并让您知道它绑定到哪个端口。避免手动配置维护和头痛问题。地狱,它甚至可以使用广播发送消息并检查它是否收到它。如果没有,请触发让系统管理员知道的警报。 我使用这些线路上的东西来管理软交换机(语音)的测试线束,并且它工作得非常好。 当然,我可能非常关注这一点。在这里开箱即用。