.\" -*- 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).
