在我的公司,我们使用名为IPMsg的小型应用程序,这是一种将消息和文件传递给公司其他同事的信使工具,甚至允许多播消息。
它还列出了用户的用户名、主机名和 IP 地址。
它怎么能做到这一点?没有用于消息路由的服务器,当通过CMD 中的netstat命令检查时,它不会显示任何详细信息,例如它用于通信的协议和端口。
在 VC++ 中的同一站点上也有源代码。我没有看懂一行代码...(我是 C# 人)
谁能解释一下它是如何做到的?
在我的公司,我们使用名为IPMsg的小型应用程序,这是一种将消息和文件传递给公司其他同事的信使工具,甚至允许多播消息。
它还列出了用户的用户名、主机名和 IP 地址。
它怎么能做到这一点?没有用于消息路由的服务器,当通过CMD 中的netstat命令检查时,它不会显示任何详细信息,例如它用于通信的协议和端口。
在 VC++ 中的同一站点上也有源代码。我没有看懂一行代码...(我是 C# 人)
谁能解释一下它是如何做到的?
一种简单的方法是让应用程序侦听某个网络端口,当您启动它的实例时,它会尝试连接到同一网络上每台计算机上的该端口。如果另一台计算机打开了该端口,并且回答正确,那么您已经找到了该应用程序的另一个实例。
IPMsg 可能会多播请求所有客户端报告其用户和主机详细信息。
当 Windows 资源管理器尝试在网络上查找其他计算机时,会使用类似的机制。此处描述了这种类型的多播发现的一个很好的描述。
IPMsg 是一个守护进程,它侦听特定端口上的传入连接,该端口是连接端口。您可以使用 Wireshark 找出它使用的端口。
启动wireshark,开始监听你连接到局域网的接口,然后开始发送任何消息,wireshark 会在屏幕上显示消息以及端口号。
该应用程序是对等软件,不需要中央服务器软件来路由消息。它只有一个接受传入连接的小守护进程。这也是 Jabber 即时通讯协议的工作方式。
正如你所说,它列出了用户的用户名、主机名和 IP 地址,你的意思是它 ping 网络并找到它吗?如果是,那么实际上可以在本地网络上找到计算机的 IP 地址,这需要您知道所连接的子网。
如果您输入正确的子网信息,您可以使用 ARP/ICMP Ping 来了解网络上存在的主机
多播消息也没什么特别的。这是所有网络堆栈都提供的功能。
如果您想在 .NET 中进行多播,这是允许的。检查代码项目上的这个页面,它给出了一个很好的例子