.\" -*- nroff -*-
.\" Portions of this file are subject to the following copyright.  See
.\" the Net-SNMP COPYING file for more details and other copyrights
.\" that may apply:
.\" /***********************************************************
.\" 	Copyright 1988, 1989 by Carnegie Mellon University
.\" 
.\"                       All Rights Reserved
.\" 
.\" Permission to use, copy, modify, and distribute this software and its 
.\" documentation for any purpose and without fee is hereby granted, 
.\" provided that the above copyright notice appear in all copies and that
.\" both that copyright notice and this permission notice appear in 
.\" supporting documentation, and that the name of CMU not be
.\" used in advertising or publicity pertaining to distribution of the
.\" software without specific, written prior permission.  
.\" 
.\" CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
.\" ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
.\" CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
.\" ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
.\" WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
.\" ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
.\" SOFTWARE.
.\" ******************************************************************/
.TH SNMPGET 1 "18 Jun 2007" VVERSIONINFO "Net-SNMP"
.SH NAME
snmpget - communicates with a network entity using SNMP GET requests
.SH SYNOPSIS
.B snmpget
[COMMON OPTIONS] [\-Cf] AGENT OID [OID]...
.SH DESCRIPTION
.B snmpget
is an SNMP application that uses the SNMP GET request to query for
information on a network entity.  One or more object identifiers
(OIDs) may be given as arguments on the command line.  Each variable
name is given in the format specified in
.IR variables(5) .
.SH "OPTIONS"
.TP 8
.B \-Cf
If
.B \-Cf
is
.I not
specified, some applications
.RB ( snmpdelta ", " snmpget ", " snmpgetnext " and " snmpstatus )
will try to fix errors returned by the agent that you were talking to
and resend the request.  The only time this is really useful is if you
specified a OID that didn't exist in your request and you're using
SNMPv1 which requires "all or nothing" kinds of requests.
.PP
In addition to this option,
.B snmpget
takes the common options described in the
.I snmpcmd(1)
manual page.  
Note that 
.B snmpget
REQUIRES an argument specifying the agent to query
and at least one OID argument, as described there. 
.SH "EXAMPLES"
The command:
.PP
    snmpget \-c public zeus system.sysDescr.0
.PP
will retrieve the variable system.sysDescr.0 from the host 
.B zeus 
using the community string 
.B public
:
.PP
    system.sysDescr.0 = "SunOS zeus.net.cmu.edu 4.1.3_U1 1 sun4m"
.PP
If the network entity has an error processing the request packet, an
error packet will be returned and a message will be shown, helping to
pinpoint in what way the request was malformed.  If there were other
variables in the request, the request will be resent without the bad
variable.
.PP
Here is another example. The \-c and \-v options are defined in the 
.I snmpcmd(1)
manual page. (Note that system.sysUpTime is an incomplete
OID, as it needs the .0 index appended to it):
.PP
.nf
    snmpget \-v1 \-Cf \-c public localhost system.sysUpTime system.sysContact.0
.fi
.PP
This example will return the following:
.PP
.nf
    Error in packet
    Reason: (noSuchName) There is no such variable name in this MIB.
    This name doesn't exist: system.sysUpTime
.fi
.PP
Similarly, the command:
.nf
    snmpget \-v1 \-c public localhost system.sysUpTime system.sysContact.0
.fi
.PP
Will return:
.PP
.nf
    Error in packet
    Reason: (noSuchName) There is no such variable name in this MIB.
    This name doesn't exist: system.sysUpTime

    system.sysContact.0 = STRING: root@localhost
.fi
.PP
With the
.B
\-Cf
flag specified the application will not try to fix the PDU for you.
.SH "SEE ALSO"
snmpcmd(1), snmpwalk(1), variables(5).
