Java代码如何获取客户端的MAC地址
通过ip获取指定ip地址的mac地址,ip可以通过请求request获取,
request.getRemoteAddr();
(当然获取ip也不是在任何情况下都有效的)
通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址。
您也许需要通过其他的方式获取,(见附)
//获取mac如下 (nbtstat -A IPAddress是对给定的IP地址解析其主机名。如果不能正常解析它的主机
//名的话,有可能是防火墙屏蔽了。也可能是在DNS中将NetBios 解析选项屏蔽了。)
public 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 < 100; i++) {
str = input.readLine();
if (str != null) {
if (str.indexOf("MAC Address") > 1) {
macAddress = str.substring(str.indexOf("MAC Address") + 14, str.length());
break;
}
if (str.indexOf("MAC Address") > 1) {
macAddress = str.substring(str.indexOf("MAC 地址") + 14, str.length());
break;
}
//以上有个判断,不同系统cmd命令执行的返回结果展示方式不一样,我测试的win7是MAC 地址
//所以又第二个if判断 你可先在你机器上cmd测试下nbtstat -A 命令 当然得有一个你可以ping通的
//网络ip地址,然后根据你得到的结果中mac地址显示方式来确定这个循环取值
}
}
} catch (IOException e) {
e.printStackTrace(System.out);
}
return macAddress;
}
附:
通过代理了的客户端ip地址获取方式
于是可得出获得客户端真实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;
}
可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP值,究竟哪个才是真正的用户端的真实IP呢?
答案是取X-Forwarded-For中第一个非unknown的有效IP字符串。如:
X-Forwarded-For:192.168.1.110, 192.168.1.120, 192.168.1.130, 192.168.1.100
用户真实IP为: 192.168.1.110
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=0; i<mac.length; i++) {
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());
}
}
java如何获取客户端打印机 求教
答:Server端后台代码实现的打印,当然只能查找server所在的网络打印机咯。Server端最多知道client端IP相关的信息,要操作client端的事情,只能以此为延伸想办法吧。
如何使用java代码获取文件的svn版本号?
答:Eclipse(SUBclipse)有两种方式可以操作SVN,一种纯Java的方案SVNKIT,另外一种就是JNI对系统SVN客户端的封装。这也是 Java 操作 SVN 的方案。
java怎么获取系统用户名密码
答:当你使用用户名跟密码登录成功的时候,把用户名跟密码放在范围内.可以是request.setAttribute("username",username);也可以是session.setAttribute("username",username);然后在jsp页面可以用EL表达式拿也可以直接用java代码拿.${sessionScope.username},<%=session.getAttribute("username")%> ...
WEBSERVICES服务端怎么获取到客户端的请求URL
答:1.先搭建一个WebService接口.接口类:Java代码 package hello;public interface IHello { public String hello(String str,String str2) ;} 实现类:Java代码 package hello;public class Hello implements IHello{ public String hello(String str,String str2) { return "Hello world ,i'am "+str+...
java中如何获取到本机的外网ip地址?
答:java获取本机的外网ip示例:import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.util.regex.Matcher;import java.util.regex.Pattern;/ 获取本机外网IP地址 思想是访问网站http://checkip....
java 聊天室 源代码
答:【ClientSocketDemo.java 客户端Java源代码】import java.net.*;import java.io.*;public class ClientSocketDemo { //声明客户端Socket对象socket Socket socket = null;//声明客户器端数据输入输出流 DataInputStream in;DataOutputStream out;//声明字符串数组对象response,用于存储从服务器接收到的...
linux下wsdl2java获取源码命令
答:运行命令WSDL2Java。生成服务端代码命令是WSDL2Javauriwsdl文件全路径p包名dxmlbeanss,sssdssio生成的java代码存放路径。生成客户端包代码命令是WSDL2Java至uriwsdl文件全路径p包名dxmlbeansso生成的java代码存放路径。源码就是指编写的最原始程序的代码。运行的软件是要经过编写的,程序员编写程序的过程中...
java 中的socket 是不是从哪个端口发出客户端请求就从这个端口接收数据...
答:二、建立客户端代码 相比服务器端,客户端要简单一些,客户端只需用服务器所在机器的ip以及服务器的端口作为参数创建一个Socket对象。得到这个对象后,就可以用"建立服务器"部分介绍的方法实现数据的输入和输出。Socket socket = new Socket("168.160.12.42",9998);或:Socket socket = new Socket(...
用java怎么开发聊天软件?
答:选择开发工具和框架:Java有很多优秀的开发工具和框架可供选择,例如Eclipse、IntelliJ IDEA、NetBeans等。同时,也有许多开源的框架可供选择,例如Spring、Spring Boot、Netty等。您可以根据自己的需求和喜好选择合适的工具和框架。设计系统架构:聊天软件需要考虑如何处理客户端和服务端之间的数据传输和交互。
java中如何获取cookie
答:getName()+"--->"+c.getValue()); } 控制台输出结果如下:username--->hzhpassword--->123JSESSIONID--->33BEAF95C526E0DDCF6A64990E533845注意: 1.服务器可以向客户端写内容, 只能是文本内容 2.客户端可以阻止服务器写入,禁用cookies 3.只能读取自己webapp写入的东西 ...