获取指定ip段的所有存活主机的主机名和操作系统

 时间:2024-10-25 06:28:46

1、我们咸犴孜稍先来看一下我们的获取一定网段内存活的主机的方式,我们采用的主要的方法,就是InetAddress.getByName,这个是java的类提供给菀蒯踔观我们的接口,我们需要通过getbyname方法进行Inetaddress的构建,然后通过isreachable的方法来判断这个主机是否存活,我们采用的还是一个逐个枚举来分析的方法。当然我知道有些人会提到arp -a命令,我要说的是arp这个不是对所有类型的主机都可以生效的,java的Inetaddress会更加靠谱一些。

获取指定ip段的所有存活主机的主机名和操作系统

2、然而我也只用到了inetaddress的检索ip的功能,以下就是我在10.45.34.X网段上检索出的所有存活主机的ip,经过试验,我发现java的1.7jdk版本是无法实现这个功能的,只有1.8可以,应该是1.7的部分调用被屏蔽了。inetaddress包含了ping的内容,但是比ping多一个tcp校验。

获取指定ip段的所有存活主机的主机名和操作系统

3、但是这个类还是有部分不周到的地方的,主机名的获取问题很大,经常还是会返回给我一稍僚敉视个ip地址,当然这也可能是因为目标主机防火墙on导致的主机名无法获取的情况,但是有些ping的时候也是可以pin通的,这个就很尴尬。所以我们在获取完ip地址之后,还需要通过一个cmd的ping命令才能获取到其他的信息。下图为我们的cmdping的情况:

获取指定ip段的所有存活主机的主机名和操作系统
获取指定ip段的所有存活主机的主机名和操作系统

4、下面我们就来写一个根据已经存活的主机的IP地址我们的对象主机的代码,这一段代码其实很简单,只是通过cmd的调用来完成,我们需要一些字符串的操作,把我们的TTL的值和我们的主机名获取出来就可以了,代码如下。

获取指定ip段的所有存活主机的主机名和操作系统

5、现在原则上来说我们的代码就已经可以运行了,但是我们需要注意的是,无论是Inetaddress的方法,还是ping的方法,单个运行的效率其实是很低下的,我们这个时候就需要使用到java的多线程方法,而且这个是一个非常明显的生产者-消费者模型,所以我们就大致构建一下,结构如下:

获取指定ip段的所有存活主机的主机名和操作系统

6、这样我们就成功的写好了这么一个程序,对了,再提一句,TTL使我们判断操作系统的标准,但是TTL只能提供这个系统是windows、unix还是linux的简单判断,需要更深入的篦赐尜僳朋友请多了解一下TCP的接口通讯,这会比较复杂而且略微的属于黑客范畴,我就不在这里提到了,以下就是我们程序的运行结果:是不是很简单呢?有时候看上去困难的问题,尝试下,也就不再是困难了,想做个好的程序员,真的很轻松。

获取指定ip段的所有存活主机的主机名和操作系统
  • 重庆主城周边有哪些温泉景点比较好
  • 孕妈妈教胎儿学英文 增进宝宝对英语语言能力
  • 自走旗九精灵
  • 如何培育吊兰
  • 护肤的芦荟可以用来防辐射吗
  • 热门搜索
    交通安全手抄报资料 抗击疫情手抄报图片大全 清明节手抄报模板 春节的来历手抄报 端午节英语手抄报 一二年级防溺水手抄报 民俗手抄报 新年手抄报简单又好看 手抄报国庆节 新学期新征程手抄报