Java 如果获取本机信息 如本机操作系统 IP MAC...

lanegg 2009-09-10 09:13:07
Java如何获取本机的:

计算机名

IP

MAC

操作系统及版本号

先谢各位了!!!


...全文
2065 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
haoluziqi 2011-06-07
  • 打赏
  • 举报
回复
不错,学习了。。。
poppybrave 2009-09-11
  • 打赏
  • 举报
回复
``mark..
``学习了..
yuxiangyeye 2009-09-11
  • 打赏
  • 举报
回复
牛人太多了,我什么时候才能向你们那样啊!我现在23,我努力的学,30岁以前能达到你们的水平吗?我现在的想法是好好做现在的工作,让时间来增值。
hellofans_love 2009-09-11
  • 打赏
  • 举报
回复
学习
breezes2008 2009-09-10
  • 打赏
  • 举报
回复
获取MAC地址:通过调用外部CMD实现。
这是在网上找到一篇文章:

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

/**
* 与系统相关的一些常用工具方法.
*
* @author lvbogun
* @version 1.0.0
*/
public class SystemTool {

/**
* 获取当前操作系统名称.
* return 操作系统名称 例如:windows xp,linux 等.
*/
public static String getOSName() {
return System.getProperty("os.name").toLowerCase();
}

/**
* 获取unix网卡的mac地址.
* 非windows的系统默认调用本方法获取.如果有特殊系统请继续扩充新的取mac地址方法.
* @return mac地址
*/
public static String getUnixMACAddress() {
String mac = null;
BufferedReader bufferedReader = null;
Process process = null;
try {
process = Runtime.getRuntime().exec("ifconfig eth0");// linux下的命令,一

般取eth0作为本地主网卡 显示信息中包含有mac地址信息
bufferedReader = new BufferedReader(new InputStreamReader(process
.getInputStream()));
String line = null;
int index = -1;
while ((line = bufferedReader.readLine()) != null) {
index = line.toLowerCase().indexOf("hwaddr");// 寻找标示字符串[hwaddr]


if (index >= 0) {// 找到了
mac = line.substring(index +"hwaddr".length()+ 1).trim();// 取出

mac地址并去除2边空格
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 {
process = Runtime.getRuntime().exec("ipconfig /all");// windows下的命令,

显示信息中包含有mac地址信息
bufferedReader = new BufferedReader(new InputStreamReader(process
.getInputStream()));
String line = null;
int index = -1;
while ((line = bufferedReader.readLine()) != null) {
index = line.toLowerCase().indexOf("physical address");// 寻找标示字符

串[physical address]
if (index >= 0) {// 找到了
index = line.indexOf(":");// 寻找":"的位置
if (index>=0) {
mac = line.substring(index + 1).trim();// 取出mac地址并去除2边

空格
}
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")){
//本地是windows
String mac = getWindowsMACAddress();
System.out.println(mac);
}else{
//本地是非windows系统 一般就是unix
String mac = getUnixMACAddress();
System.out.println(mac);
}
}
}


breezes2008 2009-09-10
  • 打赏
  • 举报
回复
import java.net.*;
import java.util.*;
public class Add{
public static void main(String[] args) throws UnknownHostException{

InetAddress addr = InetAddress.getLocalHost();
String ip=addr.getHostAddress().toString(); //获取本机ip
String hostName=addr.getHostName().toString(); //获取本机计算机名称
System.out.println("本机IP:"+ip+"\n本机名称:"+hostName);
Properties props=System.getProperties();
System.out.println("操作系统的名称:"+props.getProperty("os.name"));
System.out.println("操作系统的版本:"+props.getProperty("os.version"));



}
}
justinavril 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 chdw 的回复:]
IP地址可以取到,Mac不能直接取到,必须使用JNI或者调用外部命令

Java codeEnumeration en= NetworkInterface.getNetworkInterfaces();
Set ipList=new HashSet();while (en.hasMoreElements()) {
NetworkInterface intf= (NetworkInterface)en.nextElement();
Enumeration enAddr= intf.getInetAddresses();while (enAddr.hasMoreElements()) {
InetAddress addr= (InetAddress) enAddr.nextElement();
ipList.add(addr.getHostAddress());
}
}
[/Quote]
也可以通过cmd命令 然后io输出得到 如果是Vista系统 要把那个36改改 我记得好像是改成48还是多少
import  java.io.InputStreamReader;  
import java.io.BufferedReader;

public class macaddress {
public static void main(String[] args) {
macaddress mdd = new macaddress();
String str=mdd.getMacOnWindow();
System.out.println(str);
}
private static String getMacOnWindow() {
String s = "";
try {
String s1 = "ipconfig /all";
Process process = Runtime.getRuntime().exec(s1);
BufferedReader bufferedreader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
String nextLine;
for (String line = bufferedreader.readLine(); line != null; line = nextLine) {
nextLine = bufferedreader.readLine();
if (line.indexOf("Physical Address") <= 0) {
continue;
}
int i = line.indexOf("Physical Address") + 36;
s = line.substring(i);
break;
}

bufferedreader.close();
process.waitFor();
} catch (Exception exception) {
s = "";
}
return s.trim();
}

}
ChDw 2009-09-10
  • 打赏
  • 举报
回复
IP地址可以取到,Mac不能直接取到,必须使用JNI或者调用外部命令

Enumeration en = NetworkInterface.getNetworkInterfaces();
Set ipList = new HashSet();
while (en.hasMoreElements()) {
NetworkInterface intf = (NetworkInterface)en.nextElement();
Enumeration enAddr = intf.getInetAddresses();
while (enAddr.hasMoreElements()) {
InetAddress addr = (InetAddress) enAddr.nextElement();
ipList.add(addr.getHostAddress());
}
}
lanegg 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 justinavril 的回复:]
可能许多都是楼主不需要的 贴了 看看吧
Java codeimport java.util.*;publicclass YourJavaProperties {publicstaticvoid main(String args[]){
Properties props=System.getProperties();

System.out.println("Java的运行环境版本:"+props.getProperty("java.version"));
System.out.println("Java的运行环境供应商:"+props.getProperty("java.vendor"));
System.out.println("Java供应商的URL:"+props.getProperty("java.vendor.url"));
System.out.println("Java的安装路径:"+props.getProperty("java.home"));
System.out.println("Java的虚拟机规范版本:"+props.getProperty("java.vm.specification.version"));
System.out.println("Java的虚拟机规范供应商:"+props.getProperty("java.vm.specification.vendor"));
System.out.println("Java的虚拟机规范名称:"+props.getProperty("java.vm.specification.name"));
System.out.println("Java的虚拟机实现版本:"+props.getProperty("java.vm.version"));
System.out.println("Java的虚拟机实现供应商:"+props.getProperty("java.vm.vendor"));
System.out.println("Java的虚拟机实现名称:"+props.getProperty("java.vm.name"));
System.out.println("Java运行时环境规范版本:"+props.getProperty("java.specification.version"));
System.out.println("Java运行时环境规范供应商:"+props.getProperty("java.specification.vender"));
System.out.println("Java运行时环境规范名称:"+props.getProperty("java.specification.name"));
System.out.println("Java的类格式版本号:"+props.getProperty("java.class.version"));
System.out.println("Java的类路径:"+props.getProperty("java.class.path"));
System.out.println("加载库时搜索的路径列表:"+props.getProperty("java.library.path"));
System.out.println("默认的临时文件路径:"+props.getProperty("java.io.tmpdir"));
System.out.println("一个或多个扩展目录的路径:"+props.getProperty("java.ext.dirs"));
System.out.println("操作系统的名称:"+props.getProperty("os.name"));
System.out.println("操作系统的构架:"+props.getProperty("os.arch"));
System.out.println("操作系统的版本:"+props.getProperty("os.version"));
System.out.println("文件分隔符:"+props.getProperty("file.separator"));//在 unix 系统中是"/" System.out.println("路径分隔符:"+props.getProperty("path.separator"));//在 unix 系统中是":" System.out.println("行分隔符:"+props.getProperty("line.separator"));//在 unix 系统中是"/n" System.out.println("用户的账户名称:"+props.getProperty("user.name"));
System.out.println("用户的主目录:"+props.getProperty("user.home"));
System.out.println("用户的当前工作目录:"+props.getProperty("user.dir"));
}
}


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/justinavril/archive/2009/09/06/4525550.aspx
[/Quote]

学到了很多东西 谢谢 但是, 请问 怎么得到IP和MAC

还有 IP 要包括 本地网卡和无线网卡 谢谢了
cnyxlxw 2009-09-10
  • 打赏
  • 举报
回复
阿普阿普
liangwansheng 2009-09-10
  • 打赏
  • 举报
回复
学习了,太好了,呵呵
justinavril 2009-09-10
  • 打赏
  • 举报
回复
可能许多都是楼主不需要的 贴了 看看吧
import java.util.*;   

public class YourJavaProperties {
public static void main(String args[]){
Properties props=System.getProperties();

System.out.println("Java的运行环境版本:"+props.getProperty("java.version"));
System.out.println("Java的运行环境供应商:"+props.getProperty("java.vendor"));
System.out.println("Java供应商的URL:"+props.getProperty("java.vendor.url"));
System.out.println("Java的安装路径:"+props.getProperty("java.home"));
System.out.println("Java的虚拟机规范版本:"+props.getProperty("java.vm.specification.version"));
System.out.println("Java的虚拟机规范供应商:"+props.getProperty("java.vm.specification.vendor"));
System.out.println("Java的虚拟机规范名称:"+props.getProperty("java.vm.specification.name"));
System.out.println("Java的虚拟机实现版本:"+props.getProperty("java.vm.version"));
System.out.println("Java的虚拟机实现供应商:"+props.getProperty("java.vm.vendor"));
System.out.println("Java的虚拟机实现名称:"+props.getProperty("java.vm.name"));
System.out.println("Java运行时环境规范版本:"+props.getProperty("java.specification.version"));
System.out.println("Java运行时环境规范供应商:"+props.getProperty("java.specification.vender"));
System.out.println("Java运行时环境规范名称:"+props.getProperty("java.specification.name"));
System.out.println("Java的类格式版本号:"+props.getProperty("java.class.version"));
System.out.println("Java的类路径:"+props.getProperty("java.class.path"));
System.out.println("加载库时搜索的路径列表:"+props.getProperty("java.library.path"));
System.out.println("默认的临时文件路径:"+props.getProperty("java.io.tmpdir"));
System.out.println("一个或多个扩展目录的路径:"+props.getProperty("java.ext.dirs"));
System.out.println("操作系统的名称:"+props.getProperty("os.name"));
System.out.println("操作系统的构架:"+props.getProperty("os.arch"));
System.out.println("操作系统的版本:"+props.getProperty("os.version"));
System.out.println("文件分隔符:"+props.getProperty("file.separator")); //在 unix 系统中是"/"
System.out.println("路径分隔符:"+props.getProperty("path.separator")); //在 unix 系统中是":"
System.out.println("行分隔符:"+props.getProperty("line.separator")); //在 unix 系统中是"/n"
System.out.println("用户的账户名称:"+props.getProperty("user.name"));
System.out.println("用户的主目录:"+props.getProperty("user.home"));
System.out.println("用户的当前工作目录:"+props.getProperty("user.dir"));
}
}


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/justinavril/archive/2009/09/06/4525550.aspx
  • 打赏
  • 举报
回复
Map<String, String> map = System.getenv();
String userName = map.get("USERNAME");// 获取用户名
String computerName = map.get("COMPUTERNAME");// 获取计算机名
String userDomain = map.get("USERDOMAIN");// 获取计算机域名
System.out.println(userName);
System.out.println(computerName);
System.out.println(userDomain);
猿敲月下码 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 jackrui2008 的回复:]
就是想知道Properties props=System.getProperties();   
这个的实现机制,想看下它的源代码,能帖出来么?应该装反编译了吧。。
[/Quote]
可以用一些IDE看的,像Myeclipse
JackRui2008 2009-09-10
  • 打赏
  • 举报
回复
就是想知道Properties props=System.getProperties();
这个的实现机制,想看下它的源代码,能帖出来么?应该装反编译了吧。。
bayougeng 2009-09-10
  • 打赏
  • 举报
回复
学习了。
tz_dzg 2009-09-10
  • 打赏
  • 举报
回复
恩,经验交流
ocelight 2009-09-10
  • 打赏
  • 举报
回复
试下这个,不过需要开源项目支持


import com.fenghuo.jsnmp.collection.task.LinuxExec;
import java.util.Hashtable;
import org.hyperic.sigar.CpuInfo;
import org.hyperic.sigar.CpuPerc;
import org.hyperic.sigar.FileSystem;
import org.hyperic.sigar.FileSystemUsage;
import org.hyperic.sigar.Mem;
import org.hyperic.sigar.NetInterfaceConfig;
import org.hyperic.sigar.OperatingSystem;
import org.hyperic.sigar.Sigar;
import org.hyperic.sigar.SigarException;

/**
*使用开源项目
* Hyperic-hq产品的基础包sigar.jar来实现服务器状态数据的获取
* @author huangxf
*/
public class UseSigar {

public int cpunumber = 0;
public int cpuuser = 0;
public int cpuworkfreq = 0;
public int memtotal = 0;
public int memuser = 0;
public int disktotal = 0;
public int diskuser = 0;
public String osversionvalue = "";
public String osvendorvalue = "";
public String machine = "";
public Hashtable<String, Hashtable> nethashtable = new Hashtable();

public UseSigar(String osnamevalue) {
System.out.println("Collection信息:java.library.path:" + System.getProperty("java.library.path"));
if (osnamevalue.startsWith("Linux")) {
System.loadLibrary("sigar-x86-linux");
} else if (osnamevalue.startsWith("Win")) {
System.loadLibrary("sigar-x86-winnt");
}
}

public synchronized void runCpuPerc() {
Sigar sigar = new Sigar();
CpuPerc cpuList[] = null;
try {
//cpu相关
CpuInfo infos[] = sigar.getCpuInfoList();
CpuInfo info = infos[0];
cpuworkfreq = info.getMhz();
cpuList = sigar.getCpuPercList();
double totalall = 0;
cpunumber = cpuList.length;
for (int i = 0; i < cpuList.length; i++) {
double total = cpuList[i].getCombined();
total = total * 100;
totalall = totalall + total;
}
cpuuser = ((Double) (totalall / cpunumber)).intValue();
//内存相关
Mem mem = sigar.getMem();
long memuserlog = mem.getTotal();
memuserlog = memuserlog / 1024;
memuserlog = memuserlog / 1024;
Long longobj = new Long(memuserlog);
memtotal = longobj.intValue();
memuser = ((Long) (mem.getUsed() * 100 / mem.getTotal())).intValue();
//磁盘相关
FileSystem fslist[] = sigar.getFileSystemList();
long diskusePercentall = 0;
int disktotalall = 0;
for (int i = 0; i < fslist.length; i++) {
FileSystem fs = fslist[i];
FileSystemUsage usage = null;
try {
usage = sigar.getFileSystemUsage(fs.getDirName());
} catch (SigarException e) {
if (fs.getType() == 2) {
throw e;
}
continue;
}
switch (fs.getType()) {
case 0: // TYPE_UNKNOWN :未知
break;
case 1: // TYPE_NONE
break;
case 2: // TYPE_LOCAL_DISK : 本地硬盘
// // 文件系统总大小
// System.out.println(" Total = " + usage.getTotal() + "KB");
// // 文件系统剩余大小
// System.out.println(" Free = " + usage.getFree() + "KB");
// // 文件系统可用大小
// System.out.println(" Avail = " + usage.getAvail() + "KB");
// // 文件系统已经使用量
// System.out.println(" Used = " + usage.getUsed() + "KB");
// double usePercent = usage.getUsePercent() * 100D;
// 文件系统资源的利用率
// System.out.println(" Usage = " + usePercent + "%");
disktotalall = disktotalall + ((Long) usage.getTotal()).intValue();
diskusePercentall = diskusePercentall + usage.getUsed();
// System.out.println(diskusePercentall);
// diskusePercentall = diskusePercentall + usePercent;
break;
case 3:// TYPE_NETWORK :网络
break;
case 4:// TYPE_RAM_DISK :闪存
break;
case 5:// TYPE_CDROM :光驱
break;
case 6:// TYPE_SWAP :页面交换
break;
}
}
disktotal = disktotalall / 1024;
// diskusePercentall = diskusePercentall / 1024;
long diskuser1 = diskusePercentall * 100 / disktotalall;
diskuser = ((Long) diskuser1).intValue();
//操作系统相关
OperatingSystem OS = OperatingSystem.getInstance();
osversionvalue = OS.getVersion();
osvendorvalue = OS.getVendor();
machine = OS.getMachine();
//网络相关
String ifNames[] = sigar.getNetInterfaceList();
nethashtable.clear();
for (int i = 0; i < ifNames.length; i++) {
String name = ifNames[i];
NetInterfaceConfig ifconfig = sigar.getNetInterfaceConfig(name);
Hashtable netmessage = new Hashtable();
netmessage.put("ip", ifconfig.getAddress());
netmessage.put("mac", ifconfig.getHwaddr());
this.nethashtable.put(name, netmessage);
// print("\nname = " + name);//网络设备名
// print("Address = " + ifconfig.getAddress());//IP地址
// ifconfig.getHwaddr();
// print("Netmask = " + ifconfig.getNetmask());//子网掩码
// if ((ifconfig.getFlags() & 1L) <= 0L) {
// System.out.println("!IFF_UP...skipping getNetInterfaceStat");
// continue;
// }
}
} catch (SigarException e) {
// e.printStackTrace();
return;
} finally {
sigar.close();
}
}

public synchronized boolean getNetFlag(String netname) {
boolean rs = false;
Sigar sigar = new Sigar();
try {
String[] ifNames = sigar.getNetInterfaceList();
// nethashtable.clear();
for (int i = 0; i < ifNames.length; i++) {
String name = ifNames[i];
if (netname.equals(name)) {
NetInterfaceConfig ifconfig = sigar.getNetInterfaceConfig(name);
if ((ifconfig.getFlags() & 1L) <= 0L) {
rs = false;
} else {
rs = true;
}
}
}
} catch (SigarException ex) {
System.out.println(ex.getMessage());
} finally {
sigar.close();
}
return rs;
}

public String getFQDN() {
try {
// return InetAddress.getLocalHost().getCanonicalHostName();
// return InetAddress.getLocalHost().getHostName();
return LinuxExec.getHostName();
} catch (Exception e) {
Sigar sigar = new Sigar();
try {
return sigar.getFQDN();
} catch (SigarException ex) {
System.out.println(ex.getMessage());
return null;
} finally {
sigar.close();
}
}
}

public static void main(String[] args) {
UseSigar sigar = new UseSigar("Win");
sigar.runCpuPerc();
System.out.println(sigar.diskuser);
System.out.println(sigar.nethashtable);
System.out.println(sigar.memtotal);
}
}
youjianbo_han_87 2009-09-10
  • 打赏
  • 举报
回复
学习。。。。。。。。。。。。。。。
ChDw 2009-09-10
  • 打赏
  • 举报
回复
getHardwareAddress 主要是要求JDK1.6,有些时候项目不一定可以要求这么高的版本。
如果允许当然是好
加载更多回复(3)

62,617

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧