Java获取局域网中所有ip和Mac地址

这篇具有很好参考价值的文章主要介绍了Java获取局域网中所有ip和Mac地址。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Java获取局域网中所有ip和Mac地址

  1. 定义一个Util

public class IpAndMacUtil {
    /**
     * 获取本机Mac地址
     * @param ia
     * @return
     * @throws SocketException
     */
    private static volatile int num = 0;


    public static String getLocalMac(InetAddress ia) throws SocketException {
        //获取网卡,获取地址
        byte[] mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress();
        String MAC="";
        for (int i = 0; i < mac.length; i++) {
            if (i != 0) {
                MAC += "-";
            }
            //字节转换为整数
            int temp = mac[i] & 0xff;
            String str = Integer.toHexString(temp);
            if (str.length() == 1) {
                MAC = MAC+"0"+str;
            } else {
                MAC += str;
            }
        }
        return MAC;
    }


    /**
     * 获得局域网所有的ip
     * @return
     * @throws IOException
     */
    public static List<String> getAllIp() throws IOException {
        InetAddress host=InetAddress.getLocalHost();
        String hostAddress=host.getHostAddress();
        int pos=hostAddress.lastIndexOf(".");

        //获得本机ip的网段
        String bigNet=hostAddress.substring(0,pos+1);
        List<String> ips= Collections.synchronizedList(new ArrayList<>());
        for (int i=0;i<=225;i++){
            String ip=bigNet+i;
            new Thread(()->{
                try {
                    Process process = Runtime.getRuntime().exec("ping "+ip+" -w 280 -n 1");
                    InputStream inputStream=process.getInputStream();
                    InputStreamReader inputStreamReader=new InputStreamReader(inputStream,"GBK");
                    BufferedReader bufferedReader=new BufferedReader(inputStreamReader);
                    String line=null;
                    String isActive=null;
                    while((line=bufferedReader.readLine()) != null) {
                        if(!line.equals("")){
                            isActive=bufferedReader.readLine().substring(0,2);
                            break;
                        }
                    }
                    if(isActive.equals("来自")){
                        ips.add(ip);
                    }
                }catch (Exception e){
                    e.printStackTrace();
                }
                num++;
            }).start();
        }
        while (num!=225) {}
        return ips;
    }



    /**
     * 根据ip,获取mac地址
     * @param ip
     * @return
     * @throws Exception
     */
    public static String getMacAddress(String ip) throws Exception{
        String result = command("ping "+ip+" -n 2");
        if(result.contains("TTL")){
            result = command("arp -a "+ip);
        }
        String regExp = "([0-9A-Fa-f]{2})([-:][0-9A-Fa-f]{2}){5}";
        Pattern pattern = Pattern.compile(regExp);
        Matcher matcher = pattern.matcher(result);
        StringBuilder mac = new StringBuilder();
        while (matcher.find()) {
            String temp = matcher.group();
            mac.append(temp);
        }
        return mac.toString();
    }

    private static String command(String cmd) throws Exception{
        Process process = Runtime.getRuntime().exec(cmd);
        process.waitFor();
        InputStream in = process.getInputStream();
        StringBuilder result = new StringBuilder();
        byte[] data = new byte[256];
        while(in.read(data) != -1){
            String encoding = System.getProperty("sun.jnu.encoding");
            result.append(new String(data,encoding));
        }
        return result.toString();
    }
}
  1. service调用util

public List<PadMACReq> queryMAC(){
        List<PadMACReq> padMACReq = new ArrayList<>();
        try {
            //获取本机ip,MAC地址
            InetAddress ia = InetAddress.getLocalHost();
            String ip=ia.toString().split("/")[1];
            PadMACReq localMAC = new PadMACReq(ip, IpAndMacUtil.getLocalMac(ia));
            padMACReq.add(localMAC);

            //获取局域网ip,MAC地址
            List<String> allIp = IpAndMacUtil.getAllIp();
            for(int i = 0 ; i < allIp.size() ; i++){
                String macAddress = IpAndMacUtil.getMacAddress(allIp.get(i));
                if(macAddress.isEmpty()){
                    continue;
                }
                PadMACReq macAndIp = new PadMACReq(allIp.get(i),macAddress);
                padMACReq.add(macAndIp);
                System.out.println("正在获取ip,MAC地址");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return padMACReq;
    }
  1. 返回类

public class PadMACReq {
    /** 终端名称ip*/
    private String name;
    /** mac地址*/
    private String mac;
}

文章来源地址https://www.toymoban.com/news/detail-573295.html

到了这里,关于Java获取局域网中所有ip和Mac地址的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何正确修改IP地址为手动或自动获取?(只针对局域网ip 静态ip)

      本文主要和广大电脑用户分享 如何正确修改IP地址为手动或自动获取? 有时候电脑连接不上网络,主要原因是需要修改IP地址,这些针对IP地址的修改来做个详细的介绍。(本文所指修改ip地址的方法,只针对局域网ip  静态ip),动态ip是DHCP自动分配的,需要到路由器设置

    2024年02月05日
    浏览(37)
  • 通过python 获取当前局域网内存在的IP和MAC

    通过python 获取当前局域网内存在的ip

    2024年02月10日
    浏览(31)
  • 配置Vite获取内网IP(Vue3项目​ts版本获取本机局域网IP地址)

    参考文章:vue项目获取本机局域网IP地址(vue.config.js版本) 在Vite中,没有vue.config.js文件,而是使用vite.config.js(或vite.config.ts,如果项目使用TypeScript)来配置项目; 1.获取 IP 需要借助  os  模块,需要先安装依赖: 2.其次在vite.config.ts中引用模块  3.接着,添加一个获取本机内

    2024年02月05日
    浏览(30)
  • 查看局域网内所有IP

    要如何查看局域网内正在使用的电脑的IP一共分以下几个步骤: 第一步:点击电脑左下角的“开始”,然后再点击“运行…”。 第二步:在运行窗口里填入“cmd”,然后点击确定。 第三步:在cmd命令窗口输入“ipconfig/ALL”命令,点击键盘上的回车键。 第四步:这时会在cmd命令

    2024年02月10日
    浏览(28)
  • 查局域网所有占用IP

    按:win+r 出现下面界面,在文本框中输入 cmd 按确定即可出现cmd命令界面 在cmd命令窗口输入你想要ping的网段,下面192.168.20.%i即为你想要ping的网段,%i代表0-255 上面命令执行完后继续输入 arp -a,即统计所有ping通的IP

    2024年02月11日
    浏览(27)
  • 局域网ip地址不够用-增加内网IP地址

    正常情况下局域网的ip地址只有254个,也就是192.168.1.1-192.168.1.254,随着现在联网的设备越来越多,比如监控,智能设备等都需要ip,稍微有点规模的公司254个ip可能就不够用了。哪怎么解决呢? 1、通过改子网掩码来增加内网ip   子网掩码为255.255.255.0时,路由器下面的内网ip最

    2024年02月09日
    浏览(39)
  • Mac上手动配置局域网IP

    拿起心爱的mac笔记本,去项目现场处理问题,项目现场使用的局域网,手动配置参考一下,实操有效哦!话不多说,上图… 步骤1:系统偏好设置 步骤2:选择网络 步骤3:选择右下角的添加服务 步骤4:配置IP地址,子网掩码和路由器(项目现场提供) 步骤5:配置DNS(项目现

    2024年02月13日
    浏览(29)
  • 局域网中快速查询有效IP地址的方法

    局域网中如何快速查询有效IP地址?通常在日常使用电脑中为了让工作站顺利通过局域网上网,我们常常需要先为其配置一个有效的IP地址,不过局域网中究竟还有哪些IP地址没有被使用呢?本文现在为各位网友总结几则快速为工作站分配IP地址的绝招,希望这些技巧能帮助大

    2024年02月05日
    浏览(34)
  • windows下查看同局域网其它主机MAC地址命令

    事情是这样的,今天去面试的时候笔试有一道题问到:Windows下使用什么命令来获知同局域网内其他主机的MAC地址。一开始看到感觉很熟悉,但是却答不上来。原来建站这么就,很多使用都要使用ping命令来测试网站的可连接性和速度等等。 但是这样的ping命令并不可以看到一台

    2024年02月05日
    浏览(51)
  • 判断两个 IP 地址是否在同一个局域网中

    如何判断两个 IP 地址是否在同一个局域网中, 核心知识点是出于一个网络号, 主要是通过本身ip 与 所处的子网掩码进行 计算处理是否处于同一个局域网中(在 TCP/IP协议规则里面,IP地址与子网掩码做与运算)。

    2024年02月13日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包