Get Printer Status Using SNMP OID

浪子不回头ぞ 提交于 2019-12-10 00:30:33

问题


I am working with SNMP in Android. I want to get Printer Status. I am using Snmp4Android.jar and OID 1.3.6.1.2.1.25.3.5.1.1. Please refer this link Printer Status.

SnmpActivity.java here

public class SnmpActivity extends Activity {

private static String ipAddress = "PrinterIP";

private static String port = "Port";

private static String oidValue = "1.3.6.1.2.1.25.3.5.1.1";

public static Snmp snmp;
public static CommunityTarget comtarget;
static PDU pdu;
static OID oid;
static VariableBinding req;
Button b;
private static final String tag = "SNMP CLIENT";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    System.setProperty("java.net.preferIPv4Stack", "true");
    System.setProperty("java.net.preferIPv6Addresses", "false");

    b = (Button) findViewById(R.id.buttonClick);
    b.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            try {
                sendSnmpRequest(oidValue);
            } catch (IOException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }

        }
    });
}



private void sendSnmpRequest(String oid) throws Exception {

        ResponseEvent response;
        OctetString community1 = new OctetString("public");
        String host = ipAddress + "/" + port;
        Address tHost = new UdpAddress(host);
        TransportMapping transport = new DefaultUdpTransportMapping();
        transport.listen();
        CommunityTarget comtarget = new CommunityTarget();
        comtarget.setCommunity(community1);
        comtarget.setVersion(SnmpConstants.version1);
        comtarget.setAddress(tHost);
        comtarget.setRetries(2);
        comtarget.setTimeout(5000);
        PDU pdu = new PDU();
        pdu.add(new VariableBinding(new OID(oid)));
        pdu.setType(PDU.GET);
        snmp = new Snmp(transport);
        response = snmp.get(pdu, comtarget);
        if (response != null) {
            Log.i(tag, "Got Response from Agent  "
                    + response.getResponse().toString());
            PDU responsePDU = response.getResponse();
            if (responsePDU != null) {
                int errorStatus = responsePDU.getErrorStatus();
                int errorIndex = responsePDU.getErrorIndex();
                String errorStatusText = responsePDU.getErrorStatusText();

                if (errorStatus == PDU.noError) {
                    Log.i(tag,
                            "Snmp Get Response = "
                                    + responsePDU.getVariableBindings());
                    Toast.makeText(
                            getApplicationContext(),
                            "Snmp Get Response = "
                                    + responsePDU.getErrorStatusText(),
                            Toast.LENGTH_LONG).show();

                    System.out
                            .println("--" + responsePDU.getVariableBindings());

                } else {
                    Log.i((String) tag, "Error: Request Failed");
                    Log.i(tag, "Error Status = " + errorStatus);
                    Log.i(tag, "Error Index = " + errorIndex);
                    Log.i(tag, "Error Status Text = " + errorStatusText);
                }

            } else {
                Log.i(tag, "Error: Response PDU is null");
            }
        } else {
            Log.i(tag, "Error: Agent Timeout... ");
        }
        snmp.close();
    }

Thanks...


回答1:


Use net-snmp or some other available MIB browser (e.g. by iReasoning). You may find out that there are no data in the hrPrinterTable (OID .1.3.6.1.2.1.25.3.5).

If there are some rows, then change the OID to 1.3.6.1.2.1.25.3.5.1.1.1 (add 1 at the end). This the proper OID for the hrPrinterStatus on the first row.



来源:https://stackoverflow.com/questions/15923863/get-printer-status-using-snmp-oid

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!