获取单个IP或IP段的MAC地址

代码:GetMac.java。

执行class命令示例:java -classpath bin GetMac 192.168.1.3

java -classpath bin GetMac 192.168.1.3  6

代码:

import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;

public class GetMac {

public static void ping(String ip) {

List<String> command = new ArrayList<>();
        command.add("ping");// this is good
        command.add("-w");        
        command.add("100");        
        command.add(ip);
        
        try {
            ProcessBuilder builder = new ProcessBuilder(command);
            builder.redirectErrorStream(true);
            Process process = builder.start();
//            LineNumberReader ir = new LineNumberReader(
//                    new InputStreamReader(process.getInputStream(), Charset.forName("gbk"))); //UTF8
//            String line;
//            while ((line = ir.readLine()) != null) {
//            }
            
            if (process.isAlive()) {
                process.waitFor();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
//        System.out.println("ping");
    }
    
    public static String getMac(String ip) {

List<String> command = new ArrayList<>();
        command.add("arp");// this is good
        command.add("-a");        
        command.add(ip);
        
        try {
            ProcessBuilder builder = new ProcessBuilder(command);
            builder.redirectErrorStream(true);
            Process process = builder.start();
            LineNumberReader ir = new LineNumberReader(
                    new InputStreamReader(process.getInputStream(), Charset.forName("gbk"))); //UTF8
            String line;
            int cnt =0;
            while ((line = ir.readLine()) != null) {
                if("".equals(line.trim()))continue;
                cnt++;
//                System.out.println(line);
//                if(line.contains("动态")) {
                //第三行
                if(cnt==3) {
                    String arr[] = line.split(" ");
                    for(int i=arr.length-1;i>-1;i--) {
                        if(arr[i].length()>0&&arr[i].contains("-")) {
                            return arr[i].toUpperCase();
                        }
                    }
                }
            }
            
            if (process.isAlive()) {
                process.waitFor();
            }
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
        return "";
    }
    
    //命令1: GetMac 192.168.1.3
    //命令2: GetMac 192.168.1.3 5
    public static void main(String[] args) {
        String ip = args[0];
        if(args.length>1) {
            String endIp = args[1]; //结束ip(最末段)
            int end = Integer.parseInt(endIp);
            int index=ip.lastIndexOf(".");
            int start = Integer.parseInt(ip.substring(index+1));  //起始ip(最末段)
            String preStr = ip.substring(0, index+1); //ip段前缀
            for(int i=start;i<=end;i++) {
                String tmpIp = preStr + i;
                ping(tmpIp);
                String mac = getMac(tmpIp);
                System.out.println(tmpIp + " " + mac);
            }
            return;
        }
        ping(ip);
        String mac = getMac(ip);
        System.out.println(ip + " " + mac);
    }
}

通过执行arp命令获取MAC地址相关推荐

  1. 通过执行nbtstat命令获取MAC地址

    获取单个IP或IP段的MAC地址 代码:GetMac2.java. 执行class命令示例:java -classpath bin GetMac2 192.168.1.3 或 java -classp ...

  2. ios根据ARP表获取mac地址

    ios根据ARP表获取mac地址 #ios -(NSString*) getMacAddress:(NSString *)strIP {NSString *macAddr = nil;const ch ...

  3. arp协议获取mac地址,同网段和不同网段。

    arp协议属于OSI模型第二层(数据链路层) 计算机实现网络通信在数据链路层发送数据帧(链路层数据包)实现通讯.而数据帧要发送到目标计算机需要知道,发送端的ip地址和mac地址还有接收端的ip地址和m ...

  4. Windows下,ARP命令绑定MAC地址失败的解决方法

    前言 关于ARP 在局域网中,网络设备的IP和MAC是对应的. 有些病毒.木马程序会伪造IP和MAC地址的对应关系,让本该发送给其它设备的信息,发送给自己,以此窃取数据,或者破坏网络!有一些网络管理工 ...

  5. 集线器Hub、交换机、arp获取mac地址、路由器

    集线器Hub 集线器的英文称为"Hub"."Hub"是"中心"的意思,集线器的主要功能是对接收到的信号进行再生整形放大,以扩大网络的传输距离 ...

  6. Android获取MAC地址

    (1) 调用android 的API: NetworkInterface. getHardwareAddress () 该API的level为9,只有android 2.3以上才有该接口 geMacF ...

  7. java获取mac地址-屏蔽ip封mac地址

    首先要说的是:可以支持外网机器的mac地址获取.  以前弄了一个只能访问局域网. 有防火墙就访问不了, 但是这个不用担心了. 测试了百度的ip,已经可以获得mac地址 测试效果图: java通过ip获 ...

  8. Windows/Linux获取Mac地址和CPU序列号实现

    UUID(Universally Unique Identifier)即通用唯一标识符,是指在一台机器上生成的数字,保证在全球范围的唯一性.可用的开源库如libuuid,可参考https://blog ...

  9. Java 跨平台获取 MAC 地址的两种方法

    前言 有时我们因为软件授权或者其它需要获取主机唯一标识而需要获取用户主机的MAC地址,而本文则将介绍如何通过Java来实现跨平台获取MAC地址的两种方法,同时具体的代码也已上传到GitHub. 如果不 ...

最新文章

  1. jQuery 基本操作
  2. mac 解压_BetterZip for Mac(Mac解压压缩工具)
  3. python入门经典代码-python经典入门学习锦集就这篇够了,强烈建议收藏!
  4. d630无电池升级bios_主板电池没电会怎样?手把手教你拆装主板电池
  5. 关于自增自减的理解2(例子)
  6. 双屏扩展桌面类软件,展示界面位置不正确,或相反,如何解决?
  7. 成人高考计算机基础历年真题,成人高考历年真题及答案
  8. git下载和安装详细
  9. layabox 学习笔记
  10. 技术分享 | Hulu视频广告系统中的算法应用
  11. 诛仙服务器不显示网速,诛仙2解决游戏网速三部曲
  12. UVM-入门实验2_uvm代码实现
  13. python库源码分析_python第三方库Faker源码解读
  14. iOS及Mac开源项目和学习资料
  15. python 动物分类_动物有哪些分类?
  16. 王川:小米盒子背后的人
  17. E3闪光 - 世界第一双启动,PS3的最简单的操作设备到达令人惊讶
  18. Android 音乐播放器用到的几个方法解说
  19. 近期好用的资源搜索(阿里云盘、百度云盘)
  20. 婚恋交友app源码,实现一个不一样的轮播指示器

热门文章

  1. 【Linux云计算架构:第三阶段-Linux高级运维架构】第19章——安装Kali黑客操作系统-利用ettercap实施中间人攻击
  2. 从0开始的技美实战(二)
  3. 考研脱发严重的10大专业,它排第一,没人不服!
  4. python 切片取最后一列_python矩阵的切片(或截取)
  5. c++三种直线绘制算法
  6. share extension 不显示_可折叠双屏、打通“轻会员”,支付宝刷脸设备再升级,不把微信“青蛙Pro”当作竞争...
  7. NX/UG二次开发—建模—关于创建单线汉字的三种思路
  8. php 图片滑动验证 貳
  9. 全球最牛的四个区块链项目
  10. 【ICPC第46届上海站 D题 Strange_Fractions】数学