【金沙国际唯一官网网址】什么样运用NetworkInterface获取服务器MAC地址

我们需要获得服务器硬件信息(比如MAC地址),•使用命令行程序获得硬盘信息,利用cmd命令获取mac地址(方法二),获取已的网卡的mac地址(方法一),使用java也可以编写一个windows服务部署到windows里面,studio内置的Service类可以编写windows服务,时常需要获取本机的Ip或是Mac地址,本文就是通过java代码获取ip和Mac

金沙国际唯一官网网址 2

在不知凡曾几何时候,大家供给获得服务器硬件消息(比方MAC地址),常用的有二种的章程:
•使用命令行程序获得硬盘音讯,然后经过Runtime.getRuntime().exec获得输出流,然后通过字符串分析获得MAC地址
•编译本地程序,然后经过JNI调用

收获已的网卡的mac地址(方法一)

若果您玩windows系统,你对劳务这一个东西并不会素不相识,服务可以帮大家做过多作业,在不影响用户不奇怪办事的动静下,能够完毕许多大家须求的须要。

在项目中,时常须要获得本机的Ip或是Mac地址,进行身份和权杖验证,本文就是经过java代码获取ip和Mac。

以上二种艺术都亟待区分分裂的操作系统平台,分别编码,相比较费心,比如
• windows平台供给动用iptables /all命令
•linux平台要求使用ifconfig命令

package wingsoft.custom.tools;

备受瞩目,微软的visio
studio内置的Service类能够编写windows服务,对于二个Java开采职员来讲,想要编写一个windows服务配置到服务器里面,

package com.svse.query;
import java.net.InetAddress;
import
java.net.NetworkInterface;
import java.net.SocketException;
import
java.net.UnknownHostException;

/***
* 获取本机的Mac地址
如:5八-0二-E三-5八-四E-E伍
* @author lenovo
* @date 2019年2月20日
* description:
*/
public class TestLocalMac {

private static void
getLocalMac(InetAddress ia) throws
SocketException {
//获取网卡,获取地址
byte[] mac = style=”color: #0000ff”>NetworkInterface.getByInetAddress.getHardwareAddress();
 //System.out.println(” style=”color: #0000ff”>mac数高管度:”+mac.length);
   StringBuffer sb = new
StringBuffer;
   for(int i=0; i<mac.length;
i++) {
    if {
    sb.append;
   }
   //字节调换为整数
   int temp = mac[i]&0xff;
   String str = style=”color: #0000ff”>Integer.toHexString;
   //System.out.println(” style=”color: #0000ff”>每8位:”+str);
  if(str.length {
    sb.append;
   }else {
    sb.append;
   }
}
   System.out.println(” style=”color: #0000ff”>本机MAC地址:”+sb.toString().toUpperCase;
}
public static void main(String[]
args) throws UnknownHostException
{

  style=”color: #008000″> //得到IP,输出PC-201309011313/122.206.73.83
  InetAddress ia = style=”color: #0000ff”>InetAddress.getLocalHost();
  String ip=ia.toString().split[1];
  System.out.println;
  System.out.println;
  try {
    getLocalMac;
  } catch (SocketException e)
{
    e.printStackTrace();
  }

 }

}

今天介绍壹种通用的跨平台的操作方法,那就是JDK自带的NetworkInterface接口,该接口在JDK1.四早就冒出,可是意义相比较少,JDK一.陆自此新扩充了众多新职能,相比不错。

import java.io.PrintStream;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;

还要在团结的费用碰着装3个visio studio,那太费事了。

测试结果

现实职能我们能够参照他事他说加以考察API文书档案,这里关键介绍一下哪些收获服务器MAC地址,代码如下,有注释,不多讲。

@SuppressWarnings(“unused”)
public class MacUtil
{
public static String getMacAddress()
{
try
{
Enumeration<NetworkInterface> ni =
NetworkInterface.getNetworkInterfaces();
while (ni.hasMoreElements())
{
NetworkInterface netI = (NetworkInterface)ni.nextElement();

那就是说难点来了,笔者想用java编写贰个windows服务,那几个主见可行呢?答案是必定的,可行!

金沙国际唯一官网网址 1

复制代码 代码如下:

byte[] bytes = netI.getHardwareAddress();
if ((netI.isUp()) && (netI != null) && (bytes != null) &&
(bytes.length == 6))
{
StringBuffer sb = new StringBuffer();
for (byte b : bytes)
{
sb.append(Integer.toHexString((b & 0xF0) >> 4));

开源的JavaService帮大家消除了那二个难题,使用java也足以编写制定2个windows服务配置到windows里面。

//获取具备网卡的MAC地址       
public static List<String> getAllMac() {
                List<String> list = new
ArrayList<String>();
                try {
                        Enumeration<NetworkInterface> e =
NetworkInterface.getNetworkInterfaces();//
再次来到全部网络接口的1个枚举实例
                        while (e.hasMoreElements()) {
                                NetworkInterface network =
e.nextElement();// 获得当前互连网接口
                                if (network != null) {
                                        if (network.getHardwareAddress()
!= null) {
                                                // 获得MAC地址
                                               
//结果是1个byte数组,每项是3个byte,我们供给经过parseByte方法转变到常见的十陆进制表示
                                                byte[] addres =
network.getHardwareAddress();
                                                StringBuffer sb = new
StringBuffer();
                                                if (addres != null &&
addres.length > 1) {
                                                       
sb.append(parseByte(addres[0])).append(“:”).append(
                                                                       
parseByte(addres[1])).append(“:”).append(
                                                                       
parseByte(addres[2])).append(“:”).append(
                                                                       
parseByte(addres[3])).append(“:”).append(
                                                                       
parseByte(addres[4])).append(“:”).append(
                                                                       
parseByte(addres[金沙国际唯一官网网址,5]));
                                                       
list.add(sb.toString());
                                                }
                                        }
                                } else {
                                       
System.out.println(“获取MAC地址发生异常”);
                                }
                        }
                } catch (SocketException e) {
                        e.printStackTrace();
                }
                return list;
        }
           //格式化②进制
        private static String parseByte(byte b) {
                int intValue = 0;
                if (b >= 0) {
                        intValue = b;
                } else {
                        intValue = 256 + b;
                }
                return Integer.toHexString(intValue);
        }

sb.append(Integer.toHexString(b & 0xF));
sb.append(“-“);
}
sb.deleteCharAt(sb.length() – 1);
return sb.toString().toUpperCase();
}
}
}
catch (SocketException e)
{
e.printStackTrace();
}
return null;
}

 

然后,大家用如下测试代码,看一下测试结果

public static void main(String[] args)
{
System.out.println(getMacAddress());
}
}

闲话不多说,来探视哪些运用JavaService完成Java编写铺排windows服务。

复制代码 代码如下:

 

 

                List<String> list = getAllMac();
                for (String mac : list) {
                        System.out.println(mac);
                }

采用cmd命令获取mac地址(方法贰)

第一供给接纳的壹对开采工具:

输出结果如下:

package wingsoft.custom;

 

复制代码 代码如下:

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;

JDK

0:18:8b:cc:xx:e3
0:0:0:0:0:0:0:e0
0:50:xx:c0:0:1
0:50:xx:c0:0:8

import javax.servlet.http.HttpServletRequest;

Eclipse

大家发掘,”0:18:八b:cc:xx:e三”,唯有3个0,看起来极度别扭啊,我们无妨修订一下parseByte方法,如下:

import org.apache.struts2.ServletActionContext;

JavaService

复制代码 代码如下:

//import wingsoft.custom.tools.MacUtil;
import wingsoft.tool.db.ConnectionPool;
import wingsoft.tool.db.ConnectionPoolManager;

 

        private static String parseByte(byte b) {
                 String s = “00”+Integer.toHexString(byte0);
                 return s.substring(s.length() – 2);
        }

public class toolTip
{
private InputStream responseText;

此间本身设置的JDK是1.陆本子的,

出口结果就变了:

public void setResponseText(InputStream responseText)
{
this.responseText = responseText;
}

Eclipse用于编写1个JAVA工程,

复制代码 代码如下:

public InputStream getResponseText()
{
return this.responseText;
}

JavaService可在官方网站下载,下载地址:http://javaservice.objectweb.org,下载此前官方供给承认你的有的个人新闻,提交后能够进来财富下载页面,作者那边下载的是二.0.十版本。解压后有无尽文本,我们只要求用到里面包车型大巴JavaService.exe。

00:18:8b:cc:xx:e3
00:00:00:00:00:e0
00:50:xx:c0:00:01
00:50:xx:c0:00:08

public String getToolTip()
{
HttpServletRequest request = ServletActionContext.getRequest();
String ipadr =request.getRemoteAddr();
System.out.println(request.getRemoteAddr());
String str = “”;
String macAddress = “”;
try {
Process p = Runtime.getRuntime().exec(“nbtstat -a ” + ipadr);
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) {
if (str.indexOf(“MAC”) > 1) {
macAddress = str.substring(
str.indexOf(“=”) + 2, str.length());
break;
}
}
}
} catch (IOException e) {
e.printStackTrace(System.out);
}

金沙国际唯一官网网址 2

这样就看起来舒服多了嘛,是吧?
其余,NetworkInterface接口还提供了如下方法,大家可以参照一下。

String lab_no = request.getParameter(“v_lab_no”);
System.out.println(lab_no);

 

•String displayName() 获取网络接口的显示名称
•int getMTU()再次来到此接口的最大传输单元(马克西姆um Transmission
Unit,MTU)
•String getName()获取此互连网接口的名目
•boolean isLoopback()重临此互连网接口是或不是是回送接口
•boolean isPointToPoint()重临此互联网接口是还是不是是点对点接口
•boolean isUp()重返此互连网接口是不是已经展开并运转
•boolean isVirtual()重返此接口是或不是是虚拟接口

String userid = request.getParameter(“v_userid”);
System.out.println(userid);

煮饭炒2个菜,大家要求盘算一些菜品原料,以上大家的菜都买好了,接下去看注重要计划干活和第三步骤。

ConnectionPool pool = ConnectionPoolManager.getPool(“CMServer”);
System.out.println(pool);
Connection conn = null;

先是安装JDK,暗中认可安装到C盘就能够了。

PreparedStatement ps = null;
ResultSet rs = null;
String sql = “”;