Java web 怎么得到客户端的 Mac 地址

Python010

Java web 怎么得到客户端的 Mac 地址,第1张

import java.net.InetAddress

import java.net.NetworkInterface

import java.net.SocketException

import java.net.UnknownHostException

/*

* 物理地址是48位,别和ipv6搞错了

*/

public class LOCALMAC {

/**

* @param args

* @throws UnknownHostException

* @throws SocketException

*/

public static void main(String[] args) throws UnknownHostException, SocketException {

// TODO Auto-generated method stub

//得到IP,输出PC-201309011313/122.206.73.83

InetAddress ia = InetAddress.getLocalHost()

System.out.println(ia)

getLocalMac(ia)

}

private static void getLocalMac(InetAddress ia) throws SocketException {

// TODO Auto-generated method stub

//获取网卡,获取地址

byte[] mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress()

System.out.println("mac数组长度:"+mac.length)

StringBuffer sb = new StringBuffer("")

for(int i=0i<mac.lengthi++) {

if(i!=0) {

sb.append("-")

}

//字节转换为整数

int temp = mac[i]&0xff

String str = Integer.toHexString(temp)

System.out.println("每8位:"+str)

if(str.length()==1) {

sb.append("0"+str)

}else {

sb.append(str)

}

}

System.out.println("本机MAC地址:"+sb.toString().toUpperCase())

}

}

网络通信可分为两种模式:TCP有连接的通信

UDP无连接的通信

依照上述的问题我可以理解为你是要进行有连接的通信。是要经过三次握手才能实现可靠的连接

第一次:建立连接时三次握手,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN(Synchronize Sequence Numbers)同步序列号。

服务器端即可使用:

Socket s=serverSocket.accept()

String clientIP=s.getInetAddress().toString()

这就实现了java服务器端获取到连接此服务器的客户端的IP了,你若想实现获取所有连接此服务器的客户端的IP,你可以把每次accept()返回的socket放进全局的Vector里面,然后在遍历这个vector方法就同上代码咯……

1、如果服务器如果没有采用反向代理,而且客户端没有用正向代理的话,那么可以获取客户端的真实IP地址request.getRemoteAddr()

2、如果服务器如果没有采用反向代理,而且客户端有用正向代理的话,那么通过request.getRemoteAddr()获取客户端的IP地址是客户端 的代理服务器的地址,并不是客户端的真实地址,

3、如果客户端使用的是多层代理的话,服务器获得的客户端地址是客户端的最外围代理服务器的地址如果服务器如果采用反向代理服务器,不管客户端采用的是何种方式访问服务器。

//获得客户端真实IP地址的方法一:

public String getRemortIP(HttpServletRequest request) {  

    if (request.getHeader("x-forwarded-for") == null) {  

        return request.getRemoteAddr()  

    }  

    return request.getHeader("x-forwarded-for")  

}  

//获得客户端真实IP地址的方法二:

public 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()  

    }  

    return ip  

}