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