我是用Liunx来开发Java的,现在要开发一个获取客户端Mac的需求,我网上找了一些代码都是能得到本机的MAC地址,而不是客户端的MAC地址,哪位大哥,帮帮忙,看看改改程序,能不能变成客户端执行服务端就能获得客户端MAC地址,谢谢了~package kaga.it.Tools; import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* 获取MAC地址
* @author sunlightcs
*
*/
public class GetMacAddress {
/**
* 获取当前操作系统名称.
* return 操作系统名称 例如:windows,Linux,Unix等.
*/
public static String getOSName() {
return System.getProperty("os.name").toLowerCase();
}
/**
* 获取Unix网卡的mac地址.
* @return mac地址
*/
public static String getUnixMACAddress() {
String mac = null;
BufferedReader bufferedReader = null;
Process process = null;
try {
/**
* Unix下的命令,一般取eth0作为本地主网卡 显示信息中包含有mac地址信息
*/
process = Runtime.getRuntime().exec("ifconfig eth0");
bufferedReader = new BufferedReader(new InputStreamReader(process
.getInputStream()));
String line = null;
int index = -1;
while ((line = bufferedReader.readLine()) != null) {
/**
* 寻找标示字符串[hwaddr]
*/
index = line.toLowerCase().indexOf("hwaddr");
/**
* 找到了
*/
if (index != -1) {
/**
* 取出mac地址并去除2边空格
*/
mac = line.substring(index +"hwaddr".length()+ 1).trim();
break;
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bufferedReader != null) {
bufferedReader.close();
}
} catch (IOException e1) {
e1.printStackTrace();
}
bufferedReader = null;
process = null;
}
return mac;
}
/**
* 获取Linux网卡的mac地址.
* @return mac地址
*/
public static String getLinuxMACAddress() {
String mac = null;
BufferedReader bufferedReader = null;
Process process = null;
try {
/**
* linux下的命令,一般取eth0作为本地主网卡 显示信息中包含有mac地址信息
*/
process = Runtime.getRuntime().exec("ifconfig eth0");
bufferedReader = new BufferedReader(new InputStreamReader(process
.getInputStream()));
String line = null;
int index = -1;
while ((line = bufferedReader.readLine()) != null) {
index = line.toLowerCase().indexOf("硬件地址");
/**
* 找到了
*/
if (index != -1) {
/**
* 取出mac地址并去除2边空格
*/
mac = line.substring(index+4).trim();
break;
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bufferedReader != null) {
bufferedReader.close();
}
} catch (IOException e1) {
e1.printStackTrace();
}
bufferedReader = null;
process = null;
}
return mac;
}
/**
* 获取widnows网卡的mac地址.
* @return mac地址
*/
public static String getWindowsMACAddress() {
String mac = null;
BufferedReader bufferedReader = null;
Process process = null;
try {
/**
* windows下的命令,显示信息中包含有mac地址信息
*/
process = Runtime.getRuntime().exec("ipconfig /all");
bufferedReader = new BufferedReader(new InputStreamReader(process
.getInputStream()));
String line = null;
int index = -1;
while ((line = bufferedReader.readLine()) != null) {
/**
* 寻找标示字符串[physical address]
*/
index = line.toLowerCase().indexOf("physical address");
if (index != -1) {
index = line.indexOf(":");
if (index != -1) {
/**
* 取出mac地址并去除2边空格
*/
mac = line.substring(index + 1).trim();
}
break;
}
}
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if (bufferedReader != null) {
bufferedReader.close();
}
}catch (IOException e1) {
e1.printStackTrace();
}
bufferedReader = null;
process = null;
}
return mac;
}
/**
* 测试用的main方法.
*
* @param argc
* 运行参数.
*/
public static void main(String[] argc) {
String os = getOSName();
System.out.println(os);
if(os.startsWith("windows")){
String mac = getWindowsMACAddress();
System.out.println("本地是windows:"+mac);
}else if(os.startsWith("linux")){
String mac = getLinuxMACAddress();
System.out.println("本地是Linux系统,MAC地址是:"+mac);
}else{
String mac = getUnixMACAddress();
System.out.println("本地是Unix系统 MAC地址是:"+mac);
}
}
}
import java.io.IOException;
import java.io.InputStreamReader;
/**
* 获取MAC地址
* @author sunlightcs
*
*/
public class GetMacAddress {
/**
* 获取当前操作系统名称.
* return 操作系统名称 例如:windows,Linux,Unix等.
*/
public static String getOSName() {
return System.getProperty("os.name").toLowerCase();
}
/**
* 获取Unix网卡的mac地址.
* @return mac地址
*/
public static String getUnixMACAddress() {
String mac = null;
BufferedReader bufferedReader = null;
Process process = null;
try {
/**
* Unix下的命令,一般取eth0作为本地主网卡 显示信息中包含有mac地址信息
*/
process = Runtime.getRuntime().exec("ifconfig eth0");
bufferedReader = new BufferedReader(new InputStreamReader(process
.getInputStream()));
String line = null;
int index = -1;
while ((line = bufferedReader.readLine()) != null) {
/**
* 寻找标示字符串[hwaddr]
*/
index = line.toLowerCase().indexOf("hwaddr");
/**
* 找到了
*/
if (index != -1) {
/**
* 取出mac地址并去除2边空格
*/
mac = line.substring(index +"hwaddr".length()+ 1).trim();
break;
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bufferedReader != null) {
bufferedReader.close();
}
} catch (IOException e1) {
e1.printStackTrace();
}
bufferedReader = null;
process = null;
}
return mac;
}
/**
* 获取Linux网卡的mac地址.
* @return mac地址
*/
public static String getLinuxMACAddress() {
String mac = null;
BufferedReader bufferedReader = null;
Process process = null;
try {
/**
* linux下的命令,一般取eth0作为本地主网卡 显示信息中包含有mac地址信息
*/
process = Runtime.getRuntime().exec("ifconfig eth0");
bufferedReader = new BufferedReader(new InputStreamReader(process
.getInputStream()));
String line = null;
int index = -1;
while ((line = bufferedReader.readLine()) != null) {
index = line.toLowerCase().indexOf("硬件地址");
/**
* 找到了
*/
if (index != -1) {
/**
* 取出mac地址并去除2边空格
*/
mac = line.substring(index+4).trim();
break;
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bufferedReader != null) {
bufferedReader.close();
}
} catch (IOException e1) {
e1.printStackTrace();
}
bufferedReader = null;
process = null;
}
return mac;
}
/**
* 获取widnows网卡的mac地址.
* @return mac地址
*/
public static String getWindowsMACAddress() {
String mac = null;
BufferedReader bufferedReader = null;
Process process = null;
try {
/**
* windows下的命令,显示信息中包含有mac地址信息
*/
process = Runtime.getRuntime().exec("ipconfig /all");
bufferedReader = new BufferedReader(new InputStreamReader(process
.getInputStream()));
String line = null;
int index = -1;
while ((line = bufferedReader.readLine()) != null) {
/**
* 寻找标示字符串[physical address]
*/
index = line.toLowerCase().indexOf("physical address");
if (index != -1) {
index = line.indexOf(":");
if (index != -1) {
/**
* 取出mac地址并去除2边空格
*/
mac = line.substring(index + 1).trim();
}
break;
}
}
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if (bufferedReader != null) {
bufferedReader.close();
}
}catch (IOException e1) {
e1.printStackTrace();
}
bufferedReader = null;
process = null;
}
return mac;
}
/**
* 测试用的main方法.
*
* @param argc
* 运行参数.
*/
public static void main(String[] argc) {
String os = getOSName();
System.out.println(os);
if(os.startsWith("windows")){
String mac = getWindowsMACAddress();
System.out.println("本地是windows:"+mac);
}else if(os.startsWith("linux")){
String mac = getLinuxMACAddress();
System.out.println("本地是Linux系统,MAC地址是:"+mac);
}else{
String mac = getUnixMACAddress();
System.out.println("本地是Unix系统 MAC地址是:"+mac);
}
}
}
解决方案 »
- java中关于构造方法的问题
- 帮我找找网站的源代码,各位收藏的好代码能共享一下吧
- 关于一个加减法精度的问题,需要大家解决下。
- 学习SSI框架,应该如何入手,有没有源码可以提供,小弟在线等待
- 求一个动态分组复选 js 不够再加分...
- 求职 java 程序员 兄弟姐妹们知道那里招人不,我现在急急需要工作!!!!!
- 各位兄弟姐妹们,由于第一次接触,帮忙解决一个问题,分不够可以在给(急)
- JSP中文问题。
- 关于Struts里面validator的错误信息改中文
- 使用SSH 进行多表操作的时候出现return 不了action and put 求大神帮忙看看
- 访问百度推广API报java.net.UnknownHostException异常
- java 很长一段sql如何写在一行可以带换行的。
能够从服务器端直接的到客户端Mac地址的方法虽然有,但是基本上只限于相同网段内。
if(objObject.IPEnabled != null && objObject.IPEnabled != "undefined" && objObject.IPEnabled == true)
{
if(objObject.MACAddress != null && objObject.MACAddress != "undefined")
MACAddr = objObject.MACAddress;
if(objObject.IPEnabled && objObject.IPAddress(0) != null && objObject.IPAddress(0) != "undefined")
IPAddr = objObject.IPAddress(0);
if(objObject.DNSHostName != null && objObject.DNSHostName != "undefined")
sDNSName = objObject.DNSHostName;
}
</script> <script type="text/javascript" event="OnCompleted(hResult,pErrorObject, pAsyncContext)" for="someaddr">
var hidMacString=unescape(MACAddr);
var hidMac=hidMacString.replace(/:/g,"-");
document.getElementById('hidMac').value=hidMac ;
</script>
里面的hidMac就是mac地址可能需要设置下浏览器的安全级别
Web开发的话,就需要借助ActiveX来处理了,比如Applet也算是ActiveX。总的来说就是客户端(浏览器)获取到本机Mac,然后提交给服务器端。
if(objObject.IPEnabled != null && objObject.IPEnabled != "undefined" && objObject.IPEnabled == true)
{
if(objObject.MACAddress != null && objObject.MACAddress != "undefined")
MACAddr = objObject.MACAddress;
if(objObject.IPEnabled && objObject.IPAddress(0) != null && objObject.IPAddress(0) != "undefined")
IPAddr = objObject.IPAddress(0);
if(objObject.DNSHostName != null && objObject.DNSHostName != "undefined")
sDNSName = objObject.DNSHostName;
}
</script> <script type="text/javascript" event="OnCompleted(hResult,pErrorObject, pAsyncContext)" for="someaddr">
var hidMacString=unescape(MACAddr);
var hidMac=hidMacString.replace(/:/g,"-");
document.getElementById('hidMac').value=hidMac ;
</script>弱弱的问一下,我是新手,js不是很熟悉,html代码如何得到hidMac的值呀, <form action="UserLogin.action" method="post">
<div align="center">得到MAC地址
<br>MAC地址是:
<input type="text" name="hidMac" value="hidMac"/>
<br>
<input name="submit" type="submit" value="提交">
<input name="reset" type="reset" value="重置">
</div>
</form>这样子行吗,不行的话,帮我改一下代码吧,谢谢了!!!!!
<div align="center">得到MAC地址
<br>MAC地址是:
<input type="text" id="hidMac" name="hidMac" />
<br>
<input name="submit" type="submit" value="提交">
<input name="reset" type="reset" value="重置">
</div>
</form>这样子还是获得不到.....哎...
function gosubmit(){
document.getElementById("hidMac").value=hidMac;
document.macForm.action="UserLogin";
document.macForm.submit();
}
</script>
<form name="macForm" method="post">
<input type="hidden" name="hidMac" id="hidMac" />
<input type="button" value="提交" onclick="javascript:gosubmit();" />
</form>
大概 或许 是这样
System.out.println("客户端网卡地址:"+hidMac);
结果输出是:客户端网卡地址:[object HTMLInputElement]还是没有用.....
火狐下面不可以。jsp、java代码取到的都是服务器的mac。