Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用java将所有系统名称连接到LAN?_Java_Networking - Fatal编程技术网

如何使用java将所有系统名称连接到LAN?

如何使用java将所有系统名称连接到LAN?,java,networking,Java,Networking,我想把所有的系统都连接到局域网上? 有人能推荐我吗?你为什么想要它们,为什么必须是名字?并非所有系统都有一个名称 你想列举什么样的系统 如果您试图定位自己应用程序的附近实例,请使用多播UDP创建发现协议 如果您试图找到某个具有自己协议的服务器,那么就使用它的协议。我在Java中使用的实现此目的的包称为jcifs。这里是链接到 请注意,要识别子网上的计算机,您需要ping子网上所有可用的Ip地址。从那里,您可以进行反向IP地址查找,以获取机器的详细信息 从OSI的内存来看,之所以要ping网络上的

我想把所有的系统都连接到局域网上?
有人能推荐我吗?

你为什么想要它们,为什么必须是名字?并非所有系统都有一个名称

你想列举什么样的系统

如果您试图定位自己应用程序的附近实例,请使用多播UDP创建发现协议


如果您试图找到某个具有自己协议的服务器,那么就使用它的协议。

我在Java中使用的实现此目的的包称为jcifs。这里是链接到

请注意,要识别子网上的计算机,您需要ping子网上所有可用的Ip地址。从那里,您可以进行反向IP地址查找,以获取机器的详细信息

从OSI的内存来看,之所以要ping网络上的所有机器,是因为ICMP仍然是OSI模型的最低层。尽管您不能仅使用ICMP(ping)请求来信任子网上的所有计算机。原因是大多数Windows机器为了防止钓鱼攻击会阻止该协议。因此,您需要采用两阶段检测方法。首先,使用ICMP ping请求在子网Ip地址上广播。等待1秒后,从ICMP ping请求继续执行到无响应IP地址的SMB连接。您会发现,大多数人都有一台Microsoft Network的共享打印机,该打印机将响应该端口下的请求

另一种方法是使用NetBios反向名称查找,尽管它仍然涉及对子网的IP地址范围进行垃圾邮件处理


希望这能有所帮助。

如果我打算用Java实现这一点,我会选择一些未使用的TCP/IP端口号,然后尝试打开局域网IP地址范围内每个IP地址的套接字。您预计所有连接尝试都会失败,但根据机器是否使用IP地址,它们的失败方式应该有所不同。如果一个IP地址正在使用,你应该得到一个“拒绝连接”。如果未使用,您应该获得“无主机路由”或“无网络路由”。“连接超时”可能表示主机被防火墙围住,或者主机最近处于活动状态,但目前不处于活动状态

另一种方法(我不知道您可以从Java执行)是为网络地址范围内的每个IP地址发送ARP请求,并查看机器的ARP缓存中出现了什么

当然,您可以尝试发送ICMP Ping消息,但它们可能被防火墙拦截

一旦您有一个活动IP地址列表,使用DNS反向查找查找相应的DNS名称。但请注意,并非所有IP地址都绑定到DNS名称


然而,考虑到许多机器和网络使用各种各样的防火墙,并且这些防火墙通常用于丢弃网络消息或发送误导性响应,这一切都有点脆弱

您好,感谢您回复我的邮件,我可以得到一些代码吗?如何使用Jcif类以及如何在lAN NbtAddress.getByName(ipAddress).isActive()中连接系统名。请注意,您需要为每个.getByName创建一个线程,因为它会在当前线程等待响应时使其休眠。或者它将超时。我无法通过使用线程的jcifs获取lan中的所有系统名称。我们是否可以通过提供单个系统ip地址获取所有名称,以及如何为每个系统名称使用线程。我是否可以获得如何获取lan中所有系统名称的代码。请在这方面帮助我。。