Networking 使用广播snmp请求的网络发现

Networking 使用广播snmp请求的网络发现,networking,snmp,broadcast,net-snmp,Networking,Snmp,Broadcast,Net Snmp,我想在我的子网中发现打印机。我可以使用以下链接中提到的网络snmp来实现这一点吗- 但它似乎不起作用?我是否应该在snmp_api中启用广播的任何标志来执行此操作。还有,我将如何处理这些回复?你能解释一下这个简单的应用程序吗- 我是新来的。非常感谢您的帮助 备注:我使用的是net snmp 5.7.2.1您需要了解,snmp不是定义了设备发现的协议 只有当该设备恰好使用您使用的社区名称(用于v1和v2c)时,您的广播消息才会收到响应 不要依赖广播,因为出于安全考虑,许多设备使用非常特殊的社

我想在我的子网中发现打印机。我可以使用以下链接中提到的网络snmp来实现这一点吗-

但它似乎不起作用?我是否应该在snmp_api中启用广播的任何标志来执行此操作。还有,我将如何处理这些回复?你能解释一下这个简单的应用程序吗-

我是新来的。非常感谢您的帮助


备注:我使用的是net snmp 5.7.2.1

您需要了解,snmp不是定义了设备发现的协议

只有当该设备恰好使用您使用的社区名称(用于v1和v2c)时,您的广播消息才会收到响应


不要依赖广播,因为出于安全考虑,许多设备使用非常特殊的社区名称,它们不会响应。

您需要了解,SNMP不是定义了设备发现的协议

只有当该设备恰好使用您使用的社区名称(用于v1和v2c)时,您的广播消息才会收到响应


不要依赖广播,因为出于安全考虑,许多设备使用非常特殊的社区名称,它们不会响应。

您需要了解,SNMP不是定义了设备发现的协议

只有当该设备恰好使用您使用的社区名称(用于v1和v2c)时,您的广播消息才会收到响应


不要依赖广播,因为出于安全考虑,许多设备使用非常特殊的社区名称,它们不会响应。

您需要了解,SNMP不是定义了设备发现的协议

只有当该设备恰好使用您使用的社区名称(用于v1和v2c)时,您的广播消息才会收到响应


不要依赖广播,因为出于安全考虑,许多设备使用非常特殊的社区名称,它们不会响应。

//如果sysservice值为72,则识别打印机,否则

public void getDiscover(String oid_index){
    tempOID = "1.3.6.1.2.1.1.7";

    try{
    while(tempOID.equalsIgnoreCase("1.3.6.1.2.1.1.7")){
        //System.out.println("tttt");
    pair  = (SNMPSequence)(new SNMPRequest(community, tempOID, **"IP"**, version)).getRequest(2).getSNMPObjectAt(0);
    //mpValue = pair.getSNMPObjectAt(1);
    oid_index = pair.getSNMPObjectAt(0).toString();
  //tempOID = pair.getSNMPObjectAt(0).toString().substring(0,10);
    index.addElement(snmpValue);
    System.out.println(snmpValue.toString());// sysservice value
    }

//如果sysservice值为72,则标识打印机,否则不标识打印机

public void getDiscover(String oid_index){
    tempOID = "1.3.6.1.2.1.1.7";

    try{
    while(tempOID.equalsIgnoreCase("1.3.6.1.2.1.1.7")){
        //System.out.println("tttt");
    pair  = (SNMPSequence)(new SNMPRequest(community, tempOID, **"IP"**, version)).getRequest(2).getSNMPObjectAt(0);
    //mpValue = pair.getSNMPObjectAt(1);
    oid_index = pair.getSNMPObjectAt(0).toString();
  //tempOID = pair.getSNMPObjectAt(0).toString().substring(0,10);
    index.addElement(snmpValue);
    System.out.println(snmpValue.toString());// sysservice value
    }

//如果sysservice值为72,则标识打印机,否则不标识打印机

public void getDiscover(String oid_index){
    tempOID = "1.3.6.1.2.1.1.7";

    try{
    while(tempOID.equalsIgnoreCase("1.3.6.1.2.1.1.7")){
        //System.out.println("tttt");
    pair  = (SNMPSequence)(new SNMPRequest(community, tempOID, **"IP"**, version)).getRequest(2).getSNMPObjectAt(0);
    //mpValue = pair.getSNMPObjectAt(1);
    oid_index = pair.getSNMPObjectAt(0).toString();
  //tempOID = pair.getSNMPObjectAt(0).toString().substring(0,10);
    index.addElement(snmpValue);
    System.out.println(snmpValue.toString());// sysservice value
    }

//如果sysservice值为72,则标识打印机,否则不标识打印机

public void getDiscover(String oid_index){
    tempOID = "1.3.6.1.2.1.1.7";

    try{
    while(tempOID.equalsIgnoreCase("1.3.6.1.2.1.1.7")){
        //System.out.println("tttt");
    pair  = (SNMPSequence)(new SNMPRequest(community, tempOID, **"IP"**, version)).getRequest(2).getSNMPObjectAt(0);
    //mpValue = pair.getSNMPObjectAt(1);
    oid_index = pair.getSNMPObjectAt(0).toString();
  //tempOID = pair.getSNMPObjectAt(0).toString().substring(0,10);
    index.addElement(snmpValue);
    System.out.println(snmpValue.toString());// sysservice value
    }

请澄清“你尝试了什么”的问题。另外,当您尝试时,您收到的输出是什么?您可以尝试使用命令行工具
snmpget
发出相同的请求,以排除编程错误。我也尝试了命令行。当我向广播地址发送“snmpget”请求时,会出现超时。请尝试将您的电脑与打印机放在同一子网络上。它开始工作了吗?那么你就有了一个路由问题。询问您的本地网络管理员网络中的广播数据包有哪些限制。出于安全原因,大多数路由器将丢弃来自外部的广播数据包。你的管理员可以为你的管理站设置一个例外。我想这是可行的。所以现在我正在尝试ping我的计算机所在子网的广播地址。我没有“超时”。虽然“snmpget”有一个错误,“snmpwalk”没有响应,但当我一次又一次地执行命令时,“snmpgetnext”的响应一直在变化。我假设它正在浏览子网中所有打印机的响应?!?!从一个文件中的所有打印机获取所有响应的正确方法是什么?您不应该期望snmpwalk或snmp get next在广播中是可行的,因为每个响应主机都有各自的OID顺序。语义没有定义(如Lex Li在回答中所述)。您应该能够获得对简单get请求的响应,但与Lex writes一样,您最好确保所有打印机使用相同的社区字符串。请澄清“您尝试了什么”这一问题。另外,当您尝试时,您收到的输出是什么?您可以尝试使用命令行工具
snmpget
发出相同的请求,以排除编程错误。我也尝试了命令行。当我向广播地址发送“snmpget”请求时,会出现超时。请尝试将您的电脑与打印机放在同一子网络上。它开始工作了吗?那么你就有了一个路由问题。询问您的本地网络管理员网络中的广播数据包有哪些限制。出于安全原因,大多数路由器将丢弃来自外部的广播数据包。你的管理员可以为你的管理站设置一个例外。我想这是可行的。所以现在我正在尝试ping我的计算机所在子网的广播地址。我没有“超时”。虽然“snmpget”有一个错误,“snmpwalk”没有响应,但当我一次又一次地执行命令时,“snmpgetnext”的响应一直在变化。我假设它正在浏览子网中所有打印机的响应?!?!从一个文件中的所有打印机获取所有响应的正确方法是什么?您不应该期望snmpwalk或snmp get next在广播中是可行的,因为每个响应主机都有各自的OID顺序。语义没有定义(如Lex Li在回答中所述)。您应该能够获得对简单get请求的响应,但与Lex writes一样,您最好确保所有打印机使用相同的社区字符串。请澄清“您尝试了什么”这一问题。另外,当您尝试时,您收到的输出是什么?您可以尝试使用命令行工具
snmpget
发出相同的请求,以排除编程错误。我也尝试了命令行。当我向广播地址发送“snmpget”请求时,会出现超时。请尝试将您的电脑与打印机放在同一子网络上。它开始工作了吗?那么你就有了一个路由问题。询问您的本地网络管理员网络中的广播数据包有哪些限制。出于安全原因,大多数路由器将丢弃来自外部的广播数据包。你的管理员