java获取当前主机IP

import org.apache.commons.lang3.StringUtils;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class IpUtils {

    private static final String UNKNOWN = "unknown";
    private static final String X_FORWARDED_FOR = "x-forwarded-for";
    private static final String PROXY_CLIENT_IP = "Proxy-Client-IP";
    private static final String WL_PROXY_CLIENT_IP = "WL-Proxy-Client-IP";
    private static final String LOCAL_IPV4 = "127.0.0.1";
    private static final String LOCAL_IPV6 = "0:0:0:0:0:0:0:1";
    private static final String SPLIT = ",";
    private static final int IP_LENGTH = 15;
    private static final int MAX_LINE = 15;


    private IpUtils() {
    }

    /**
     * ip
     *
     * @param request
     * @return
     */
    public static String getIpAddr(HttpServletRequest request) {
        String ipAddress = request.getHeader(IpUtils.X_FORWARDED_FOR);
        if (ipAddress == null || ipAddress.length() == 0 || IpUtils.UNKNOWN.equalsIgnoreCase(ipAddress)) {
            ipAddress = request.getHeader(IpUtils.PROXY_CLIENT_IP);
        }
        if (ipAddress == null || ipAddress.length() == 0 || IpUtils.UNKNOWN.equalsIgnoreCase(ipAddress)) {
            ipAddress = request.getHeader(IpUtils.WL_PROXY_CLIENT_IP);
        }
        if (ipAddress == null || ipAddress.length() == 0 || IpUtils.UNKNOWN.equalsIgnoreCase(ipAddress)) {
            ipAddress = request.getRemoteAddr();
            if (StringUtils.equals(ipAddress, IpUtils.LOCAL_IPV4) || StringUtils.equals(ipAddress, IpUtils.LOCAL_IPV6)) {
                InetAddress inet = null;
                try {
                    inet = InetAddress.getLocalHost();
                } catch (UnknownHostException e) {
                    e.printStackTrace();
                }
                ipAddress = inet.getHostAddress();
            }
        }
        //����ͨ�����������������һ��IPΪ�ͻ�����ʵIP,���IP����','�ָ�
        if (ipAddress != null && ipAddress.length() > IpUtils.IP_LENGTH) {
            if (ipAddress.indexOf(IpUtils.SPLIT) > 0) {
                ipAddress = ipAddress.substring(0, ipAddress.indexOf(IpUtils.SPLIT));
            }
        }
        return ipAddress;
    }

    /**
     * MAC
     *
     * @param ip
     * @return
     */
    public static String getMacAddress(String ip) {
        String str = "";
        String macAddress = "";
        try {
            Process p = Runtime.getRuntime().exec("nbtstat -A " + ip);
            InputStreamReader ir = new InputStreamReader(p.getInputStream());
            LineNumberReader input = new LineNumberReader(ir);
            for (int i = 1; i < IpUtils.MAX_LINE; i++) {
                str = input.readLine();
                if (str != null) {
                    if (str.indexOf("MAC Address") > 1) {
                        macAddress = str.substring(str.indexOf("MAC Address") + 14, str.length());
                        break;
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace(System.out);
        }
        return macAddress;
    }
}
---------------------------------------
pom.xml
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.4</version>
        </dependency> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值