zoukankan      html  css  js  c++  java
  • java 获取访问者ip和mac地址

    获取访问者ip,代码:

    <%
    	String sip="";
    	try{
    		 sip = (String)request.getRemoteAddr();
    	}catch(Exception e){
    		
    	}
    	
    	%>
    

    获取访问者mac地址,法是用UDP协议来发送查询mac指令然后返回值中解析mac。代码

    <%
    String smac = "";
    String sip = request.getHeader("x-forwarded-for");   
    if(sip == null || sip.length() == 0 || "unknown".equalsIgnoreCase(sip)) {   
        sip = request.getHeader("Proxy-Client-IP");   
    }   
    if(sip == null || sip.length() == 0 || "unknown".equalsIgnoreCase(sip)) {   
        sip = request.getHeader("WL-Proxy-Client-IP");   
    }   
    if(sip == null || sip.length() == 0 || "unknown".equalsIgnoreCase(sip)) {   
        sip = request.getRemoteAddr();   
    }   
    UdpGetClientMacAddr umac = new UdpGetClientMacAddr(sip);
    smac = umac.GetRemoteMacAddr();
    %>
    
    ...
    
    <input value=<%=smac %> name="userMacAddr" size="20" style="150px" readonly="yes">
    
     
    
    UdpGetClientMacAddr.java
    
    package cch;
    import java.io.*;
    import java.net.*;
    
    public class UdpGetClientMacAddr {
        private String sRemoteAddr;
        private int iRemotePort=137;
        private byte[] buffer = new byte[1024];
        private DatagramSocket ds=null;
        
        public UdpGetClientMacAddr(String strAddr) throws Exception{
            sRemoteAddr = strAddr;
            ds = new DatagramSocket();
        }
        
        protected final DatagramPacket send(final byte[] bytes) throws IOException {
         DatagramPacket dp = new DatagramPacket(bytes,bytes.length,InetAddress.getByName(sRemoteAddr),iRemotePort);
         ds.send(dp);
            return dp;
        }
        
        protected final DatagramPacket receive() throws Exception {
         DatagramPacket dp = new DatagramPacket(buffer,buffer.length);
         ds.receive(dp);
         return dp;
        }
        
        protected byte[] GetQueryCmd() throws Exception {
         byte[] t_ns = new byte[50];
         t_ns[0] = 0x00;
            t_ns[1] = 0x00;
            t_ns[2] = 0x00;
            t_ns[3] = 0x10;
            t_ns[4] = 0x00;
            t_ns[5] = 0x01;
            t_ns[6] = 0x00;
            t_ns[7] = 0x00;
            t_ns[8] = 0x00;
            t_ns[9] = 0x00;
            t_ns[10] = 0x00;
            t_ns[11] = 0x00;
            t_ns[12] = 0x20;
            t_ns[13] = 0x43;
            t_ns[14] = 0x4B;
            
            for(int i = 15; i < 45; i++)
            {
             t_ns[i] = 0x41;
            }
            
            t_ns[45] = 0x00;
            t_ns[46] = 0x00;
            t_ns[47] = 0x21;
            t_ns[48] = 0x00;
            t_ns[49] = 0x01;
         return t_ns;
        }
        
        protected final String GetMacAddr(byte[] brevdata) throws Exception {
         
         int i = brevdata[56] * 18 + 56;
            String sAddr="";
            StringBuffer sb = new StringBuffer(17);
                    
            for(int j = 1; j < 7;j++)
            {
             sAddr = Integer.toHexString(0xFF & brevdata[i+j]);
                if(sAddr.length() < 2)
                {
                 sb.append(0);
                }
                sb.append(sAddr.toUpperCase());
                if(j < 6) sb.append(':');
            }
            return sb.toString();
        }
        
        public final void close() {
         try
         {
          ds.close();
         }
         catch (Exception ex){
          ex.printStackTrace();
         }
        }
        
        public final String GetRemoteMacAddr() throws Exception {
         byte[] bqcmd = GetQueryCmd();
         send(bqcmd);
         DatagramPacket dp = receive();
            String smac = GetMacAddr(dp.getData());
            close();
            
            return smac;
        }
    }
    

      

  • 相关阅读:
    最大子数组问题(分治策略实现)
    Solving the Detached Many-to-Many Problem with the Entity Framework
    Working With Entity Framework Detached Objects
    Attaching detached POCO to EF DbContext
    如何获取qq空间最近访问人列表
    Health Monitoring in ASP.NET 2.0
    problem with displaying the markers on Google maps
    WebMatrix Database.Open… Close() and Dispose()
    Accessing and Updating Data in ASP.NET: Retrieving XML Data with XmlDataSource Control
    Create web setup project that has crystal reports and sql script run manually on client system
  • 原文地址:https://www.cnblogs.com/zhangdong-ah/p/4326417.html
Copyright © 2011-2022 走看看