`

java 在linux 获取客户端ip和mac

 
阅读更多

public static String callCmd(String[] cmd) {
        String result = "";
        String line = "";
        Process proc;
        try {
            proc = Runtime.getRuntime().exec(cmd);
            InputStreamReader is = new InputStreamReader(proc.getInputStream());
            BufferedReader br = new BufferedReader(is);
            while ((line = br.readLine()) != null) {
                result += line;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return result;
    }

    /**
     *
     *
     *
     * @param cmd
     *            第一个命令
     *
     * @param another
     *            第二个命令
     *
     * @return 第二个命令的执行结果
     *
     */

    public static String callCmd(String[] cmd, String[] another) {
        String result = "";
        String line = "";
        try {
            Runtime rt = Runtime.getRuntime();
            Process proc = rt.exec(cmd);
            proc.waitFor(); // 已经执行完第一个命令,准备执行第二个命令
            proc = rt.exec(another);
            InputStreamReader is = new InputStreamReader(proc.getInputStream());
            BufferedReader br = new BufferedReader(is);
            while ((line = br.readLine()) != null) {
                result += line;
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return result;
    }

    /**
     *
     *
     *
     * @param ip
     *            目标ip,一般在局域网内
     *
     * @param sourceString
     *            命令处理的结果字符串
     *
     * @param macSeparator
     *            mac分隔符号
     *
     * @return mac地址,用上面的分隔符号表示
     *
     */

    public static String filterMacAddress(final String ip,
            final String sourceString, final String macSeparator) {
        String result = "";
        String regExp = "((([0-9,A-F,a-f]{1,2}" + macSeparator
                + "){1,5})[0-9,A-F,a-f]{1,2})";
        Pattern pattern = Pattern.compile(regExp);
        Matcher matcher = pattern.matcher(sourceString);
        while (matcher.find()) {
            result = matcher.group(1);
            if (sourceString.indexOf(ip) <= sourceString.lastIndexOf(matcher
                    .group(1))) {
                break; // 如果有多个IP,只匹配本IP对应的Mac.
            }
        }
        return result;
    }

    /**
     *
     *
     *
     * @param ip
     *            目标ip
     *
     * @return Mac Address
     *
     *
     *
     */

    public static String getMacInWindows(final String ip) {
        String result = "";
        String[] cmd = { "cmd", "/c", "ping " + ip };
        String[] another = { "cmd", "/c", "arp -a" };
        String cmdResult = callCmd(cmd, another);
        result = filterMacAddress(ip, cmdResult, "-");
        return result;
    }

    /**
     *
     * @param ip
     *            目标ip
     * @return Mac Address
     *
     */
    public static String getMacInLinux(final String ip) {
        String result = "";
        String[] cmd = { "/bin/sh", "-c", "ping " + ip + " -c 2 && arp -a" };
        String cmdResult = callCmd(cmd);
        result = filterMacAddress(ip, cmdResult, ":");
        return result;
    }

    /**
     * 获取MAC地址
     *
     * @return 返回MAC地址
     */
    public static String getMacAddress(String ip) {
        String macAddress = "";
        macAddress = getMacInWindows(ip).trim();
        if (macAddress == null || "".equals(macAddress)) {
            macAddress = getMacInLinux(ip).trim();
        }
        return macAddress;
    }

    /**
     * 获取客户端ip
     *
     * @param request
     * @return
     */
    public static String getIpAddr(HttpServletRequest request) {
        String ip = request.getHeader("x-forwarded-for");
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        if ("0:0:0:0:0:0:0:1".equals(ip)) {
            return "127.0.0.1";
        }
        return ip;
    }

    /**
     * 获取MAC地址(如果获取ip为127.0.0.1的话就不会得到值了。)
     *
     * @throws UnknownHostException
     * @throws SocketException
     */
    public static String getMACAddress(String ip) throws SocketException,
            UnknownHostException {
        if ("127.0.0.1".equals(ip)) {
            return getLocalMac();
        }
        return getMacAddress(ip);
    }

    // 获取本机mac
    private static String getLocalMac() throws SocketException,
            UnknownHostException {
        try {
            InetAddress ip = InetAddress.getLocalHost();
            NetworkInterface network = NetworkInterface.getByInetAddress(ip);
            if (network != null) {
                byte[] mac = network.getHardwareAddress();
                if (mac != null) {
                    StringBuilder sb = new StringBuilder();
                    for (int i = 0; i < mac.length; i++) {
                        sb.append(String.format("%02X%s", mac[i],
                                (i < mac.length - 1) ? "-" : ""));
                    }
                    return sb.toString();
                }
            }
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (SocketException e) {
            e.printStackTrace();
        }
        return null;
    }

分享到:
评论

相关推荐

    java 获取客户端ip mac地址

    ### Java 获取客户端 IP 和 MAC 地址 在Java Web开发中,有时我们需要获取客户端的IP地址甚至是MAC地址,以便进行安全验证、用户行为追踪等操作。本文将详细介绍如何通过Java来实现这一功能。 #### 一、获取客户端...

    java获取客户端ip及mac地址

    ### Java 获取客户端 IP 地址 在 Web 开发中,获取客户端 IP 地址是一项非常重要的功能,尤其是在需要记录用户活动、实现地理位置定位...以上就是关于如何在 Java 中获取客户端 IP 地址及 MAC 地址的相关知识点介绍。

    java编程实现获取服务器IP地址及MAC地址的方法

    在Java编程中,获取服务器的IP地址和MAC地址是常见的需求,特别是在网络通信和系统管理中。本篇文章将详细介绍如何使用Java实现这一功能,包括针对单网卡和多网卡环境的情况。 首先,获取服务器的IP地址通常涉及到`...

    通过java获取远程机器mac地址

    在对网内主机进行监控时需要通过java获取远程机器的mac地址

    java通过ip获取客户端Mac地址的小例子

    在Java编程中,获取客户端的Mac地址通常是用于设备识别或者网络管理等场景。Mac地址(Media Access Control Address)是网络接口控制器(NIC,Network Interface Controller)的物理地址,它是硬件级别的唯一标识。...

    跨平台 获取本机IP/MAC地址,检测是否内网IP,字符串IP转换成Number地址

    本文将深入探讨如何在不同的操作系统上获取本机的IP和MAC地址,以及如何判断一个IP地址是否为内网IP,并将字符串形式的IP地址转换为数值表示。我们将主要关注以下几个知识点: 1. **跨平台获取本机IP地址**: 跨...

    使用JAVA获取客户端MAC地址.pdf

    在Java编程环境中,获取客户端的MAC(Media Access Control)地址是一项常见的需求,特别是在网络通信或者设备识别等场景中。MAC地址是硬件级别的唯一标识符,它对应于网络接口控制器(NIC),在网络通信中用于标识...

    VNC服务端 java客户端

    由于Java的跨平台特性,VNC Java客户端可以在任何安装了Java运行环境的设备上运行,无论是Windows、Mac还是Linux。Java客户端通过实现VNC协议,与VNC服务端建立连接,实现远程桌面的显示和操作。Java客户端可能包含...

    IP地址HTTP请求工具类

    获取本地IP地址,获取本地Host名称,获取Linux下的IP地址,获取用户真实IP地址,get/post请求 相应的工具类

    用java实现获取MAC地址的方法

    ### 使用Java实现获取MAC地址的方法 #### 背景与目的 在计算机网络管理或安全领域,有时需要获取远程主机的MAC地址来进行设备识别或跟踪。本文将介绍一种使用Java编程语言来实现获取本地或远程计算机MAC地址的方法...

    java获取IP地址

    1. **获取客户端IP地址**: - 在传统的JSP页面中,可以通过`HttpServletRequest`的`getRemoteAddr()`方法直接获取客户端的IP地址。这适用于服务器直接与浏览器交互的情况。 - 对于JSF(JavaServer Faces)应用,...

    获取windows or unix系统下服务器MAC地址及服务器IP地址

    在IT领域,获取服务器的MAC(Media Access Control)地址和IP(Internet Protocol)地址是常见的系统管理任务。MAC地址是网络设备的物理地址,而IP地址则是网络通信中的逻辑地址。在Windows和Unix(包括Linux)系统...

    获取主机拨号IP地址

    本文将深入探讨如何在操作系统中获取主机本地IP地址以及宽带拨号时的IP地址,主要针对的是动态分配的IP地址,因为这通常是家庭或小型办公室网络中常见的设置。 首先,我们需要了解IP地址的基本概念。IP地址...

    SAP Java Jco3.0(win32,win64,mac64,linux64)

    - 安装时,需要将JCo的jar文件添加到Java项目的类路径中,同时确保系统路径中包含相应的动态链接库(dll文件在Windows上,dylib文件在Mac上,so文件在Linux上)。 - 配置JCo连接参数,如SAP系统的主机名、端口、...

    sigar的使用

    在本主题中,我们将深入探讨如何使用Sigar,特别是其在获取客户端IP和MAC地址方面的应用。 首先,使用Sigar之前,你需要在项目中引入Sigar的JAR包。在Java项目中,这通常意味着将`sigar.jar`添加到类路径中。在提供...

    java_msn.zip_java msn_java聊天工具_msn_msn ja_网络聊天 java

    这个项目由一位韩国开发者创建,旨在提供跨平台的即时通讯解决方案,因为Java语言的“一次编写,到处运行”特性使得JavaMSN可以在不同的操作系统上运行,如Windows、Linux和Mac OS。 在JavaMSN中,主要涉及以下几个...

    基于JAVA CS远程监控系统软件的实现(源代码+论文).rar

    Java作为编程语言,具有“一次编写,到处运行”的特性,使得Java CS应用可以在多种操作系统上运行,如Windows、Linux和Mac OS等。 其次,远程监控系统的核心功能包括数据采集、传输、存储和分析。在Java CS系统中,...

    毕业论文设计-IT计算机-基于JAVA CS远程监控系统软件的实现(源代码+论文).zip

    Java的“一次编写,到处运行”特性确保了该系统能在多种操作系统上运行,如Windows、Linux或Mac OS。此外,Java丰富的类库和API提供了强大的网络通信支持,这对于构建远程监控系统至关重要。 远程监控系统的核心...

    14-LINUX局域网.pdf

    在数据传输过程中,如浏览网页,数据从应用层(如浏览器)开始,通过传输层(TCP标记端口号),再到网络层(添加源IP和目标IP形成IP数据包),最后在网络接口层加上MAC地址成为帧,通过网卡发送。接收方的处理过程则...

    JAVA聊天程序,功能很强大,希望对你有一定帮助

    其“一次编写,到处运行”的特性使得Java程序能在多种操作系统上运行,包括Windows、Linux、Mac OS等。Java的基础包括类、对象、接口、继承、多态、封装等概念,这些是构建聊天程序的基础。 二、Java网络编程 1. ...

Global site tag (gtag.js) - Google Analytics