_壮 2024-04-17 16:34 采纳率: 0%
浏览 1

关于#网络#的问题:资产探测 主机扫描 如何获取到终端的型号和序列号等硬件相关信息(语言-java)

资产探测 主机扫描 如何获取到终端的型号和序列号等硬件相关信息 请举例说明

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-17 16:34
    关注

    引自免费微信小程序:皆我百晓生

    在Java中,获取远程主机的硬件信息,特别是型号和序列号,通常需要借助于一些系统管理协议(如SNMP、WMI)或者通过操作系统的特定API。这里我们主要介绍如何通过SNMP(简单网络管理协议)来获取这些信息。

    首先,你需要安装一个Java SNMP库,例如Jpype(用于调用Python的SNMP模块)或者SNMP4J(纯Java实现)。在这里,我们将使用SNMP4J作为示例。

    1. 添加SNMP4J依赖: 如果你使用Maven,将以下依赖添加到pom.xml文件中:
    <dependencies>
        <dependency>
            <groupId>org.snmp4j</groupId>
            <artifactId>snmp4j</artifactId>
            <version>2.8.3</version>
        </dependency>
    </dependencies>
    
    1. 编写Java代码:
    import org.snmp4j.smi.OID;
    import org.snmp4j.smi.VariableBinding;
    import org.snmp4j.Snmp;
    import org.snmp4j.mp.MPv2c;
    import org.snmp4j.security.USM;
    import org.snmp4j.security.UserTarget;
    import org.snmp4j.security.SecurityModels;
    import org.snmp4j.security.SecurityProtocols;
    import org.snmp4j.smi.Address;
    import org.snmp4j.smi.GenericAddress;
    import org.snmp4j.TransportMapping;
    import org.snmp4j.MessageDispatcherImpl;
    import org.snmp4j.log.LogAdapter;
    import org.snmp4j.log.JavaLogFactory;
    
    import java.io.IOException;
    import java.util.List;
    
    public class SnmpScanner {
        private static final LogAdapter logger = JavaLogFactory.getLogger(SnmpScanner.class);
    
        public void scan(String host, String community) throws IOException {
            // 设置日志
            LogAdapter.setLoggerFactory(new JavaLogFactory());
    
            // 创建消息调度器
            MessageDispatcherImpl dispatcher = new MessageDispatcherImpl();
    
            // 初始化安全模型和协议
            USM usm = new USM(SecurityProtocols.getInstance(), new OctetString("authKey"), new OctetString("privKey"));
            SecurityModels.getInstance().addSecurityModel(usm);
            SecurityProtocols.getInstance().addDefaultProtocols();
    
            // 创建目标用户
            UserTarget target = new UserTarget();
            target.setCommunity(new OctetString(community));
            target.setVersion(MPv2c.PROTOCOL_ID);
            target.setAddress(GenericAddress.parse(host));
    
            // 创建传输映射
            TransportMapping transport = new DefaultUdpTransportMapping();
            transport.listen();
    
            // 创建SNMP代理
            Snmp snmp = new Snmp(dispatcher, transport);
            snmp.getUSM().addUser(target.getUser(), target);
    
            try {
                // 获取OID列表,包括主机名、系统描述、系统对象ID、硬件序列号等
                OID[] oids = {new OID(".1.3.6.1.2.1.1.5.0"),  // 主机名
                             new OID(".1.3.6.1.2.1.1.1.0"),  // 系统描述
                             new OID(".1.3.6.1.2.1.1.2.0"),  // 系统对象ID
                             new OID(".1.3.6.1.2.1.25.3.2.1.3")}; // 硬件序列号
    
                // 发送GET请求
                List<VariableBinding> results = snmp.get(new VariableBinding[oids.length], target);
    
                // 输出结果
                for (int i = 0; i < oids.length; i++) {
                    System.out.println("OID: " + oids[i] + ", Value: " + results.get(i).getVariable());
                }
            } finally {
                // 关闭SNMP代理
                snmp.close();
            }
        }
    
        public static void main(String[] args) throws IOException {
            if (args.length != 2) {
                System.err.println("Usage: SnmpScanner <host> <community>");
                return;
            }
            SnmpScanner scanner = new SnmpScanner();
            scanner.scan(args[0], args[1]);
        }
    }
    
    1. 运行程序: 在命令行中运行java SnmpScanner <target_host> <community_string>,其中<target_host>是你要扫描的目标主机IP地址或域名,<community_string>是SNMP的共享社区字符串。注意,目标设备必须配置了SNMP服务,并且允许从你的源IP地址进行访问。

    注意:并非所有设备都支持获取硬件序列号等信息,这取决于设备制造商和SNMP实现。有些设备可能只提供基本的系统信息。此外,某些高级信息可能需要更高级别的SNMP权限。在尝试获取敏感信息时,请确保你有合法的理由并遵守相关法规。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月17日

悬赏问题

  • ¥15 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 用hfss做微带贴片阵列天线的时候分析设置有问题
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥120 计算机网络的新校区组网设计
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据