java如何获取本机网络协议信息

java如何获取本机网络协议信息,第1张

api上面我翻了下似乎没有,但是你可以使用java调用本地的shell进行查看(windows和linux的命令不太一样,但方法一样)。

代码:

Process process= RuntimegetRuntime()exec("你本地的shell或者cmd命令");

InputStream s=processgetInputStream();

//从is里面读取内容(也就是你的命令执行结果),这里代码就省略了

processwaitFor();

至于具体命令的话用下 netstat -s 看下

工具/原料

一台配置好java环境的可以上网的电脑

Java获取本地Mac地址

首先,创建工程,包,和一个类。

在此不加详述,我们直接看代码。

这里,我把这个类命名为GetMacAddr

这里,最最关键的就是这里这个方法。

我们通过NetworkInterface这个类来 *** 作。

也就是通过getLocalHost()方法先得到本机IP,

然后调用getHardwareAddress()方法得到一个byte数组的地址。

我们把六位地址传到一个byte数组里面,然后输出来就是。

不多废话,看代码:

private void getMACAddr()

throws SocketException, UnknownHostException {

// 获得IP

NetworkInterface netInterface =

NetworkInterfacegetByInetAddress(InetAddressgetLocalHost());

// 获得Mac地址的byte数组

byte[] macAddr = netInterfacegetHardwareAddress();

Systemoutprint("MAC Addr:\t");

// 循环输出

for (byte b : macAddr) {

// 这里的toHexString()是自己写的格式化输出的方法,见下步。

Systemoutprint(toHexString(b) + " ");

}

}

上一步骤中,为什么会出现一个toHexString()方法呢?

因为可能10进制转16进制时候可能会出现单字符,

所以,如果有出现单字符的情况,我们在其前面添加一个“0”做占位符。

这也是为了视觉的直观,也夹带着个人的习惯。

private static String toHexString(int integer) {

// 将得来的int类型数字转化为十六进制数

String str = IntegertoHexString((int) (integer & 0xff));

// 如果遇到单字符,前置0占位补满两格

if (strlength() == 1) {

str = "0" + str;

}

return str;

}

然后,我们写一个简单的main方法测试一下。

public static void main(String[] args)

 throws SocketException, UnknownHostException {

new GetMacAddr()getMACAddr();

}

结果无误,我们得到了本地的MAC地址。

大家一起来试一试吧!

import javanetInetAddress;

import javanetUnknownHostException;

public class Test

{

public static void main(String[] args) throws UnknownHostException

{

InetAddress inet = InetAddressgetLocalHost();

Systemoutprintln("本机的ip=" + inetgetHostAddress());

}

}

这位兄台 我也允许了一遍,程序的确是没问题。。。

这是我的运行结果

本机的IP地址是:172164384

IP地址的版本是:IPv4

我知道了,你同时在使用ipv6和ipv4地址,程序获取的时候,不知道该获取ipv4还是ipv6的地址,这样运行就出错了,你禁用ipv6或者ipv4试一下,应该可以

public static String getMotherboardSN() {

String result = "";

try {

File file = FilecreateTempFile("realhowto", "vbs");

filedeleteOnExit();

FileWriter fw = new javaioFileWriter(file);

String vbs = "Set objWMIService = GetObject(\"winmgmts:\\\\\\root\\cimv2\")\n"

+ "Set colItems = objWMIServiceExecQuery _ \n"

+ " (\"Select from Win32_BaseBoard\") \n"

+ "For Each objItem in colItems \n"

+ " WscriptEcho objItemSerialNumber \n"

+ " exit for ' do the first cpu only! \n" + "Next \n";

fwwrite(vbs);

fwclose();

Process p = RuntimegetRuntime()exec(

"cscript //NoLogo " + filegetPath());

BufferedReader input = new BufferedReader(new InputStreamReader(

pgetInputStream()));

String line;

while ((line = inputreadLine()) != null) {

result += line;

}

inputclose();

} catch (Exception e) {

eprintStackTrace();

}

Systemoutprintln(result);

return resulttrim();

}

public static void main(String[] args)

{

getMotherboardSN();

}

这个是我在网上找的,但是只能在windows下获得主板序列号,在linux下就不行。我愁~在linux下如何获得主板序列号呢。

以上就是关于java如何获取本机网络协议信息全部的内容,包括:java如何获取本机网络协议信息、java socket编程中怎么获得本机mac-CSDN论坛、怎样用JAVA程序获取本机ip 等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9300608.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存