java 获取局域网中的所有主机名和IP地址

DOS命令

命令 意义
net view 获取局域网中的所有主机名
ipconfig -all 获取本地IP,主机名,MAC地址
arp -a 获取本局域网中的所有IP地址和物理地址
ping -a x.x.x.x 获取x.x.x.x的主机名
nbtstat -a 主机名 获取MAC地址

java exec

执行外部命令

String command = "net view"
Runtime r = Runtime.getRuntime();
Process p = r.exec(command);
BufferedReader br = new BufferedReader(new InputStreamReader(p
                    .getInputStream()));

提取局域网IP

public static List<String>  getIPs()
    {
        List<String> list = new ArrayList<String>();
        boolean flag = false;
        int count=0;
        Runtime r = Runtime.getRuntime();
        Process p;
        try {
            p = r.exec("arp -a");
            BufferedReader br = new BufferedReader(new InputStreamReader(p
                    .getInputStream()));
            String inline;
            while ((inline = br.readLine()) != null) {
                if(inline.indexOf("接口") > -1){
                    flag = !flag;
                    if(!flag){
                        //碰到下一个"接口"退出循环
                        break;
                    }
                }
                if(flag){
                    count++;
                    if(count > 2){
                        //有效IP
                        String[] str=inline.split(" {4}");
                        list.add(str[0]);
                    }
                }
                System.out.println(inline);
            }
            br.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println(list);
        return list;
    }

根据IP提取主机名

public static Map<String,String> getHostnames(List<String> ips){

        Map<String,String> map = new HashMap<String,String>();
        System.out.println("正在提取hostname...");
        for(String ip : ips){
            String command = "ping -a " + ip;
            Runtime r = Runtime.getRuntime();
            Process p;
            try {
                p = r.exec(command);
                BufferedReader br = new BufferedReader(new InputStreamReader(p
                        .getInputStream()));
                String inline;
                while ((inline = br.readLine()) != null) {
                    if(inline.indexOf("[") > -1){
                        int start = inline.indexOf("Ping ");
                        int end = inline.indexOf("[");
                        String hostname = inline.substring(start+"Ping ".length(),end-1);
                        System.out.println(hostname);
                        map.put(ip,hostname);
                    }
                }
                br.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        System.out.println("提取结束!");
        return map;
    }

结果

{  222.26.28.51=BY-201507012043,   224.0.0.2=all-routers.mcast.net,   222.26.28.20=xxx-PC,   224.0.0.22=igmp.mcast.net,   222.26.28.218=xxx-PC,   222.26.28.223=xxx-PC}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-25 13:01:04

java 获取局域网中的所有主机名和IP地址的相关文章

写一个交互脚本,实现能够定义主机名及IP地址

写一个交互脚本,实现能够定义主机名及IP地址 脚本内容↓ [[email protected] scripts]# cat xiugaizhuji.sh #!/bin/bash ############################################################# # File Name: jiaohu.sh # Version: V1.0 # Author: clsn # Organization: http://blog.znix.top # Create

Asp.net MVC获取访问系统的客户端计算机的主机名和IP地址

string HostName = string.Empty; string ip = string.Empty; string ipv4 = String.Empty; if (!string.IsNullOrEmpty(System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"])) ip = Convert.ToString(System.Web.HttpContext.Current.Request.Ser

获取本地设备的主机名和ip地址

Python的socket模块提供了类的方法和实例方法,二者区别在于使用类方法时不需要创建套接字对象实例.比如,以下例子利用此模块获取主机名和ip地址. 源代码如下 #!/usr/bin/env python #python network programming cookbook --chapter -1 #This program is optimized for python 2.7 .It may run on any #other python version with/without

Linux CentOS7.0 (02)修改主机名和ip地址

在CentOS中,有三种定义的主机名:静态的(static),瞬态的(transient),和灵活的(pretty). "静态"主机名也称为内核主机名,是系统在启动时从/etc/hostname自动初始化的主机名. "瞬态"主机名是在系统运行时临时分配的主机名,例如,通过DHCP或mDNS服务器分配.静态主机名和瞬态主机名都遵从作为互联网域名同样的字符限制规则. "灵活"主机名则允许使用自由形式(包括特殊/空白字符)的主机名,以展示给终端用户(如

Linux 0-1 修改主机名及IP地址

1.修改主机名   hostname 查看主机名 vi /etc/sysconfig/network 修改hostname=主机名 vi /etc/hosts 修改127.0.1 主机名 service network restart    #/etc/hosts 在域名解析时优先于DNS服务器 2.IP地址 ifconfig 查看目前网络卡信息 cd /etc/sysconfig/network-scripts ls查看网络设备 vi ifcfg-eth0   #设定静态IP DEVICE="

Powershell-查询主机名及IP地址

Dos查询IP地址及主机名信息: 1.ipconfig | find "IPv4" 2.hostname 3.systeminfo |find "主机名:" 默认很多人总是习惯用DOS命令查询,其实Powershell实现起来也是很简单的.如下: Powershell查询IP地址及主机名信息: 1.foreach($ipv4 in (ipconfig) -like '*IPv4*') { ($ipv4 -split ' : ')[-1]} 2.Get-WMIObje

shell_script_查询主机名、ip地址 、DNS地址

#!/bin/bashhostnameip=`/sbin/ifconfig eth0|grep "inet addr:"|sed 's/Bcast.*$//'g |awk -F ":" {'print $2'}`dns=`cat /etc/resolv.conf |grep -v '#'|sed 's/nameserver//'`for i in $ipdo echo "$i"donefor a in $dnsdo echo "$a&q

查看局域网其它电脑的计算机名和IP

一.下面脚本可查看局域网中的电脑计算机名和IP,保存下面文本至记事本.后缀改成bat COLOR 0A CLS @ECHO Off Title 查询局域网内在线电脑IP :send @ECHO off&setlocal enabledelayedexpansion ECHO 正在获取本机的IP地址.请稍等... for /f "tokens=3 skip=2 delims=: " %%i in ('nbtstat -n') do ( set "IP=%%i"

查看局域网其他电脑的计算机名和IP

一.以下脚本可查看局域网中的电脑计算机名和IP,保存以下文本至记事本,后缀改成bat COLOR 0A CLS @ECHO Off Title 查询局域网内在线电脑IP :send @ECHO off&setlocal enabledelayedexpansion ECHO 正在获取本机的IP地址,请稍等... for /f "tokens=3 skip=2 delims=: " %%i in ('nbtstat -n') do ( set "IP=%%i"