소스 검색

添加mac地址

zhouxianguang 6 년 전
부모
커밋
420515f38b

+ 4 - 1
rankin-api-web/src/main/java/cn/rankin/apiweb/controller/LoginController.java

@@ -2,6 +2,7 @@ package cn.rankin.apiweb.controller;
 
 import cn.rankin.apiweb.assist.resolver.RequestHeader;
 import cn.rankin.apiweb.entity.GlobalHeader;
+import cn.rankin.apiweb.helper.MacAddressHelper;
 import cn.rankin.apiweb.service.user.UserService;
 import cn.rankin.common.utils.api.model.APIResult;
 import cn.rankin.common.utils.util.HttpUtil;
@@ -45,10 +46,12 @@ public class LoginController
         loginInfoDTO.setTerminal(terminal);
         loginInfoDTO.setMerchant(merchant);
 
+       String mac = MacAddressHelper.getMacInLinux(ip);
+
         //填充设备信息
         fillDeviceInfo(userAgent, loginInfoDTO);
 
-        log.info("login request header : ip={},terminal={},merchant={},user-agent={}", ip, terminal, merchant, userAgent);
+        log.info("login request header : ip={},terminal={},merchant={},mac={},user-agent={}", ip, terminal, merchant, mac,userAgent);
 
 
         return userService.login(loginInfoDTO);

+ 143 - 0
rankin-api-web/src/main/java/cn/rankin/apiweb/helper/MacAddressHelper.java

@@ -0,0 +1,143 @@
+package cn.rankin.apiweb.helper;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class MacAddressHelper
+{
+    public static String callCmd(String[] cmd) {
+        String result = "";
+        String line = "";
+        try {
+            Process proc = Runtime.getRuntime().exec(cmd);
+            InputStreamReader is = new InputStreamReader(proc.getInputStream());
+            BufferedReader br = new BufferedReader(is);
+            while ((line = br.readLine ()) != null) {
+                result += line;
+            }
+        }catch(Exception 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(Exception e) {
+            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;
+    }
+    public static void main(String[] args) {
+        String mac=getMacInLinux("47.95.197.36");
+        System.out.println("mac:"+mac);
+    }
+
+}