Public/Invoke-SNMPv3Walk.ps1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
function Invoke-SNMPv3Walk { <# .SYNOPSIS Query information from network devices using SNMP GETNEXT requests. .DESCRIPTION Function supports SNMPv3 with security levels noAuthNoPriv, authNoPriv and authPriv. Based on SnmpSharpNet - SNMP Library for C# (http://www.snmpsharpnet.com/) .PARAMETER UserName Username to use when polling information. .PARAMETER Target SNMP Agent you want to get information from. Accepts IP address or host name. .PARAMETER OID GETNEXT requests will start at this object identifier and get all results from the subtree. Note that no value will be returned for the provided OID, only from the subtree. .PARAMETER AuthType Allowed authentication types are None, MD5, SHA1 and SHA256. Defaults to None. .PARAMETER AuthSecret Authentication password used for security level authNoPriv and authPriv. .PARAMETER PrivType Allowed encryption types are None, DES, TripleDES, AES128, AES192 and AES256. Defaults to None. .PARAMETER PrivSecret Encryption password used for security level authPriv. .PARAMETER Context Context to use. For example to request information in the context of a specific vlan. .PARAMETER Port UDP port to use when connecting to the SNMP Agent. Defaults to 161. .PARAMETER Timeout Timeout in milliseconds when connecting to SNMP Agent. Defaults to 3000. .INPUTS None. You cannot pipe objects to SNMPv3Walk. .OUTPUTS SNMPv3Output .EXAMPLE PS> Invoke-SNMPv3Walk -UserName usr-none-none -Target demo.snmplabs.com -OID 1.3.6.1.2.1.2.2.1.1 -Context 1016117d6836664ee15b9b2af5642c3c Node OID Type Value ---- --- ---- ----- 104.236.166.95 1.3.6.1.2.1.2.2.1.1.1 Integer32 1 104.236.166.95 1.3.6.1.2.1.2.2.1.1.2 Integer32 2 104.236.166.95 1.3.6.1.2.1.2.2.1.1.3 Integer32 3 104.236.166.95 1.3.6.1.2.1.2.2.1.1.4 Integer32 4 104.236.166.95 1.3.6.1.2.1.2.2.1.1.5 Integer32 5 #> [CmdletBinding()] [OutputType('SNMPv3Output')] param( [Parameter(Mandatory=$true)] [String]$UserName, [Parameter(Mandatory=$true)] [String]$Target, [Parameter(Mandatory=$true)] [String]$OID, [Parameter(Mandatory=$false)] [SNMPv3AuthType]$AuthType = 'None', [Parameter(Mandatory=$false)] [String]$AuthSecret, [Parameter(Mandatory=$false)] [SNMPv3PrivType]$PrivType = 'None', [Parameter(Mandatory=$false)] [String]$PrivSecret, [Parameter(Mandatory=$false)] [String]$Context, [Parameter(Mandatory=$false)] [int]$Port = 161, [Parameter(Mandatory=$false)] [int]$Timeout = 3000 ) $SecurityLevel = Get-SNMPv3SecurityLevel $AuthType $AuthSecret $PrivType $PrivSecret if ($SecurityLevel.IsValid) { $Authentication = Get-SNMPv3AuthenticationProvider $AuthType $AuthSecret $Privacy = Get-SNMPv3PrivacyProvider $PrivType $PrivSecret $Authentication } else { $InvalidSecurityLevel = [System.FormatException]::new('Invalid security level provided') Throw $InvalidSecurityLevel } $Context = if ([String]::IsNullOrWhiteSpace($Context)) {[String]::Empty} else {$Context} $IPAddress = [ipaddress]::None if ([ipaddress]::TryParse($Target, [ref]$IPAddress) -eq $false) { $IPAddress = [System.Net.Dns]::GetHostEntry($Target).AddressList[0] } $IPEndPoint = [System.Net.IPEndPoint]::new($IPAddress, $Port) $Discovery = [Lextm.SharpSnmpLib.Messaging.Messenger]::GetNextDiscovery([Lextm.SharpSnmpLib.SnmpType]::GetRequestPdu) $Report = $Discovery.GetResponse($Timeout, $IPEndPoint) $Result = [System.Collections.Generic.List[Lextm.SharpSnmpLib.Variable]]::new() [Lextm.SharpSnmpLib.Messaging.Messenger]::BulkWalk( [Lextm.SharpSnmpLib.VersionCode]::V3, $IPEndPoint, [Lextm.SharpSnmpLib.OctetString]::new($UserName), [Lextm.SharpSnmpLib.OctetString]::new($Context), [Lextm.SharpSnmpLib.ObjectIdentifier]::new($OID), $Result, $Timeout, 10, [Lextm.SharpSnmpLib.Messaging.WalkMode]::WithinSubtree, $Privacy, $Report ) | Out-Null $Result | foreach { [PSCustomObject] @{ PSTypeName = 'SNMPv3Output' Node = $IPAddress OID = $_.Id.ToString() Type = $_.Data.TypeCode Value = $_.Data } } } |