客户端的IP地址与MAC地址怎么利用Java进行获取

  介绍

这篇文章将为大家详细讲解有关客户端的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进行获取