java如何获取mac地址?

作者&投稿:夙废 (若有异议请与网页底部的电邮联系)
java怎么获取ip地址~

java获取ip地址
public static void main(String[] args) { try { // 获取计算机名 String name = InetAddress.getLocalHost().getHostName(); // 获取IP地址 String ip = InetAddress.getLocalHost().getHostAddress(); System.out.println("计算机名:"+name); System.out.println("IP地址:"+ip); } catch (UnknownHostException e) { System.out.println("异常:" + e); e.printStackTrace(); } }

读取ipconfig/all里面的内容:
public static String checkPhysicalAddress() {
String physicalAddress ="";
try {

String line;
Process process = Runtime.getRuntime().exec("cmd /c ipconfig /all");
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
int temp=1;
int switchon=0;
while ((line = bufferedReader.readLine()) != null) {
if(switchon ==1){
temp++;
}
if(line.indexOf("以太网适配器 本地连接:") !=-1){
switchon=1;
continue;
}

if (temp == 5) {
line = bufferedReader.readLine();
System.out.println("1:"+line);
if (line.indexOf(":") != -1) {
physicalAddress = line.substring(line.indexOf(":") + 2).replaceAll("-", "").trim();
break; //找到MAC,推出循环
}
}
}
//process.waitFor();
} catch (Exception e) {
e.printStackTrace();
}
return physicalAddress;
}
一行一行的读取命令行的东西,直到我们想要的一行
如下图我们需要的是“以太网适配器 本地链接:”这里面的物理地址,上面的代码就是找到这一行,然后再下去五行就是我们要的MAC地址

以windows举例。
运行命令" cmd ipconfig /all"就会出现以下结果

Physical Address. . . . . . . . . : 20-CF-30-9A-60-EE

java就能过这样的命令来获取。以下是示例。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class TestMac
{
public static void main(String[] args) {
System.out.println("Operation System=" + getOsName());
System.out.println("Mac Address=" + getMACAddress());
System.out.println("通过ip获取mac"+getMACAddress("192.168.1.101"));
}

public static String getOsName() {
String os = "";
os = System.getProperty("os.name");
return os;
}

public static String getMACAddress() {
String address = "";
String os = getOsName();
if (os.startsWith("Windows")) {
try {
String command = "cmd.exe /c ipconfig /all";
Process p = Runtime.getRuntime().exec(command);
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = br.readLine()) != null) {
if (line.indexOf("Physical Address") > 0) {
int index = line.indexOf(":");
index += 2;
address = line.substring(index);
break;
}
}
br.close();
return address.trim();
} catch (IOException e) {
}
} else if (os.startsWith("Linux")) {
String command = "/bin/sh -c ifconfig -a";
Process p;
try {
p = Runtime.getRuntime().exec(command);
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = br.readLine()) != null) {
if (line.indexOf("HWaddr") > 0) {
int index = line.indexOf("HWaddr") + "HWaddr".length();
address = line.substring(index);
break;
}
}
br.close();
} catch (IOException e) {
}
}
address = address.trim();
return address;
}

public static String getMACAddress(String ipAddress) {
String str = "", strMAC = "", macAddress = "";
try {
Process pp = Runtime.getRuntime().exec("nbtstat -a " + ipAddress);
InputStreamReader ir = new InputStreamReader(pp.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) {
strMAC = str.substring(str.indexOf("MAC Address") + 14,
str.length());
break;
}
}
}
} catch (IOException ex) {
return "Can't Get MAC Address!";
}
//
if (strMAC.length() < 17) {
return "Error!";
}

macAddress = strMAC.substring(0, 2) + ":" + strMAC.substring(3, 5)
+ ":" + strMAC.substring(6, 8) + ":" + strMAC.substring(9, 11)
+ ":" + strMAC.substring(12, 14) + ":"
+ strMAC.substring(15, 17);
//
return macAddress;
}
}

剑天梦的回答原理和我这个一样,都是通过Process 执行命令。 我直接补充到答案里了。不过
我这边运行那个命令出来的结果很多,那么花的时间就长了。优点是能够获取别人的mac地址 。

解释说明可参考代码中的注释即可:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.LineNumberReader;

public class GetMac {

/**
* java获取客户端网卡的MAC地址
*
* @param args
*/
public static void main(String[] args) {
GetMac get = new GetMac();
System.out.println("1="+get.getMAC());
System.out.println("2="+get.getMAC("127.0.0.1"));
}

// 1.获取客户端ip地址( 这个必须从客户端传到后台):
// jsp页面下,很简单,request.getRemoteAddr() ;
// 因为系统的VIew层是用JSF来实现的,因此页面上没法直接获得类似request,在bean里做了个强制转换

// public String getMyIP() {
// try {
// FacesContext fc = FacesContext.getCurrentInstance();
// HttpServletRequest request = (HttpServletRequest) fc
// .getExternalContext().getRequest();
// return request.getRemoteAddr();
// } catch (Exception e) {
// e.printStackTrace();
// }
// return "";
// }

// 2.获取客户端mac地址
// 调用window的命令,在后台Bean里实现 通过ip来获取mac地址。方法如下:

// 运行速度【快】
public String getMAC() {
String mac = null;
try {
Process pro = Runtime.getRuntime().exec("cmd.exe /c ipconfig/all");

InputStream is = pro.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String message = br.readLine();

int index = -1;
while (message != null) {
if ((index = message.indexOf("Physical Address")) > 0) {
mac = message.substring(index + 36).trim();
break;
}
message = br.readLine();
}
System.out.println(mac);
br.close();
pro.destroy();
} catch (IOException e) {
System.out.println("Can't get mac address!");
return null;
}
return mac;
}

// 运行速度【慢】
public String getMAC(String ip) {
String str = null;
String macAddress = null;
try {
Process p = Runtime.getRuntime().exec("nbtstat -A " + ip);
InputStreamReader ir = new InputStreamReader(p.getInputStream());
LineNumberReader input = new LineNumberReader(ir);
for (; true;) {
str = input.readLine();
if (str != null) {
if (str.indexOf("MAC Address") > 1) {
macAddress = str
.substring(str.indexOf("MAC Address") + 14);
break;
}
}
}
} catch (IOException e) {
e.printStackTrace(System.out);
return null;
}
return macAddress;
}
}

先获取ip通过request.getRemoteAddr();
通过ip获取mac
public String getMACAddress(String ipAddress) {
String str = "", strMAC = "", macAddress = "";
try {
Process pp = Runtime.getRuntime().exec("nbtstat -a " + ipAddress);
InputStreamReader ir = new InputStreamReader(pp.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) {
strMAC = str.substring(str.indexOf("MAC Address") + 14,
str.length());
break;
}
}
}
} catch (IOException ex) {
return "Can't Get MAC Address!";
}
//
if (strMAC.length() < 17) {
return "Error!";
}

macAddress = strMAC.substring(0, 2) + ":" + strMAC.substring(3, 5)
+ ":" + strMAC.substring(6, 8) + ":" + strMAC.substring(9, 11)
+ ":" + strMAC.substring(12, 14) + ":"
+ strMAC.substring(15, 17);
//
return macAddress;
}

public static String getMacAddressIP(String remotePcIP) {
String str = "";
String macAddress = "";
try {
Process pp = Runtime.getRuntime().exec("nbtstat -A " + remotePcIP);
InputStreamReader ir = new InputStreamReader(pp.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;
}
}
}
} catch (IOException ex) {
}
return macAddress;
}


学习了,想知道java如何获取一个windows窗口的名称,比如获取QQ消息框的名称

JAVA如何获取局域网内所有安卓设备的ip地址,MAC以及序列号?
答:1.得到局域网网段,可由自己机器的IP来确定 (也可以手动获取主机IP-CMD-ipconfig /all)2.根据IP类型,一次遍历局域网内IP地址 JAVA类,编译之后直接运行便可以得到局域网内所有IP,具体怎样使用你自己编写相应代码调用便可 代码如下::package bean;import java.io.*;import java.util.*;public ...

JAVA查询MAC地址问题
答:ipconfig是Windows下命令提示符支持的一个命令,可以查询到你的机器的ip等网络配置 Runtime.getRuntime().exec("ipconfig /all"); 就是执行该命令 if (line.indexOf("Physical Address") > 0)表示如果在line中查找到Physical Address,就继续执行if中的语句,否则如果找不到,line.indexOf("...

java怎么生成本机mac地址
答:来走一个 public static void main(String[] args) throws UnknownHostException,SocketException{ InetAddress inetAddress = InetAddress.getLocalHost(); //获取网卡,获取地址 byte[] mac = NetworkInterface.getByInetAddress(inetAddress).getHardwareAddress(); StringBuffer sb = new StringB...

Java获取电脑mac地址,如果是双网卡获取的mac地址是不是随机的?
答:取mac要先得到NetworkInterface对象,多网卡的话会有多个对象,所以要看你在哪个对象上取mac了,反正不会是随机

怎么用java获取局域网中的其他电脑的MAC
答:调用arp 程序,截获返回值解析

java正则表达式提取mac地址。
答:^([0-9a-fA-F]{2})(([/\s-][0-9a-fA-F]{2}){5})其中的[/\s-]中的"/"是一个匹配符,

java写了个获取本机的mac的信息,用的是ipconfig /all命令。在cmd中运行...
答:这是编码的问题,你这是ISO-8859-1编码英文正常,中文乱码,电脑默认为GBK,你获取MAC信息时必须指定编码为gbk或utf-8

在Linux系统下用Java语言获取客户端的IP地址,MAC地址,客户端的主机名称...
答:这个网上很多,主要是机器必须支持ICMP和NETBIOS协议。你参考一下:public String getIP(){ InetAddress inet;try { inet = InetAddress.getLocalHost();InetAddress.getByName("");return inet.getHostAddress();} catch (UnknownHostException e) { // TODO Auto-generated catch block e.print...

java mac 安装路径在哪
答:Mac OS自带的JDK 6:/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java。看到有朋友说OS 10.10删除了自带的JDK 6,但是我升级10.10之后还是能找到该路径,不知道是否需要重新在苹果网站下载JDK 6呢? 2. Oracle的JDK 7/8 (1)用/usr/libexec/java_home命令得到的Java ...

java web 项目中怎么获取客户端MAC/硬盘序列号/cpu序列号呢?小弟虚心...
答:这个是获取不到的,因为客户端与你服务器一般都是经过复杂的网络连接来的,通常拿到的MAC一般是线路上某台路由器的MAC,没有多大意义。至于硬盘序列号和CPU序列号,这根本无法从一个soket连接中取到。就好像,我无法知道比如在QQ聊天中对面是人还是狗一样。