zoukankan      html  css  js  c++  java
  • 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}
  • 相关阅读:
    PKU 学生的反馈 20091
    PKU 学生的反馈 2009 –2
    中国队有进步
    刚发现博客园又遇到了问题
    今日计划
    Delphi中使用多线程
    在老ASP中使用对象的对象生存期问题
    ASP与Javascript
    ASP & VBScript的错误处理
    对前一段时间学习网络和多线程编程的总结
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/7354708.html
Copyright © 2011-2022 走看看