Java精准 ‘get‘ MAC/IP4/IP6/子网掩码/网关/适配器/计算机信息插件

目录

Java原生API:

C++原生方式开始获取

ip_if_filter:引用自ipifcons.h

family:引用自ws2def.h

资源下载

colorful1.2框架

教程

简单的一小段尝试


Java原生API:

你可以使用:NetworkInterface获取计算上的网络接口信息(下图全部遍历网路接口)

            Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
            while (interfaces.hasMoreElements()) {
                NetworkInterface networkInterface = interfaces.nextElement();
                Enumeration<InetAddress> addresses = networkInterface.getInetAddresses();
                while (addresses.hasMoreElements()) {
                    InetAddress address = addresses.nextElement();
                   // if (!address.isLoopbackAddress() && address.isSiteLocalAddress()) {
                    console.info(networkInterface.getInterfaceAddresses());
                        console.Info(networkInterface.getInterfaceAddresses());
                  // }
                }
            }

对比

这样的获取方式,不一定精确的,影响因素有几点:

  1. 权限:在某些操作系统中,获取网络接口的信息可能需要特殊的权限。如果没有这些权限,可能无法获取全部的网络接口信息。

  2. 虚拟和隐藏的网络接口:有些系统可能有虚拟的网络接口或者隐藏的网络接口,这些接口可能不会被 NetworkInterface.getNetworkInterfaces() 返回。

  3. Java的安全策略:如果你的 Java 程序运行在一个有安全管理器的环境中,那么可能需要 NetPermission("getNetworkInformation") 权限才能获取网络接口信息。否则,NetworkInterface.getNetworkInterfaces() 可能只会返回一个空的 Enumeration

  4. 网络接口状态:如果网络接口处于不活跃的状态,例如未连接到网络,那么这些接口可能不会被 NetworkInterface.getNetworkInterfaces() 返回。

C++原生方式开始获取

于是我从Windows操作系统提供的数据API上开始获取并且写成Java插件

并且写完时在Java中提供了这些过滤方式-应对全部网卡(亲测有效)(JDK19 x64)

ip_if_filter:引用自ipifcons.h

family:引用自ws2def.h

可与我上次写的JNAudio文字转语音插件(免费x64)混装在一起        

使用该插件得出的全部网卡的一些数据,你可以试着使用过滤方式去分别wifi和以太网

的信息,过滤方式的常量引用的ipifcons.h AND ws2def.h可以直接百度.

资源下载

你可以选择CSDN/Github资源下载(github/csdn)

colorful1.2框架

因为这些框架是集合在colorful1.2分离式的模块化插件,所以你需要先安装colorful1.2框架

框架安装教程/使用教程,后面我会打算专门分离colorful1.2一些模块,制作成一些独立的插件

教程

基本实例化

        //需要先导入这个插件dll库的位置
        System.load("Net_Work_Route.dll");
        //实例Java对象
        net_work C=new net_work();
        //C++ 将 net_work绑定到Java实例对象
        C.initModel();
        //C.方法
        //解绑/释放/释放后将无法使用net_work中的任何方法,需要重新initModel
        C.release_network();

使用方法列表

initModel

在插件中将C++的方法/class/其他引用绑定到Java实例化对象

你可以把它当成初始方法,需要使用

release_network(解除绑定)释放
getLocalAdapter
获取本地全部网卡适配器名称,获取后你可以依据这些名称获取关于它的一些信息比如:IP4地址返回(List<String>)
getAdapterAddress
参数String,适配器名称,你可以使用
ws2def.adapter_null获取全部网卡适配器对话的IP4返回List<String>
getSubnetMask
参数String,适配器名称,你可以使用
ws2def.adapter_null获取全部网卡适配器对话的子网掩码返回List<String>
getLocalHostIP4
参数int,你需要配合
ip_if_filter.*过滤wifi/以太网的/默认网关/其他ip,为ip_if_filter.NULL全部网卡适配器所有IP返回List<String>
getLocalHostMac
参数int,你需要配合
ip_if_filter.*过滤wifi/以太网的/默认网关/其他MAC,为ip_if_filter.NULL全部网卡适配器所有MAC返回List<String>
getLocalHostIP6

参数int,你需要配合

ws2def.*过滤wifi/以太网的/默认网关/其他IP6,(全部网卡),返回List<String>
getDeviceInfo
主机地址类型:0
地址清单:1
别名:2
地址长度:3
正式的主机名:4

返回List<String>

getDeviceName

返回当前设备当前系统的名称

返回String

release_network

(解除绑定)释放,你将无法使用/无法找到绑定的Class/函数/其他引用,使用之后再次调用其他方法

将会返回NULL,不会引发错误,你要使用initModel重新绑定

getWebStormInfo

通过一条有效IP/域名通过网路获取web主机信息

主机地址类型:0
地址清单:1
别名:2
地址长度:3
正式的主机名:4
返回List<String>

多次尝试后可能被对方拒绝返回Null

get_gateway
获取当前默认网关IP


简单的一小段尝试

        System.load("Net_Work_Route.dll路径");
        net_work C=new net_work();
        C.initModel();
        List<String> ip_if=C.getAdapterAddress(ws2def.adapter_null);
        console.info(ip_if);
        List<String> device = C.getDeviceInfo();
        console.info("""
                主机地址类型:%s
                地址清单:%s
                别名:%s
                地址长度:%s
                正式的主机名:%s""".formatted(device.get(0), device.get(1), device.get(2), device.get(3), device.get(4)));
        List<String> adapter = C.getLocalAdapter(ip_if_filter.NULL);
        console.info("全部网卡适配器::%s".formatted(adapter.toString()));
        console.info("当前默认IP转发表默认网关:%s".formatted(C.get_gateway()));
        console.info("当前全部网卡转发的的IP:%s".formatted(C.getLocalHostIP4(ip_if_filter.NULL)));
        console.info("当前全部网卡适配器全部IP:%s".formatted(C.getAdapterAddress(ws2def.adapter_null)));
        console.info("当前全部网卡适配器子网掩码:%s".formatted(C.getSubnetMask(ws2def.adapter_null)));
        console.info("当前全部网卡适配器UDP, TCP, etc转发对象:%s".formatted(C.getLocalHostIP4(ws2def.AF_INET)));
        C.release_network();

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AtomicJun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值