介绍
这篇文章将为大家详细讲解有关客户端的IP地址与MAC地址怎么利用Java进行获取,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
<强> 1。获取客户端IP地址强>
X-Forwarded-For: client1, proxy1, proxy2, proxy3
其中的值通过一个逗号+空格把多个IP地址区分开,最左边(client1)是最原始客户端的IP地址,代理服务器每成功收到一个请求,就把请求来源IP地址添加到右边。
所有我们只取第一个IP地址
X-Real-IP,一般只记录真实发出请求的客户端IP
解决用localhost访问IP为0:0:0:0:0:0:0:1的问题
<强> 2。获取客户端MAC地址强>
UdpGetClientMacAddr umac=new UdpGetClientMacAddr (sip); 字符串smac=umac.GetRemoteMacAddr ();添加一个获取MAC的时间限制
最后UdpGetClientMacAddr umac=new UdpGetClientMacAddr (sip);//- - - - - -长时间获取不到MAC地址则放弃 ExecutorService exec=Executors.newFixedThreadPool (1); Callable电话=new Callable () { 公共字符串调用()抛出异常{ 返回umac.GetRemoteMacAddr (); } }; 尝试{ Future 未来=exec.submit(电话); 字符串smac=未来。得到(1000 * 1,TimeUnit.MILLISECONDS); loginMonitor.setMacAddress (smac); }捕捉(TimeoutException ex) { loginMonitor.setMacAddress(“获取失败“); logger.info(“获取MAC地址超时“); ex.printStackTrace (); }//关闭线程池 exec.shutdown ();//- - - - - - 需要先获取IP地址作为参数构造一个UdpGetClientMacAddr
UdpGetClientMacAddr。java
包shmc.commonsys.security.controller; 进口java.io.IOException; 进口java.net.DatagramPacket; 进口java.net.DatagramSocket; 进口java.net.InetAddress;/* * *主机一个向主机B发送“UDP-NetBIOS-NS询问包,即向主机B的137端口,发查询包来询问主机B的NetBIOS名称信息。 B *其次,主机接收到“UDP-NetBIOS-NS询问包,假设主机B正确安装了NetBIOS服务...........而137年且端口开放,则主机B会向主机一个发送一个“UDP-NetBIOS-NS”应答包,即包发答案给主机。 *并利用UDP (NetBIOS名称服务)来快速获取远程主机MAC地址的方法 * */公开课UdpGetClientMacAddr { 私人字符串sRemoteAddr; 私人int iRemotePort=137; 私人byte[]新字节缓冲区=[1024]; 私人DatagramSocket ds=零; 公共UdpGetClientMacAddr(字符串strAddr){抛出异常 sRemoteAddr=strAddr; ds=new DatagramSocket (); } 公众最终DatagramPacket发送(最终byte[]字节)抛出IOException { DatagramPacket dp=new DatagramPacket(字节,bytes.length InetAddress.getByName (sRemoteAddr) iRemotePort); ds.send (dp); 返回迪拜; } 公众最终DatagramPacket接收()抛出异常{ DatagramPacket dp=new DatagramPacket(缓冲区,buffer.length); ds.receive (dp); 返回迪拜; } 公共byte [] GetQueryCmd()抛出异常{ byte [] t_ns=新字节[50]; t_ns [0]=0 x00; t_ns [1]=0 x00; t_ns [2]=0 x00; t_ns [3]=0 x10; t_ns [4]=0 x00; t_ns [5]=0 x01; t_ns [6]=0 x00; t_ns [7]=0 x00; t_ns [8]=0 x00; t_ns [9]=0 x00; t_ns [10]=0 x00; t_ns [11]=0 x00; t_ns [12]=0 x20; t_ns [13]=0 x43; t_ns [14]=0 x4b; for (int i=15;我& lt;45;我+ +){ t_ns[我]=0 x41; } t_ns [45]=0 x00; t_ns [46]=0 x00; t_ns [47]=0 x21; t_ns [48]=0 x00; t_ns [49]=0 x01; 返回t_ns; } 公众最终字符串GetMacAddr (byte [] brevdata){抛出异常//获取计算机名 int i=brevdata [56] * 18 + 56; 字符串sAddr=?“; StringBuffer某人=new StringBuffer (17);//先从第56字节位置,读出数量的名字(NetBIOS名字的个数,其中每个NetBIOS名称信息部分占18个字节)//然后可计算出“单元ID”字段的位置=56 +名称数量×18岁,最后从该位置起连续读取6个字节,就是目的主机的MAC地址。 for (int j=1;j & lt;7;j + +) { sAddr=整数。toHexString (0 xff,brevdata (i + j]); 如果(sAddr.length () & lt;2) { sb.append (0); } sb.append (sAddr.toUpperCase ()); 如果(j & lt;6)sb.append (& # 39;: & # 39;); } 返回sb.toString (); } 公众最终无效close()抛出异常{ ds.close (); } 公众最终字符串GetRemoteMacAddr()抛出异常{ byte [] bqcmd=GetQueryCmd (); 发送(bqcmd); null null null null null null null null null null null null null null null客户端的IP地址与MAC地址怎么利用Java进行获取