From ae44793a7f34efd2c9964aa2bb26308e7fb42a0a Mon Sep 17 00:00:00 2001 From: Jitka Plesnikova Date: Wed, 3 Jun 2015 13:48:46 +0200 Subject: [PATCH 01/30] Perl 5.22 rebuild --- snmpcheck.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/snmpcheck.spec b/snmpcheck.spec index 4aac3cb..7408138 100644 --- a/snmpcheck.spec +++ b/snmpcheck.spec @@ -1,6 +1,6 @@ Name: snmpcheck Version: 1.8 -Release: 11%{?dist} +Release: 12%{?dist} Summary: An utility to get information via SNMP protocols Group: Applications/Internet @@ -67,6 +67,9 @@ rm -rf %{buildroot} %changelog +* Wed Jun 03 2015 Jitka Plesnikova - 1.8-12 +- Perl 5.22 rebuild + * Wed Aug 27 2014 Jitka Plesnikova - 1.8-11 - Perl 5.20 rebuild From 2d7f96f43743b0ca0e06a6083d7a501b5e023379 Mon Sep 17 00:00:00 2001 From: Dennis Gilmore Date: Fri, 19 Jun 2015 01:11:39 +0000 Subject: [PATCH 02/30] - Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild --- snmpcheck.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/snmpcheck.spec b/snmpcheck.spec index 7408138..1606810 100644 --- a/snmpcheck.spec +++ b/snmpcheck.spec @@ -1,6 +1,6 @@ Name: snmpcheck Version: 1.8 -Release: 12%{?dist} +Release: 13%{?dist} Summary: An utility to get information via SNMP protocols Group: Applications/Internet @@ -67,6 +67,9 @@ rm -rf %{buildroot} %changelog +* Fri Jun 19 2015 Fedora Release Engineering - 1.8-13 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + * Wed Jun 03 2015 Jitka Plesnikova - 1.8-12 - Perl 5.22 rebuild From 3bdb6662a18bfa0ca287a444a58afedefebd966a Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 5 Feb 2016 00:14:46 +0000 Subject: [PATCH 03/30] - Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild --- snmpcheck.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/snmpcheck.spec b/snmpcheck.spec index 1606810..d5a1209 100644 --- a/snmpcheck.spec +++ b/snmpcheck.spec @@ -1,6 +1,6 @@ Name: snmpcheck Version: 1.8 -Release: 13%{?dist} +Release: 14%{?dist} Summary: An utility to get information via SNMP protocols Group: Applications/Internet @@ -67,6 +67,9 @@ rm -rf %{buildroot} %changelog +* Fri Feb 05 2016 Fedora Release Engineering - 1.8-14 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + * Fri Jun 19 2015 Fedora Release Engineering - 1.8-13 - Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild From c8421c3f0b24a472ed925211a9645715df00a72e Mon Sep 17 00:00:00 2001 From: Michal Ambroz Date: Sat, 30 Apr 2016 02:35:16 +0200 Subject: [PATCH 04/30] bump to 1.9 --- snmpcheck-1.8.pl | 1078 -------------------------------------------- snmpcheck-1.9.rb | 1128 ++++++++++++++++++++++++++++++++++++++++++++++ snmpcheck.spec | 14 +- 3 files changed, 1137 insertions(+), 1083 deletions(-) delete mode 100644 snmpcheck-1.8.pl create mode 100644 snmpcheck-1.9.rb diff --git a/snmpcheck-1.8.pl b/snmpcheck-1.8.pl deleted file mode 100644 index cbfa753..0000000 --- a/snmpcheck-1.8.pl +++ /dev/null @@ -1,1078 +0,0 @@ -#!/usr/bin/env perl - -# -# Copyright (c) 2005-2010 by Matteo Cantoni (www.nothink.org) -# -# Like to snmpwalk, snmpcheck permits to enumerate information via SNMP protocol. -# It allows enumeration (hardware, software, network) of any devices with SNMP protocol support. -# It could be useful for penetration testing or systems monitoring. -# -# Distributed under GPL license and based on "Athena-2k" script by jshaw. -# More informations available from http://www.nothink.org. -# -# License: (http://www.gnu.org/licenses/gpl.txt) -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# - -use strict; - -$|=1; - -use threads; -use Getopt::Std; -use Net::SNMP qw(ticks_to_time OCTET_STRING DEBUG_ALL); -use Number::Bytes::Human qw(format_bytes); -use Time::HiRes qw(gettimeofday tv_interval); - -my $name = "snmpcheck.pl"; -my $version = "v1.8"; -my $description = "SNMP enumerator"; -my $copyright = "Copyright (c) 2005-2011"; -my $author = "Matteo Cantoni (www.nothink.org)"; - -# MIBs Involved -# -# System -my $mibDescr = "1.3.6.1.2.1.1.1.0"; # System Description -my $mibNTDomain = "1.3.6.1.4.1.77.1.4.1.0"; # NT Primary Domain -my $mibUptimeInstance = "1.3.6.1.2.1.1.3.0"; # Uptime Instance -my $mibSystemUptime = "1.3.6.1.2.1.25.1.1.0"; # System Uptime -my $mibSystemDate = "1.3.6.1.2.1.25.1.2.0"; # System Date -my $mibContact = "1.3.6.1.2.1.1.4.0"; # System Contact -my $mibName = "1.3.6.1.2.1.1.5.0"; # System Name -my $mibLocation = "1.3.6.1.2.1.1.6.0"; # System Location -my $mibServices = "1.3.6.1.4.1.77.1.2.3.1.1"; # Services (add to it) -my $mibAccounts = "1.3.6.1.4.1.77.1.2.25"; # User Accounts -my $mibMemSize = "1.3.6.1.2.1.25.2.2.0"; # Total System Memory -my $mibMotd = "1.3.6.1.4.1.42.3.1.3.0"; # Motd (Solaris) -# Devices -my $mibDevIndex = "1.3.6.1.2.1.25.3.2.1.1"; # Devices Index -my $mibDevType = "1.3.6.1.2.1.25.3.2.1.2"; # Devices Type -my $mibDevList = "1.3.6.1.2.1.25.3.2.1.3"; # Devices List -my $mibDevStatus = "1.3.6.1.2.1.25.3.2.1.5"; # Devices Status -# Processs -my $mibProcesses = "1.3.6.1.2.1.25.1.6.0"; # System Processes -my $mibRunIndex = "1.3.6.1.2.1.25.4.2.1.1"; # Running PIDs -my $mibRunName = "1.3.6.1.2.1.25.4.2.1.2"; # Running Programs -my $mibRunPath = "1.3.6.1.2.1.25.4.2.1.4"; # Processes Path -my $mibRunParameters = "1.3.6.1.2.1.25.4.2.1.5"; # Processes Parameters -my $mibRunType = "1.3.6.1.2.1.25.4.2.1.6"; # Processes Type -my $mibRunStatus = "1.3.6.1.2.1.25.4.2.1.7"; # Processes Status -my $mibProName = "1.3.6.1.4.1.42.3.12.1.1.10"; # Running Process Name (Solaris) -my $mibProPid = "1.3.6.1.4.1.42.3.12.1.1.1"; # Running Process Pid (Solaris) -my $mibProUser = "1.3.6.1.4.1.42.3.12.1.1.8"; # Running Process User (Solaris) -# Storage -my $mibStorIndex = "1.3.6.1.2.1.25.2.3.1.1"; # Storage Device Index -my $mibStorType = "1.3.6.1.2.1.25.2.3.1.2"; # Storage Device Type -my $mibStorDescr = "1.3.6.1.2.1.25.2.3.1.3"; # Storage Description -my $mibStorUnits = "1.3.6.1.2.1.25.2.3.1.4"; # Storage Units -my $mibStorSize = "1.3.6.1.2.1.25.2.3.1.5"; # Storage Total Size -my $mibStorUsed = "1.3.6.1.2.1.25.2.3.1.6"; # Storage Used -my $mibPtype = "1.3.6.1.2.1.25.3.8.1.4"; # Partition Type -# Network -my $mibInt = "1.3.6.1.2.1.2.2.1.2"; # Network Interfaces -my $mibIntMTU = "1.3.6.1.2.1.2.2.1.4"; # Net Int MTU Size -my $mibIntSpeed = "1.3.6.1.2.1.2.2.1.5"; # Net Int Speed -my $mibIntBytesIn = "1.3.6.1.2.1.2.2.1.10"; # Net Int Octets In -my $mibIntBytesOut = "1.3.6.1.2.1.2.2.1.16"; # Net Int Octects Out -my $mibIntPhys = "1.3.6.1.2.1.2.2.1.6"; # Int MAC addr -my $mibAdminStat = "1.3.6.1.2.1.2.2.1.7"; # Int up/down? -my $mibIPForward = "1.3.6.1.2.1.4.1.0"; # IP Forwarding? -my $mibIPAddr = "1.3.6.1.2.1.4.20.1.1"; # Int IP Address -my $mibNetmask = "1.3.6.1.2.1.4.20.1.3"; # Int IP Netmask -# Software -my $mibSoftIndex = "1.3.6.1.2.1.25.6.3.1.1"; # Software Index -my $mibSoftName = "1.3.6.1.2.1.25.6.3.1.2"; # Software Name -# Shares -my $mibShareName = "1.3.6.1.4.1.77.1.2.27.1.1"; # Reports Share Names -my $mibSharePath = "1.3.6.1.4.1.77.1.2.27.1.2"; # Reports Share Path -my $mibShareComm = "1.3.6.1.4.1.77.1.2.27.1.3"; # Reports Share Comments -# Routing Info -my $mibRouteDest = "1.3.6.1.2.1.4.21.1.1"; # Route Destinations -my $mibRouteMetric = "1.3.6.1.2.1.4.21.1.3"; # Route Metric -my $mibRouteNHop = "1.3.6.1.2.1.4.21.1.7"; # Route Next Hop -my $mibRouteMask = "1.3.6.1.2.1.4.21.1.11"; # Route Mask -# IP -my $mibDefaultTTL = "1.3.6.1.2.1.4.2.0"; # IP Default TTL -my $mibInReceives = "1.3.6.1.2.1.4.3.0"; # IP In Receives -my $mibInDelivers = "1.3.6.1.2.1.4.9.0"; # IP In Delivers -my $mibOutRequests = "1.3.6.1.2.1.4.10.0"; # IP Out Requests -# TCP -my $mibTCPInSegs = "1.3.6.1.2.1.6.10.0"; # TCP In Segs -my $mibTCPOutSegs = "1.3.6.1.2.1.6.11.0"; # TCP Out Segs -my $mibTCPRetransSegs = "1.3.6.1.2.1.6.12.0"; # TCP Retrans Segs -my $mibTCPState = "1.3.6.1.2.1.6.13.1.1"; # TCP Connect State -my $mibTCPLAddr = "1.3.6.1.2.1.6.13.1.2"; # TCP Local Address -my $mibTCPLPort = "1.3.6.1.2.1.6.13.1.3"; # TCP Local Port -my $mibTCPRAddr = "1.3.6.1.2.1.6.13.1.4"; # TCP Remote Address -my $mibTCPRPort = "1.3.6.1.2.1.6.13.1.5"; # TCP Remote Port -# UDP -my $mibUDPLAddr = "1.3.6.1.2.1.7.5.1.1"; # UDP Local Address -my $mibUDPLPort = "1.3.6.1.2.1.7.5.1.2"; # UDP Local Port -# IIS -my $http_totalBytesSentLowWord = "1.3.6.1.4.1.311.1.7.3.1.2.0"; # IIStotalBytesSentLowWord -my $http_totalBytesReceivedLowWord = "1.3.6.1.4.1.311.1.7.3.1.4.0"; # IIStotalBytesReceivedLowWord -my $http_totalFilesSent = "1.3.6.1.4.1.311.1.7.3.1.5.0"; # IIStotalFilesSent -my $http_currentAnonymousUsers = "1.3.6.1.4.1.311.1.7.3.1.6.0"; # IIScurrentAnonymousUsers -my $http_currentNonAnonymousUsers = "1.3.6.1.4.1.311.1.7.3.1.7.0"; # IIScurrentNonAnonymousUsers -my $http_totalAnonymousUsers = "1.3.6.1.4.1.311.1.7.3.1.8.0"; # IIStotalAnonymousUsers -my $http_totalNonAnonymousUsers = "1.3.6.1.4.1.311.1.7.3.1.9.0"; # IIStotalNonAnonymousUsers -my $http_maxAnonymousUsers = "1.3.6.1.4.1.311.1.7.3.1.10.0"; # IISmaxAnonymousUsers -my $http_maxNonAnonymousUsers = "1.3.6.1.4.1.311.1.7.3.1.11.0"; # IISmaxNonAnonymousUsers -my $http_currentConnections = "1.3.6.1.4.1.311.1.7.3.1.12.0"; # IIScurrentConnections -my $http_maxConnections = "1.3.6.1.4.1.311.1.7.3.1.13.0"; # IISmaxConnections -my $http_connectionAttempts = "1.3.6.1.4.1.311.1.7.3.1.14.0"; # IISconnectionAttempts -my $http_logonAttempts = "1.3.6.1.4.1.311.1.7.3.1.15.0"; # IISlogonAttempts -my $http_totalGets = "1.3.6.1.4.1.311.1.7.3.1.16.0"; # IIStotalGets -my $http_totalPosts = "1.3.6.1.4.1.311.1.7.3.1.17.0"; # IIStotalPosts -my $http_totalHeads = "1.3.6.1.4.1.311.1.7.3.1.18.0"; # IIStotalHeads -my $http_totalOthers = "1.3.6.1.4.1.311.1.7.3.1.19.0"; # IIStotalOthers -my $http_totalCGIRequests = "1.3.6.1.4.1.311.1.7.3.1.20.0"; # IIStotalCGIRequests -my $http_totalBGIRequests = "1.3.6.1.4.1.311.1.7.3.1.21.0"; # IIStotalBGIRequests -my $http_totalNotFoundErrors = "1.3.6.1.4.1.311.1.7.3.1.22.0"; # IIStotalNotFoundErrors - -our ($opt_t,$opt_p,$opt_c,$opt_v,$opt_r,$opt_w,$opt_d,$opt_T,$opt_D,$opt_h); -getopts("t:p:c:v:r:wdT:Dh"); - -my $community = $opt_c || "public"; -my $port = $opt_p || 161; -my $snmpver = $opt_v || 1; -my $retries = $opt_r || 0; -my $timeout = $opt_T || 20; - -my $usage = "$name $version - $description\n$copyright by $author\n - Usage ./$name -t \n -\t-t : target host; - -\t-p : SNMP port; default port is $port; -\t-c : SNMP community; default is $community; -\t-v : SNMP version (1,2); default is $snmpver; -\t-r : request retries; default is $retries; - -\t-w : detect write access (separate action by enumeration); - -\t-d : disable 'TCP connections' enumeration! -\t-T : force timeout in seconds; default is $timeout. Max is 60; -\t-D : enable debug; -\t-h : show help menu;\n\n"; - -die $usage if $opt_h; -die $usage unless $opt_t; - -my ($target,$session,$error,$debug,$thr); - -if ($opt_t !~ /^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$/){ - die " [*] Error: target is not a valid IP address!\n"; -} else { - $target = $opt_t; -} - -if (($opt_T) and ($opt_T !~ /^(\d+)$/) or ($timeout < 0 or $timeout > 60)){ - die " [*] Error: max timeout value is 60 seconds!\n"; -} - -if ($opt_v and $opt_v !~ /1|2/){ - die " [*] Error: currently only SNMPv1 and SNMPv2c permitted!\n"; -} - -if ($opt_D){ - $debug = "0x02"; -} else{ - $debug = "0"; -} - -if (!$opt_T){ - $thr = threads->new(\&WaitProcess,30); - $thr->detach(); -} - -$SIG{INT} = sub { - if ($session){ - print " [*] Closing connection...\n"; - $session->close; - } - - $thr->kill('SIGUSR1'); - threads->exit(); - - exit(1); -}; - -print "$name $version - $description\n$copyright by $author\n\n"; - -print " [*] Try to connect to $target\n"; - -local $SIG{ALRM} = sub { - if ($session){ - print " [*] Timeout while connecting to host $target\n\n"; - $session->close; - } - exit(0); -}; - -alarm $timeout if $opt_T; - -Connection($target); - -if (!$opt_T){ - $thr->kill('SIGUSR1'); - threads->exit(); -} - -print "\n"; - -exit(0); - -sub Connection { - my $target = shift; - - ($session,$error) = Net::SNMP->session( - Hostname => $target, - Community => $community, - Domain => 'udp', - Port => $port, - Version => $snmpver, - Timeout => $timeout, - Retries => $retries, - Debug => $debug, - Translate => [ - -timeticks => 0x0 - ] - ); - - if (!$session){ - printf " [*] Error: %s.\n", $session->error(); - $session->close(); - if (!$opt_T){ - $thr->kill('SIGUSR1'); - threads->exit(); - } - exit(1); - } - - my $start_time = [gettimeofday]; - - print " [*] Connected to $target\n"; - - my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); - printf " [*] Starting enumeration at %4d-%02d-%02d %02d:%02d:%02d\n",$year+1900,$mon+1,$mday,$hour,$min,$sec; - - # Write access check - if ($opt_w){ - - my $contact = $session->get_request( - -varbindlist => [ $mibContact ] - ); - - if (!$contact){ - printf " [*] Error: %s.\n", $session->error(); - $session->close(); - if (!$opt_T){ - $thr->kill('SIGUSR1'); - threads->exit(); - } - exit(1); - } - - my $check = $session->set_request( - -varbindlist => [$mibContact, OCTET_STRING ,'testwriteaccess'] - ); - - if ($check){ - print " [*] Write access enabled!\n"; - $session->set_request( - -varbindlist => [$mibContact, OCTET_STRING ,$contact] - ); - } else { - print " [*] No write access enabled.\n"; - } - - $session->close; - - my $end_time = [gettimeofday]; - my $elapsed = tv_interval($start_time,$end_time); - - printf " [*] Checked $target in %.2f seconds\n",$elapsed; - - exit(0); - } - - my $hostname = $session->get_request( - -varbindlist => [ $mibName ] - ); - - if (!$hostname){ - printf " [*] Error: %s.\n", $session->error(); - $session->close(); - if (!$opt_T){ - $thr->kill('SIGUSR1'); - threads->exit(); - } - exit(1); - } else { - $hostname = $hostname->{$mibName}; - } - - my $descr = SNMPSystem($hostname); - - SNMPDevices() if $descr !~ /^-|^Cisco|^Fibre|^Sun/; - SNMPStorage() if $descr !~ /^-|^Cisco|^Fibre|^Sun/; - SNMPAccounts() if $descr !~ /^-|^Cisco|^Fibre|^Sun|^Linux/; - SNMPProcesses($descr) if $descr !~ /^-|^Cisco|^Fibre|^Sun/; - SNMPNetInfo(); - SNMPRoutingInfo(); - SNMPNetServices(); - SNMPTCPConnections() if !$opt_d; - SNMPUDPPorts(); - SNMPSoftware() if $descr !~ /^-|^Cisco|^Fibre|^Sun/; - SNMPShares() if $descr !~ /^-|^Cisco|^Fibre|^Linux/; - SNMPMountPoints() if $descr !~ /^-|^Cisco|^Fibre|^Hardware/; - SNMPIIS() if $descr =~ /^Hardware/; - - $session->close; - - my $end_time = [gettimeofday]; - my $elapsed = tv_interval($start_time,$end_time); - - printf "\n [*] Enumerated $target in %.2f seconds\n",$elapsed; -} - -sub SNMPSystem { - - my $hostname = shift; - my $descr = GetRequest($mibDescr); - my $uptimeinstance = GetRequest($mibUptimeInstance); - my $systemuptime = GetRequest($mibSystemUptime); - my $contact = GetRequest($mibContact); - my $location = GetRequest($mibLocation); - my $motd = GetRequest($mibMotd); - my $ntdomain = GetRequest($mibNTDomain) if $descr =~ /^Hardware/; - - $descr = Sanitize($descr); - $motd = Sanitize($motd); - - PrintTitle("System information"); - - $uptimeinstance = ticks_to_time($uptimeinstance); - $systemuptime = ticks_to_time($systemuptime); - - print " Hostname : $hostname\n" if $hostname; - print " Description : $descr\n" if $descr; - print " Uptime system : $systemuptime\n" if $systemuptime; - print " Uptime SNMP daemon : $uptimeinstance\n" if $uptimeinstance; - print " Contact : $contact\n" if $contact; - print " Location : $location\n" if $location; - print " Motd : $motd\n" if $motd; - print " Domain (NT) : $ntdomain\n" if $ntdomain; - - return $descr; -} - -sub SNMPStorage { - - my @storindex = GetTable($mibStorIndex); - my @stortype = GetTable($mibStorType); - my @stordescr = GetTable($mibStorDescr); - my @storsize = GetTable($mibStorSize); - my @storused = GetTable($mibStorUsed); - my @storunits = GetTable($mibStorUnits); - my @ptype = GetTable($mibPtype); - - if ($#stordescr > 0){ - - PrintTitle("Storage information"); - - my $a = 0; - - foreach (@stordescr){ - - my %storagetypes = ( - '1.3.6.1.2.1.25.2.1.1' => 'Other', - '1.3.6.1.2.1.25.2.1.2' => 'Ram', - '1.3.6.1.2.1.25.2.1.3' => 'Virtual Memory', - '1.3.6.1.2.1.25.2.1.4' => 'Fixed Disk', - '1.3.6.1.2.1.25.2.1.5' => 'Removable Disk', - '1.3.6.1.2.1.25.2.1.6' => 'Floppy Disk', - '1.3.6.1.2.1.25.2.1.7' => 'Compact Disc', - '1.3.6.1.2.1.25.2.1.8' => 'Ram Disk', - '1.3.6.1.2.1.25.2.1.9' => 'Flash Memory', - '1.3.6.1.2.1.25.2.1.10' => 'Network Disk' - ); - - my %fstypes = ( - '1.3.6.1.2.1.25.3.9.1' => 'Other', - '1.3.6.1.2.1.25.3.9.2' => 'Unknown', - '1.3.6.1.2.1.25.3.9.3' => 'BerkeleyFFS', - '1.3.6.1.2.1.25.3.9.4' => 'Sys5FS', - '1.3.6.1.2.1.25.3.9.5' => 'Fat', - '1.3.6.1.2.1.25.3.9.6' => 'HPFS', - '1.3.6.1.2.1.25.3.9.7' => 'HFS', - '1.3.6.1.2.1.25.3.9.8' => 'MFS', - '1.3.6.1.2.1.25.3.9.9' => 'NTFS', - '1.3.6.1.2.1.25.3.9.10' => 'VNode', - '1.3.6.1.2.1.25.3.9.11' => 'Journaled', - '1.3.6.1.2.1.25.3.9.12' => 'iso9660', - '1.3.6.1.2.1.25.3.9.13' => 'RockRidge', - '1.3.6.1.2.1.25.3.9.14' => 'NFS', - '1.3.6.1.2.1.25.3.9.15' => 'Netware', - '1.3.6.1.2.1.25.3.9.16' => 'AFS', - '1.3.6.1.2.1.25.3.9.17' => 'DFS', - '1.3.6.1.2.1.25.3.9.18' => 'Appleshare', - '1.3.6.1.2.1.25.3.9.19' => 'RFS', - '1.3.6.1.2.1.25.3.9.20' => 'DGCFS', - '1.3.6.1.2.1.25.3.9.21' => 'BFS', - '1.3.6.1.2.1.25.3.9.22' => 'FAT32', - '1.3.6.1.2.1.25.3.9.23' => 'LinuxExt2' - ); - - print " $_\n"; - - print "\tDevice id : $storindex[$a]\n" if $storindex[$a]; - print "\tDevice type : $storagetypes{$stortype[$a]}\n" if $storagetypes{$stortype[$a]}; - - if ($ptype[$a]){ - if ($fstypes{$ptype[$a]}){ - print "\tFilesystem type : $fstypes{$ptype[$a]}\n"; - } else{ - print "\tFilesystem type : Unknown\n"; - } - } else{ - print "\tFilesystem type : Unknown\n"; - } - - if ($storunits[$a]){ - print "\tDevice units : $storunits[$a]\n"; - - if ($storsize[$a]){ - $storsize[$a] = ($storsize[$a] * $storunits[$a]); - my $s = format_bytes($storsize[$a]); - print "\tMemory size : $s\n"; - } - - if ($storused[$a]){ - $storused[$a] = $storused[$a] * $storunits[$a]; - my $s = format_bytes($storused[$a]); - print "\tMemory used : $s\n"; - } - - if ($storsize[$a] and $storused[$a]){ - my $free = $storsize[$a] - $storused[$a]; - $free = format_bytes($free); - print "\tMemory free : $free\n"; - } - } - - print "\n"; - - $a++; - } - } -} - -sub SNMPDevices { - - my @devicesindex = GetTable($mibDevIndex); - my @devicestype = GetTable($mibDevType); - my @deviceslist = GetTable($mibDevList); - my @devicestatus = GetTable($mibDevStatus); - - if ($#deviceslist > 0){ - - PrintTitle("Devices information"); - - my %devicetype = ( - '1.3.6.1.2.1.25.3.1.1' => 'Other', - '1.3.6.1.2.1.25.3.1.2' => 'Unknown', - '1.3.6.1.2.1.25.3.1.3' => 'Processor', - '1.3.6.1.2.1.25.3.1.4' => 'Network', - '1.3.6.1.2.1.25.3.1.5' => 'Printer', - '1.3.6.1.2.1.25.3.1.6' => 'Disk Storage', - '1.3.6.1.2.1.25.3.1.10' => 'Video', - '1.3.6.1.2.1.25.3.1.11' => 'Audio', - '1.3.6.1.2.1.25.3.1.12' => 'Coprocessor', - '1.3.6.1.2.1.25.3.1.13' => 'Keyboard', - '1.3.6.1.2.1.25.3.1.14' => 'Modem', - '1.3.6.1.2.1.25.3.1.15' => 'Parallel Port', - '1.3.6.1.2.1.25.3.1.16' => 'Pointing', - '1.3.6.1.2.1.25.3.1.17' => 'Serial Port', - '1.3.6.1.2.1.25.3.1.18' => 'Tape', - '1.3.6.1.2.1.25.3.1.19' => 'Clock', - '1.3.6.1.2.1.25.3.1.20' => 'Volatile Memory', - '1.3.6.1.2.1.25.3.1.21' => 'Non Volatile Memory' - ); - - printf " %5s %20s %7s %s\n\n","Id","Type","Status","Description"; - - my $a = 0; - - foreach (@deviceslist){ - - my $id = '-'; - my $type = '-'; - my $status = 'Unknown'; - my $descr = $_; - - $type = $devicetype{$devicestype[$a]}; - - if ($devicestatus[$a]){ - if ($devicestatus[$a] eq '1'){ - $status = "Unknown"; - }elsif($devicestatus[$a] eq '2'){ - $status = "Running"; - }elsif($devicestatus[$a] eq '3'){ - $status = "Warning"; - }elsif($devicestatus[$a] eq '4'){ - $status = "Testing"; - }elsif($devicestatus[$a] eq '5'){ - $status = "Down"; - } - } - - printf " %5s %20s %7s %s\n",$devicesindex[$a],$type,$status,$descr; - - $a++; - } - } -} - -sub SNMPAccounts { - - my @accounts = GetTable($mibAccounts); - - if ($#accounts > 0){ - - PrintTitle("User accounts"); - - @accounts = sort @accounts; - foreach(@accounts){ - print " $_\n"; - } - } -} - -sub SNMPProcesses { - - my $descr = shift; - - if ($descr =~ /^Sun/){ - - # Solaris - my @runproid = GetTable("1.3.6.1.4.1.42.3.12.1.1.1"); # psProcessID - my @runparid = GetTable("1.3.6.1.4.1.42.3.12.1.1.2"); # psParentProcessID - my @runprosize = GetTable("1.3.6.1.4.1.42.3.12.1.1.3"); # psProcessSize - my @runcputime = GetTable("1.3.6.1.4.1.42.3.12.1.1.4"); # psProcessCpuTime - my @runstate = GetTable("1.3.6.1.4.1.42.3.12.1.1.5"); # psProcessState - my @runtty = GetTable("1.3.6.1.4.1.42.3.12.1.1.7"); # psProcessTTY - my @runusername = GetTable("1.3.6.1.4.1.42.3.12.1.1.8"); # psProcessUserName - my @runuserid = GetTable("1.3.6.1.4.1.42.3.12.1.1.9"); # psProcessUserID - my @runname = GetTable("1.3.6.1.4.1.42.3.12.1.1.10"); # psProcessName - my @runstatus = GetTable("1.3.6.1.4.1.42.3.12.1.1.11"); # psProcessStatus - - if ($#runproid > 0){ - - PrintTitle("Processes"); - - print " Pid Ppid Size Cputime State TTY Username Uid Name Status\n\n"; - - for (my $a = 0; $a < $#runproid; $a++){ - printf " %6s %6s %6s %6s %6s %10s %10s %6s %15s %6s\n", $runproid[$a],$runparid[$a],$runprosize[$a],$runcputime[$a],$runstate[$a],$runtty[$a],$runusername[$a],$runuserid[$a],$runname[$a],$runstatus[$a]; - } - } - - } else{ - # Other - my $processes = GetRequest($mibProcesses); - my @runindex = GetTable($mibRunIndex); - my @runname = GetTable($mibRunName); - my @runpath = GetTable($mibRunPath); - my @runtype = GetTable($mibRunType); - my @runstatus = GetTable($mibRunStatus); - - if ($#runindex > 0){ - - PrintTitle("Processes"); - - print " Total processes : $processes\n\n" if $processes; - print " Process type : 1 unknown, 2 operating system, 3 device driver, 4 application\n"; - print " Process status : 1 running, 2 runnable, 3 not runnable, 4 invalid\n\n"; - - printf " %10s %25s %13s %15s Process path\n\n", "Process id","Process name","Process type","Process status"; - - for (my $a = 0; $a < $#runindex; $a++){ - if ($runname[$a] ne " System Idle Process"){ - printf " %10s %25s %13s %15s $runpath[$a]\n", $runindex[$a],$runname[$a],$runtype[$a],$runstatus[$a]; - } - } - } - } -} - -sub SNMPNetInfo { - - PrintTitle("Network information"); - - my $ipforward = GetRequest($mibIPForward); - my $DefaultTTL = GetRequest($mibDefaultTTL); - my $TCPInSegs = GetRequest($mibTCPInSegs); - my $TCPOutSegs = GetRequest($mibTCPOutSegs); - my $TCPRetransSegs = GetRequest($mibTCPRetransSegs); - my $InReceives = GetRequest($mibInReceives); - my $InDelivers = GetRequest($mibInDelivers); - my $OutRequests = GetRequest($mibOutRequests); - - if ($ipforward eq "0" || $ipforward eq "2") { $ipforward = "no"; } - - print " IP forwarding enabled : $ipforward\n"; - print " Default TTL : $DefaultTTL\n"; - print " TCP segments received : $TCPInSegs\n"; - print " TCP segments sent : $TCPOutSegs\n"; - print " TCP segments retrans. : $TCPRetransSegs\n"; - print " Input datagrams : $InReceives\n"; - print " Delivered datagrams : $InDelivers\n"; - print " Output datagrams : $OutRequests\n"; - - my @int = GetTable($mibInt); - my @mtu = GetTable($mibIntMTU); - my @intspeed = GetTable($mibIntSpeed); - my @intbytesin = GetTable($mibIntBytesIn); - my @intbytesout = GetTable($mibIntBytesOut); - my @intphys = GetTable($mibIntPhys); - my @ipaddr = GetTable($mibIPAddr); - my @netmask = GetTable($mibNetmask); - my @adminstat = GetTable($mibAdminStat); - - if ($#int > 0){ - - PrintTitle("Network interfaces"); - - $#int++; - for (my $a = 0; $a < $#int; $a++){ - - chomp $int[$a]; - - if (@adminstat){ - if ($adminstat[$a] eq "0"){ - $adminstat[$a] = "down"; - } else { - $adminstat[$a] = "up"; - } - } else { - $adminstat[$a] = '-'; - } - - if ($intspeed[$a] !~ /-/){ - - $intspeed[$a] = $intspeed[$a] / 1000000; - - if ($intphys[$a]){ - $intphys[$a] =~ s/\A..//xms; # remove the 0x - $intphys[$a] =~ s/(..)/$1:/g; # add a colon between bytes - $intphys[$a] =~ s/:$//; # remove the trailing : - } - - print " Interface : [ $adminstat[$a] ] $int[$a]\n\n"; - print "\tHardware Address : $intphys[$a]\n" if $intphys[$a]; - print "\tInterface Speed : $intspeed[$a] Mbps\n" if $intspeed[$a]; - print "\tIP Address : $ipaddr[$a]\n" if $ipaddr[$a]; - print "\tNetmask : $netmask[$a]\n" if $ipaddr[$a]; - print "\tMTU : $mtu[$a]\n" if $mtu[$a]; - - if ($intbytesin[$a]){ - print "\tBytes In : $intbytesin[$a]"; - $intbytesin[$a] = format_bytes($intbytesin[$a]); - print " ($intbytesin[$a])\n"; - } - - if ($intbytesout[$a]){ - print "\tBytes Out : $intbytesout[$a]"; - if ($intbytesout[$a] =~ /(\d+)/){ - $intbytesout[$a] = format_bytes($intbytesout[$a]); - } - print " ($intbytesout[$a])\n"; - } - - print "\n"; - } - } - } -} - -sub SNMPNetServices { - - my @services = GetTable($mibServices); - - if ($#services > 0){ - - PrintTitle("Network services"); - - @services = sort @services; - foreach(@services){ - print " $_\n"; - } - } -} - -sub SNMPRoutingInfo { - - my @routedest = GetTable($mibRouteDest); - my @routenhop = GetTable($mibRouteNHop); - my @routemask = GetTable($mibRouteMask); - my @routemetric = GetTable($mibRouteMetric); - - if ($#routedest > 0){ - - PrintTitle("Routing information"); - - print " Destination\t Next Hop\t Mask\tMetric\n\n"; - - for (my $a = 0; $a < $#routedest; $a++){ - - $routedest[$a] = '-' if !$routedest[$a]; - $routenhop[$a] = '-' if !$routenhop[$a]; - $routemask[$a] = '-' if !$routemask[$a]; - $routemetric[$a] = '-' if !$routemetric[$a]; - - printf "%17s%17s%17s%9s\n", $routedest[$a], $routenhop[$a], $routemask[$a], $routemetric[$a]; - } - } -} - -sub SNMPTCPConnections { - - my @tcpstate = GetTable($mibTCPState); - my @tcpladdr = GetTable($mibTCPLAddr); - my @tcplport = GetTable($mibTCPLPort); - my @tcpraddr = GetTable($mibTCPRAddr); - my @tcprport = GetTable($mibTCPRPort); - - if ($#tcpstate > 0){ - - PrintTitle("Listening TCP ports and connections"); - - print " Local Address Port Remote Address Port State\n\n"; - - for (my $a = 0; $a < $#tcpstate; $a++){ - if ($tcpstate[$a] eq "1") { $tcpstate[$a] = "Closed"; } - if ($tcpstate[$a] eq "2") { $tcpstate[$a] = "Listening"; } - if ($tcpstate[$a] eq "3") { $tcpstate[$a] = "SYN sent"; } - if ($tcpstate[$a] eq "4") { $tcpstate[$a] = "SYN received"; } - if ($tcpstate[$a] eq "5") { $tcpstate[$a] = "Established"; } - if ($tcpstate[$a] eq "6") { $tcpstate[$a] = "FIN wait1"; } - if ($tcpstate[$a] eq "7") { $tcpstate[$a] = "FIN wait2"; } - if ($tcpstate[$a] eq "8") { $tcpstate[$a] = "Close wait"; } - if ($tcpstate[$a] eq "9") { $tcpstate[$a] = "Last ack"; } - if ($tcpstate[$a] eq "10") { $tcpstate[$a] = "Closing"; } - if ($tcpstate[$a] eq "11") { $tcpstate[$a] = "Time wait"; } - if ($tcpstate[$a] eq "12") { $tcpstate[$a] = "Delete tcb"; } - - $tcpladdr[$a] = '-' if !$tcpladdr[$a]; - $tcplport[$a] = '-' if !$tcplport[$a]; - $tcpraddr[$a] = '-' if !$tcpraddr[$a]; - $tcprport[$a] = '-' if !$tcprport[$a]; - $tcpstate[$a] = '-' if !$tcpstate[$a]; - - printf " %15s %6s %17s %6s %15s\n", $tcpladdr[$a], $tcplport[$a], $tcpraddr[$a], $tcprport[$a], $tcpstate[$a]; - } - } -} - -sub SNMPUDPPorts { - - my @udpladdr = GetTable($mibUDPLAddr); - my @udplport = GetTable($mibUDPLPort); - - if ($#udpladdr > 0){ - - PrintTitle("Listening UDP ports"); - - print " Local Address Port\n\n"; - - for (my $a = 0; $a < $#udpladdr; $a++){ - $udpladdr[$a] = '-' if !$udpladdr[$a]; - $udplport[$a] = '-' if !$udplport[$a]; - - printf " %15s %6s\n", $udpladdr[$a], $udplport[$a]; - } - } -} - -sub SNMPSoftware { - - my @softindex = GetTable($mibSoftIndex); - my @softname = GetTable($mibSoftName); - - if ($#softname > 0){ - - PrintTitle("Software components"); - - my @soft; - for (my $a = 0; $a < $#softname; $a++){ - push @soft,"$softindex[$a]. $softname[$a]"; - } - - @soft = sort @soft; - foreach(@soft){ - print " $_\n"; - } - } -} - -sub SNMPIIS { - - my $http_totalBytesSentLowWord = GetRequest($http_totalBytesSentLowWord); - my $http_totalBytesReceivedLowWord = GetRequest($http_totalBytesReceivedLowWord); - my $http_totalFilesSent = GetRequest($http_totalFilesSent); - my $http_currentAnonymousUsers = GetRequest($http_currentAnonymousUsers); - my $http_currentNonAnonymousUsers = GetRequest($http_currentNonAnonymousUsers); - my $http_totalAnonymousUsers = GetRequest($http_totalAnonymousUsers); - my $http_totalNonAnonymousUsers = GetRequest($http_totalNonAnonymousUsers); - my $http_maxAnonymousUsers = GetRequest($http_maxAnonymousUsers); - my $http_maxNonAnonymousUsers = GetRequest($http_maxNonAnonymousUsers); - my $http_currentConnections = GetRequest($http_currentConnections); - my $http_maxConnections = GetRequest($http_maxConnections); - my $http_connectionAttempts = GetRequest($http_connectionAttempts); - my $http_logonAttempts = GetRequest($http_logonAttempts); - my $http_totalGets = GetRequest($http_totalGets); - my $http_totalPosts = GetRequest($http_totalPosts); - my $http_totalHeads = GetRequest($http_totalHeads); - my $http_totalOthers = GetRequest($http_totalOthers); - my $http_totalCGIRequests = GetRequest($http_totalCGIRequests); - my $http_totalBGIRequests = GetRequest($http_totalBGIRequests ); - my $http_totalNotFoundErrors = GetRequest($http_totalNotFoundErrors); - - if ($http_totalFilesSent){ - PrintTitle("Web server information"); - } - - if ($http_totalBytesSentLowWord){ - if ($http_totalBytesSentLowWord =~ /\d+/){ - $http_totalBytesSentLowWord = format_bytes($http_totalBytesSentLowWord); - print " Total bytes sent low word : $http_totalBytesSentLowWord\n"; - } else { - print " Total bytes sent low word : -\n"; - } - } - - if ($http_totalBytesReceivedLowWord){ - if ($http_totalBytesReceivedLowWord =~ /\d+/){ - $http_totalBytesReceivedLowWord = format_bytes($http_totalBytesReceivedLowWord); - print " Total bytes received low word : $http_totalBytesReceivedLowWord\n"; - } else { - print " Total bytes received low word : -\n"; - } - } - - print " Total files sent : $http_totalFilesSent\n" if $http_totalFilesSent; - print " Current anonymous users : $http_currentAnonymousUsers\n" if $http_currentAnonymousUsers; - print " Current non anonymous users : $http_currentNonAnonymousUsers\n" if $http_currentNonAnonymousUsers; - print " Total anonymous users : $http_totalAnonymousUsers\n" if $http_totalAnonymousUsers; - print " Total non anonymous users : $http_totalNonAnonymousUsers\n" if $http_totalNonAnonymousUsers; - print " Max anonymous users : $http_maxAnonymousUsers\n" if $http_maxAnonymousUsers; - print " Max non anonymous users : $http_maxNonAnonymousUsers\n" if $http_maxNonAnonymousUsers; - print " Current connections : $http_currentConnections\n" if $http_currentConnections; - print " Max connections : $http_maxConnections\n" if $http_maxConnections; - print " Connection attempts : $http_connectionAttempts\n" if $http_connectionAttempts; - print " Logon attempts : $http_logonAttempts\n" if $http_logonAttempts; - print " Total gets : $http_totalGets\n" if $http_totalGets; - print " Total posts : $http_totalPosts\n" if $http_totalPosts; - print " Total heads : $http_totalHeads\n" if $http_totalHeads; - print " Total others : $http_totalOthers\n" if $http_totalOthers; - print " Total CGI requests : $http_totalCGIRequests\n" if $http_totalCGIRequests; - print " Total BGI requests : $http_totalBGIRequests\n" if $http_totalBGIRequests; - print " Total not found errors : $http_totalNotFoundErrors\n" if $http_totalNotFoundErrors; -} - -sub SNMPMountPoints { - - my @StorDescr = GetTable($mibStorDescr); - - if ($#StorDescr > 0){ - - PrintTitle("Mountpoints"); - - my $x = 0; - - for (my $a = 0; $a < $#StorDescr; $a++){ - if ($StorDescr[$a] =~ /\//){ - print " $StorDescr[$a]\n"; - $x++; - } - } - - if ($x == 0){ - print " Not available\n"; - } - } -} - -sub SNMPShares { - - my @ShareName = GetTable($mibShareName); - my @SharePath = GetTable($mibSharePath); - my @ShareComm = GetTable($mibShareComm); - - if ($#ShareName > 0){ - - PrintTitle("Non-administrative shares"); - - for (my $a = 0; $a < $#ShareName; $a++){ - print " Share Name : $ShareName[$a]\n"; - print " Path : $SharePath[$a]\n"; - print " Comments : $ShareComm[$a]\n\n"; - } - } -} - -sub GetRequest { - - my $oid = shift; - - my $result = $session->get_request( - -varbindlist => [ $oid ] - ); - - if ($result){ - return $result->{$oid}; - } else { - return '-'; - } -} - -sub GetTable { - - my $oid = shift; - - my @return; - my $response = ''; - my $x = 0; - - if ($response = $session->get_table(-baseoid => $oid)){ - foreach my $key (sort keys %$response){ - if ($$response{$key} ne " Virtual Memory"){ - $return[$x] = $$response{$key}; - $x++; - } - } - - return @return; - } else{ - return '-'; - } -} - -sub PrintTitle { - - my $title = shift; - - print "\n [*] $title\n"; - print " "; print "-" x 95; print "\n\n"; -} - -sub Sanitize { - - my $string = shift; - - if ($string){ - chomp $string; - $string =~ s/^\s+$|^\s+$|\n+|\r+//g; - } - - return $string; -} - -sub WaitProcess { - - my $timeout = shift; - - while(1){ - sleep $timeout; - print " [*] Wait...don't stop $name...\n"; - } -} - -__END__ - -=head1 NAME - -snmpcheck - Perl script to enumerate information via SNMP protocol - -=head1 SYNOPSIS - -./snmpcheck.pl -t - --t : target host; - --p : SNMP port; default port is 161; - --c : SNMP community; default is public; - --v : SNMP version (1,2); default is 1; - --r : request retries; default is 2; - --w : detect write access (separate action by enumeration); - --d : disable 'TCP connections' enumeration! - --T : force timeout in seconds; default is 60. Max is 60; - --D : enable debug; - --h : show help menu; - -=head1 DESCRIPTION - -Like to snmpwalk, snmpcheck permits to enumerate information via SNMP protocol. -It allows enumeration (hardware, software, network) of any devices with SNMP protocol support. -It could be useful for penetration testing or systems monitoring. - -Tested on GNU/Linux, *BSD and Windows (Cygwin and ActivePerl) systems. -Distributed under GPL license and based on "Athena-2k" script by jshaw. - -=head1 NOTE - -"TCP connections enumeration" can be very long. Use -d flag to disable it. - -=head1 BUGS - -You can help sending bug reports or writing patches. - -=head1 SEE ALSO - -http://en.wikipedia.org/wiki/Simple_Network_Management_Protocol -http://net-snmp.sourceforge.net/docs/man/snmpwalk.html - -=head1 AUTHOR - -Matteo Cantoni, Ematteo.cantoni@nothink.org - -=head1 COPYRIGHT AND LICENSE - -Copyright (C) 2005-2010 by Matteo Cantoni - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . - -=cut diff --git a/snmpcheck-1.9.rb b/snmpcheck-1.9.rb new file mode 100644 index 0000000..5b8eece --- /dev/null +++ b/snmpcheck-1.9.rb @@ -0,0 +1,1128 @@ +#!/usr/bin/env ruby + +# +# Copyright (c) 2005-2015 by Matteo Cantoni (www.nothink.org) +# +# Snmpcheck is an open source tool distributed under GPL license. +# Its goal is to automate the process of gathering information of +# any devices with SNMP protocol support (Windows, Unix-like, +# network appliances, printers...). +# Like to snmpwalk, snmpcheck allows you to enumerate the SNMP devices +# and places the output in a very human readable friendly format. +# It could be useful for penetration testing or systems monitoring. +# More informations available from http://www.nothink.org. +# +# Install Ruby SNMP library using RubyGems: 'gem install snmp' +# +# --- +# +# License: (http://www.gnu.org/licenses/gpl.txt) +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# Thanks to Metasploit contributors! +# http://www.rapid7.com/db/modules/auxiliary/scanner/snmp/snmp_enum +# + +# ruby version check +if RUBY_VERSION < "1.9.0" +abort <<-end_message +[!] snmpcheck requires Ruby version >= 1.9.0 +end_message +end + +require 'getoptlong' +require 'rubygems' +require 'snmp' +require 'timeout' + +include SNMP + +# catching Ctrl+C +trap("SIGINT") { exit! } + +# disable verbose +$VERBOSE = nil + +script_name = 'snmpcheck.rb'; +script_version = 'v1.9'; +script_description = 'SNMP enumerator'; +script_copyright = 'Copyright (c) 2005-2015'; +script_author = 'Matteo Cantoni (www.nothink.org)'; + +script_usage = " Usage: #{script_name} [OPTIONS] \n + -p --port : SNMP port. Default port is 161; + -c --community : SNMP community. Default is public; + -v --version : SNMP version (1,2c). Default is 1;\n + -w --write : detect write access (separate action by enumeration);\n + -d --disable_tcp : disable TCP connections enumeration! + -t --timeout : timeout in seconds. Default is 5; + -r --retries : request retries. Default is 1; + -i --info : show script version; + -h --help : show help menu;\n\n" + +def print_banner(script_name,script_version,script_description,script_copyright,script_author) + puts "#{script_name} #{script_version} - #{script_description}\n#{script_copyright} by #{script_author}\n\n" +end + +def print_things(msg='',prefix) + case prefix + when 'error' + puts "[!] #{msg}" + when 'info' + puts "[+] #{msg}" + when 'result' + puts "[*] #{msg}" + end +end + +def truncate_to_twidth(string,twidth) + string.slice(0..twidth-2) +end + +def number_to_human_size(size,unit) + size = size.first.to_i * unit.first.to_i + + if size < 1024 + "#{size} bytes" + elsif size < 1024.0 * 1024.0 + "%.02f KB" % (size / 1024.0) + elsif size < 1024.0 * 1024.0 * 1024.0 + "%.02f MB" % (size / 1024.0 / 1024.0) + else + "%.02f GB" % (size / 1024.0 / 1024.0 / 1024.0) + end +end + +target = nil +port = 161 +community = 'public' +version = '1' +check_write = nil +disable_tcp = nil +timeout = 5 +retries = 1 + +begin + + opts = GetoptLong.new( + [ '--port', '-p', GetoptLong::REQUIRED_ARGUMENT ], + [ '--community', '-c', GetoptLong::REQUIRED_ARGUMENT ], + [ '--version', '-v', GetoptLong::REQUIRED_ARGUMENT ], + [ '--write', '-w', GetoptLong::NO_ARGUMENT ], + [ '--disable_tcp', '-d', GetoptLong::NO_ARGUMENT ], + [ '--timeout', '-t', GetoptLong::REQUIRED_ARGUMENT ], + [ '--retries', '-r', GetoptLong::REQUIRED_ARGUMENT ], + [ '--info', '-i', GetoptLong::NO_ARGUMENT ], + [ '--help', '-h', GetoptLong::NO_ARGUMENT ] + ) + + opts.each do |opt, arg| + case opt + when '--port' + port = arg.to_i + when '--community' + community = arg.to_s + when '--version' + version = arg.to_s + when '--write' + check_write = 1 + when '--disable_tcp' + disable_tcp = 1 + when '--timeout' + timeout = arg.to_i + when '--retries' + retries = arg.to_i + when '--info' + print_banner(script_name,script_version,script_description,script_copyright,script_author) + exit 0 + when '--help' + print_banner(script_name,script_version,script_description,script_copyright,script_author) + puts script_usage + exit 0 + end + end + +rescue GetoptLong::InvalidOption, GetoptLong::MissingArgument, GetoptLong::NeedlessArgument + exit 1; +end + +if ARGV.length != 1 + print_things("You need specify a IP address target!","error") + exit 0 +end + +target = ARGV.shift + +if target !~ /^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$/ + print_things("Invalid IP address!","error") + exit 0 +end + +# is there a community length limit? +if community.length >= 25 + print_things("Invalid community length!","error") + exit 0 +end + +if port < 0 or port > 65535 + print_things("Invalid port!","error") + exit 0 +end + +if retries < 0 or retries > 10 + print_things("Invalid 'retries' value!","error") + exit 0 +end + +if version == '1' + version = :SNMPv1 +elsif version == '2c' + version = :SNMPv2c +else + print_things("SNMP version invalid! We'll use 1 version!","error") + version = :SNMPv1 +end + +fields_order = [ + "Host IP address","Hostname","Description","Contact","Location","Uptime snmp","Uptime system", + "System date","Domain","User accounts","Network information","Network interfaces", + "Network IP","Routing information","TCP connections and listening ports","Listening UDP ports", + "Network services","Processes","Storage information","File system information","Device information", + "Software components","IIS server information","Share","HP LaserJet printer enumeration" +] + +output_data = {} +output_data = {"Host IP address" => target} + +print_banner(script_name,script_version,script_description,script_copyright,script_author) +print_things("Try to connect to #{target}:#{port} using #{version} and community '#{community}'","info") +print_things("Write access check enabled\n","info") unless check_write.nil? +print_things("TCP connections enumeration disabled","info") unless disable_tcp.nil? +puts + +begin + + SNMP::Manager.open( + :Host => target, + :Port => port, + :Community => community, + :Version => version, + :Timeout => timeout, + :Retries => retries + ) do |manager| + + sysName = manager.get_value('1.3.6.1.2.1.1.5.0').to_s + output_data["Hostname"] = sysName.strip + + # check write access + if check_write and sysName + # 1.3.6.1.2.1.1.5.0 - sysName + varbind = VarBind.new("1.3.6.1.2.1.1.5.0",OctetString.new(sysName.strip)) + resp = manager.set(varbind) + + if resp.error_status == :noError + print_things("Write access permitted!\n\n","result") + else + print_things("Write access not permitted!\n","result") + end + end + + sysDesc = manager.get_value('1.3.6.1.2.1.1.1.0').to_s + sysDesc.gsub!(/^\s+|\s+$|\n+|\r+/, ' ') + output_data["Description"] = sysDesc.strip + + sysContact = manager.get_value('1.3.6.1.2.1.1.4.0').to_s + output_data["Contact"] = sysContact.strip + + sysLocation = manager.get_value('1.3.6.1.2.1.1.6.0').to_s + output_data["Location"] = sysLocation.strip + + sysUpTimeInstance = manager.get_value('1.3.6.1.2.1.1.3.0').to_s + output_data["Uptime system"] = sysUpTimeInstance.strip + + hrSystemUptime = manager.get_value('1.3.6.1.2.1.25.1.1.0').to_s + output_data["Uptime snmp"] = hrSystemUptime.strip + hrSystemUptime = '-' if hrSystemUptime.to_s =~ /Null/ + + year = month = day = hour = minutes = seconds = tenths = 0 + + systemDate = manager.get_value('1.3.6.1.2.1.25.1.2.0') + str = systemDate.to_s + if (str.empty? or str =~ /Null/ or str =~ /^noSuch/) + output_data["System date"] = '-' + else + # RFC 2579 - Textual Conventions for SMIv2 + # http://www.faqs.org/rfcs/rfc2579.html + + systemDate = systemDate.unpack('C*') + + year = systemDate[0] * 256 + systemDate[1] + month = systemDate[2] || 0 + day = systemDate[3] || 0 + hour = systemDate[4] || 0 + minutes = systemDate[5] || 0 + seconds = systemDate[6] || 0 + tenths = systemDate[7] || 0 + output_data["System date"] = sprintf("%d-%d-%d %02d:%02d:%02d.%d", year, month, day, hour, minutes, seconds, tenths) + end + + if (sysDesc =~ /Windows/) + + domPrimaryDomain = manager.get_value('1.3.6.1.4.1.77.1.4.1.0').to_s + output_data["Domain"] = domPrimaryDomain.strip + + users = [] + + manager.walk(["1.3.6.1.4.1.77.1.2.25.1.1","1.3.6.1.4.1.77.1.2.25.1"]) do |user,entry| + users.push([user.value]) + end + + if not users.empty? + output_data["User accounts"] = users + end + end + + network_information = {} + + ipForwarding = manager.get_value('1.3.6.1.2.1.4.1.0') + + if ipForwarding == 0 || ipForwarding == 2 + ipForwarding = "no" + network_information["IP forwarding enabled"] = ipForwarding + elsif ipForwarding == 1 + ipForwarding = "yes" + network_information["IP forwarding enabled"] = ipForwarding + end + + ipDefaultTTL = manager.get_value('1.3.6.1.2.1.4.2.0') + if ipDefaultTTL.to_s !~ /Null/ + network_information["Default TTL"] = ipDefaultTTL + end + + tcpInSegs = manager.get_value('1.3.6.1.2.1.6.10.0') + if tcpInSegs.to_s !~ /Null/ + network_information["TCP segments received"] = tcpInSegs + end + + tcpOutSegs = manager.get_value('1.3.6.1.2.1.6.11.0') + if tcpOutSegs.to_s !~ /Null/ + network_information["TCP segments sent"] = tcpOutSegs + end + + tcpRetransSegs = manager.get_value('1.3.6.1.2.1.6.12.0') + if tcpRetransSegs.to_s !~ /Null/ + network_information["TCP segments retrans"] = tcpRetransSegs + end + + ipInReceives = manager.get_value('1.3.6.1.2.1.4.3.0') + if ipInReceives.to_s !~ /Null/ + network_information["Input datagrams"] = ipInReceives + end + + ipInDelivers = manager.get_value('1.3.6.1.2.1.4.9.0') + if ipInDelivers.to_s !~ /Null/ + network_information["Delivered datagrams"] = ipInDelivers + end + + ipOutRequests = manager.get_value('1.3.6.1.2.1.4.10.0') + if ipOutRequests.to_s !~ /Null/ + network_information["Output datagrams"] = ipOutRequests + end + + if not network_information.empty? + output_data["Network information"] = network_information + end + + network_interfaces = [] + + manager.walk([ + "1.3.6.1.2.1.2.2.1.1","1.3.6.1.2.1.2.2.1.2","1.3.6.1.2.1.2.2.1.6", + "1.3.6.1.2.1.2.2.1.3","1.3.6.1.2.1.2.2.1.4","1.3.6.1.2.1.2.2.1.5", + "1.3.6.1.2.1.2.2.1.10","1.3.6.1.2.1.2.2.1.16","1.3.6.1.2.1.2.2.1.7" + ]) do |index,descr,mac,type,mtu,speed,inoc,outoc,status| + + ifindex = index.value + ifdescr = descr.value + ifmac = mac.value.unpack("H2H2H2H2H2H2").join(":") + iftype = type.value + ifmtu = mtu.value + ifspeed = speed.value.to_i + ifinoc = inoc.value + ifoutoc = outoc.value + ifstatus = status.value + + case iftype + when 1 + iftype = "other" + when 2 + iftype = "regular1822" + when 3 + iftype = "hdh1822" + when 4 + iftype = "ddn-x25" + when 5 + iftype = "rfc877-x25" + when 6 + iftype = "ethernet-csmacd" + when 7 + iftype = "iso88023-csmacd" + when 8 + iftype = "iso88024-tokenBus" + when 9 + iftype = "iso88025-tokenRing" + when 10 + iftype = "iso88026-man" + when 11 + iftype = "starLan" + when 12 + iftype = "proteon-10Mbit" + when 13 + iftype = "proteon-80Mbit" + when 14 + iftype = "hyperchannel" + when 15 + iftype = "fddi" + when 16 + iftype = "lapb" + when 17 + iftype = "sdlc" + when 18 + iftype = "ds1" + when 19 + iftype = "e1" + when 20 + iftype = "basicISDN" + when 21 + iftype = "primaryISDN" + when 22 + iftype = "propPointToPointSerial" + when 23 + iftype = "ppp" + when 24 + iftype = "softwareLoopback" + when 25 + iftype = "eon" + when 26 + iftype = "ethernet-3Mbit" + when 27 + iftype = "nsip" + when 28 + iftype = "slip" + when 29 + iftype = "ultra" + when 30 + iftype = "ds3" + when 31 + iftype = "sip" + when 32 + iftype = "frame-relay" + else + iftype = "unknown" + end + + case ifstatus + when 1 + ifstatus = "up" + when 2 + ifstatus = "down" + when 3 + ifstatus = "testing" + else + ifstatus = "unknown" + end + + ifspeed = ifspeed / 1000000 + + network_interfaces.push({ + "Interface" => "[ #{ifstatus} ] #{ifdescr}", + "Id" => ifindex, + "Mac Address" => ifmac, + "Type" => iftype, + "Speed" => "#{ifspeed} Mbps", + "MTU" => ifmtu, + "In octets" => ifinoc, + "Out octets" => ifoutoc + }) + end + + if not network_interfaces.empty? + output_data["Network interfaces"] = network_interfaces + end + + network_ip = [] + + manager.walk([ + "1.3.6.1.2.1.4.20.1.2","1.3.6.1.2.1.4.20.1.1", + "1.3.6.1.2.1.4.20.1.3","1.3.6.1.2.1.4.20.1.4" + ]) do |ifid,ipaddr,netmask,bcast| + network_ip.push([ifid.value, ipaddr.value, netmask.value, bcast.value]) + end + + if not network_ip.empty? + output_data["Network IP"] = [["Id","IP Address","Netmask","Broadcast"]] + network_ip + end + + routing = [] + + manager.walk([ + "1.3.6.1.2.1.4.21.1.1","1.3.6.1.2.1.4.21.1.7", + "1.3.6.1.2.1.4.21.1.11","1.3.6.1.2.1.4.21.1.3" + ]) do |dest,hop,mask,metric| + if (metric.value.to_s.empty?) + metric.value = '-' + end + routing.push([dest.value, hop.value, mask.value, metric.value]) + end + + if not routing.empty? + output_data["Routing information"] = [["Destination","Next hop","Mask","Metric"]] + routing + end + + if disable_tcp.nil? + + tcp = [] + + manager.walk([ + "1.3.6.1.2.1.6.13.1.2","1.3.6.1.2.1.6.13.1.3","1.3.6.1.2.1.6.13.1.4", + "1.3.6.1.2.1.6.13.1.5","1.3.6.1.2.1.6.13.1.1" + ]) do |ladd,lport,radd,rport,state| + + if (ladd.value.to_s.empty? or ladd.value.to_s =~ /noSuchInstance/) + ladd = "-" + else + ladd = ladd.value + end + + if (lport.value.to_s.empty? or lport.value.to_s =~ /noSuchInstance/) + lport = "-" + else + lport = lport.value + end + + if (radd.value.to_s.empty? or radd.value.to_s =~ /noSuchInstance/) + radd = "-" + else + radd = radd.value + end + + if (rport.value.to_s.empty? or rport.value.to_s =~ /noSuchInstance/) + rport = "-" + else + rport = rport.value + end + + case state.value + when 1 + state = "closed" + when 2 + state = "listen" + when 3 + state = "synSent" + when 4 + state = "synReceived" + when 5 + state = "established" + when 6 + state = "finWait1" + when 7 + state = "finWait2" + when 8 + state = "closeWait" + when 9 + state = "lastAck" + when 10 + state = "closing" + when 11 + state = "timeWait" + when 12 + state = "deleteTCB" + else + state = "unknown" + end + + tcp.push([ladd, lport, radd, rport, state]) + end + + if not tcp.empty? + output_data["TCP connections and listening ports"] = [["Local address","Local port","Remote address","Remote port","State"]] + tcp + end + end + + udp = [] + + manager.walk(["1.3.6.1.2.1.7.5.1.1","1.3.6.1.2.1.7.5.1.2"]) do |ladd,lport| + udp.push([ladd.value, lport.value]) + end + + if not udp.empty? + output_data["Listening UDP ports"] = [["Local address","Local port"]] + udp + end + + if (sysDesc =~ /Windows/) + + network_services = [] + + n = 0 + + manager.walk(["1.3.6.1.4.1.77.1.2.3.1.1","1.3.6.1.4.1.77.1.2.3.1.2"]) do |name,installed| + network_services.push([n,name.value]) + n+=1 + end + + if not network_services.empty? + output_data["Network services"] = [["Index","Name"]] + network_services + end + + share = [] + + manager.walk([ + "1.3.6.1.4.1.77.1.2.27.1.1","1.3.6.1.4.1.77.1.2.27.1.2","1.3.6.1.4.1.77.1.2.27.1.3" + ]) do |name,path,comment| + share.push({" Name"=>name.value, " Path"=>path.value, " Comment"=>comment.value}) + end + + if not share.empty? + output_data["Share"] = share + end + + iis = {} + + http_totalBytesSentLowWord = manager.get_value('1.3.6.1.4.1.311.1.7.3.1.2.0') + if http_totalBytesSentLowWord.to_s !~ /Null/ + iis["TotalBytesSentLowWord"] = http_totalBytesSentLowWord + end + + http_totalBytesReceivedLowWord = manager.get_value('1.3.6.1.4.1.311.1.7.3.1.4.0') + if http_totalBytesReceivedLowWord.to_s !~ /Null/ + iis["TotalBytesReceivedLowWord"] = http_totalBytesReceivedLowWord + end + + http_totalFilesSent = manager.get_value('1.3.6.1.4.1.311.1.7.3.1.5.0') + if http_totalFilesSent.to_s !~ /Null/ + iis["TotalFilesSent"] = http_totalFilesSent + end + + http_currentAnonymousUsers = manager.get_value('1.3.6.1.4.1.311.1.7.3.1.6.0') + if http_currentAnonymousUsers.to_s !~ /Null/ + iis["CurrentAnonymousUsers"] = http_currentAnonymousUsers + end + + http_currentNonAnonymousUsers = manager.get_value('1.3.6.1.4.1.311.1.7.3.1.7.0') + if http_currentNonAnonymousUsers.to_s !~ /Null/ + iis["CurrentNonAnonymousUsers"] = http_currentNonAnonymousUsers + end + + http_totalAnonymousUsers = manager.get_value('1.3.6.1.4.1.311.1.7.3.1.8.0') + if http_totalAnonymousUsers.to_s !~ /Null/ + iis["TotalAnonymousUsers"] = http_totalAnonymousUsers + end + + http_totalNonAnonymousUsers = manager.get_value('1.3.6.1.4.1.311.1.7.3.1.9.0') + if http_totalNonAnonymousUsers.to_s !~ /Null/ + iis["TotalNonAnonymousUsers"] = http_totalNonAnonymousUsers + end + + http_maxAnonymousUsers = manager.get_value('1.3.6.1.4.1.311.1.7.3.1.10.0') + if http_maxAnonymousUsers.to_s !~ /Null/ + iis["MaxAnonymousUsers"] = http_maxAnonymousUsers + end + + http_maxNonAnonymousUsers = manager.get_value('1.3.6.1.4.1.311.1.7.3.1.11.0') + if http_maxNonAnonymousUsers.to_s !~ /Null/ + iis["MaxNonAnonymousUsers"] = http_maxNonAnonymousUsers + end + + http_currentConnections = manager.get_value('1.3.6.1.4.1.311.1.7.3.1.12.0') + if http_currentConnections.to_s !~ /Null/ + iis["CurrentConnections"] = http_currentConnections + end + + http_maxConnections = manager.get_value('1.3.6.1.4.1.311.1.7.3.1.13.0') + if http_maxConnections.to_s !~ /Null/ + iis["MaxConnections"] = http_maxConnections + end + + http_connectionAttempts = manager.get_value('1.3.6.1.4.1.311.1.7.3.1.14.0') + if http_connectionAttempts.to_s !~ /Null/ + iis["ConnectionAttempts"] = http_connectionAttempts + end + + http_logonAttempts = manager.get_value('1.3.6.1.4.1.311.1.7.3.1.15.0') + if http_logonAttempts.to_s !~ /Null/ + iis["LogonAttempts"] = http_logonAttempts + end + + http_totalGets = manager.get_value('1.3.6.1.4.1.311.1.7.3.1.16.0') + if http_totalGets.to_s !~ /Null/ + iis["Gets"] = http_totalGets + end + + http_totalPosts = manager.get_value('1.3.6.1.4.1.311.1.7.3.1.17.0') + if http_totalPosts.to_s !~ /Null/ + iis["Posts"] = http_totalPosts + end + + http_totalHeads = manager.get_value('1.3.6.1.4.1.311.1.7.3.1.18.0') + if http_totalHeads.to_s !~ /Null/ + iis["Heads"] = http_totalHeads + end + + http_totalOthers = manager.get_value('1.3.6.1.4.1.311.1.7.3.1.19.0') + if http_totalOthers.to_s !~ /Null/ + iis["Others"] = http_totalOthers + end + + http_totalCGIRequests = manager.get_value('1.3.6.1.4.1.311.1.7.3.1.20.0') + if http_totalCGIRequests.to_s !~ /Null/ + iis["CGIRequests"] = http_totalCGIRequests + end + + http_totalBGIRequests = manager.get_value('1.3.6.1.4.1.311.1.7.3.1.21.0') + if http_totalBGIRequests.to_s !~ /Null/ + iis["BGIRequests"] = http_totalBGIRequests + end + + http_totalNotFoundErrors = manager.get_value('1.3.6.1.4.1.311.1.7.3.1.22.0') + if http_totalNotFoundErrors.to_s !~ /Null/ + iis["NotFoundErrors"] = http_totalNotFoundErrors + end + + if not iis.empty? + output_data["IIS server information"] = iis + end + end + + storage_information = [] + + manager.walk([ + "1.3.6.1.2.1.25.2.3.1.1","1.3.6.1.2.1.25.2.3.1.2","1.3.6.1.2.1.25.2.3.1.3", + "1.3.6.1.2.1.25.2.3.1.4","1.3.6.1.2.1.25.2.3.1.5","1.3.6.1.2.1.25.2.3.1.6" + ]) do |index,type,descr,allocation,size,used| + + case type.value.to_s + when /^1.3.6.1.2.1.25.2.1.1$/ + type.value = "Other" + when /^1.3.6.1.2.1.25.2.1.2$/ + type.value = "Ram" + when /^1.3.6.1.2.1.25.2.1.3$/ + type.value = "Virtual Memory" + when /^1.3.6.1.2.1.25.2.1.4$/ + type.value = "Fixed Disk" + when /^1.3.6.1.2.1.25.2.1.5$/ + type.value = "Removable Disk" + when /^1.3.6.1.2.1.25.2.1.6$/ + type.value = "Floppy Disk" + when /^1.3.6.1.2.1.25.2.1.7$/ + type.value = "Compact Disc" + when /^1.3.6.1.2.1.25.2.1.8$/ + type.value = "RamDisk" + when /^1.3.6.1.2.1.25.2.1.9$/ + type.value = "Flash Memory" + when /^1.3.6.1.2.1.25.2.1.10$/ + type.value = "Network Disk" + else + type.value = "unknown" + end + + allocation.value = "unknown" if allocation.value.to_s =~ /noSuchInstance/ + size.value = "unknown" if size.value.to_s =~ /noSuchInstance/ + used.value = "unknown" if used.value.to_s =~ /noSuchInstance/ + + storage_information.push([[descr.value],[index.value],[type.value],[allocation.value],[size.value],[used.value]]) + end + + if not storage_information.empty? + storage = [] + storage_information.each {|a,b,c,d,e,f| + s = {} + + e = number_to_human_size(e,d) + f = number_to_human_size(f,d) + + s["Description"]= a + s["Device id"] = b + s["Filesystem type"] = c + s["Device unit"] = d + s["Memory size"] = e + s["Memory used"] = f + + storage.push(s) + } + output_data["Storage information"] = storage + end + + file_system = {} + + hrFSIndex = manager.get_value('1.3.6.1.2.1.25.3.8.1.1.1') + if hrFSIndex.to_s !~ /Null/ + file_system["Index"] = hrFSIndex + end + + hrFSMountPoint = manager.get_value('1.3.6.1.2.1.25.3.8.1.2.1') + if hrFSMountPoint.to_s !~ /Null/ + file_system["Mount point"] = hrFSMountPoint + end + + hrFSRemoteMountPoint = manager.get_value('1.3.6.1.2.1.25.3.8.1.3.1') + if hrFSRemoteMountPoint.to_s !~ /Null/ and hrFSRemoteMountPoint.to_s !~ /^noSuch/ + if hrFSRemoteMountPoint.empty? + hrFSRemoteMountPoint = '-' + end + file_system["Remote mount point"] = hrFSRemoteMountPoint + end + + hrFSType = manager.get_value('1.3.6.1.2.1.25.3.8.1.4.1') + + case hrFSType.to_s + when /^1.3.6.1.2.1.25.3.9.1$/ + hrFSType = "Other" + when /^1.3.6.1.2.1.25.3.9.2$/ + hrFSType = "Unknown" + when /^1.3.6.1.2.1.25.3.9.3$/ + hrFSType = "BerkeleyFFS" + when /^1.3.6.1.2.1.25.3.9.4$/ + hrFSType = "Sys5FS" + when /^1.3.6.1.2.1.25.3.9.5$/ + hrFSType = "Fat" + when /^1.3.6.1.2.1.25.3.9.6$/ + hrFSType = "HPFS" + when /^1.3.6.1.2.1.25.3.9.7$/ + hrFSType = "HFS" + when /^1.3.6.1.2.1.25.3.9.8$/ + hrFSType = "MFS" + when /^1.3.6.1.2.1.25.3.9.9$/ + hrFSType = "NTFS" + when /^1.3.6.1.2.1.25.3.9.10$/ + hrFSType = "VNode" + when /^1.3.6.1.2.1.25.3.9.11$/ + hrFSType = "Journaled" + when /^1.3.6.1.2.1.25.3.9.12$/ + hrFSType = "iso9660" + when /^1.3.6.1.2.1.25.3.9.13$/ + hrFSType = "RockRidge" + when /^1.3.6.1.2.1.25.3.9.14$/ + hrFSType = "NFS" + when /^1.3.6.1.2.1.25.3.9.15$/ + hrFSType = "Netware" + when /^1.3.6.1.2.1.25.3.9.16$/ + hrFSType = "AFS" + when /^1.3.6.1.2.1.25.3.9.17$/ + hrFSType = "DFS" + when /^1.3.6.1.2.1.25.3.9.18$/ + hrFSType = "Appleshare" + when /^1.3.6.1.2.1.25.3.9.19$/ + hrFSType = "RFS" + when /^1.3.6.1.2.1.25.3.9.20$/ + hrFSType = "DGCFS" + when /^1.3.6.1.2.1.25.3.9.21$/ + hrFSType = "BFS" + when /^1.3.6.1.2.1.25.3.9.22$/ + hrFSType = "FAT32" + when /^1.3.6.1.2.1.25.3.9.23$/ + hrFSType = "LinuxExt2" + else + hrFSType = "Null" + end + + if hrFSType.to_s !~ /Null/ + file_system["Type"] = hrFSType + end + + hrFSAccess = manager.get_value('1.3.6.1.2.1.25.3.8.1.5.1') + if hrFSAccess.to_s !~ /Null/ + file_system["Access"] = hrFSAccess + end + + hrFSBootable = manager.get_value('1.3.6.1.2.1.25.3.8.1.6.1') + if hrFSBootable.to_s !~ /Null/ + file_system["Bootable"] = hrFSBootable + end + + if not file_system.empty? + output_data["File system information"] = file_system + end + + device_information = [] + + manager.walk([ + "1.3.6.1.2.1.25.3.2.1.1","1.3.6.1.2.1.25.3.2.1.2", + "1.3.6.1.2.1.25.3.2.1.5","1.3.6.1.2.1.25.3.2.1.3" + ]) do |index,type,status,descr| + + case type.value.to_s + when /^1.3.6.1.2.1.25.3.1.1$/ + type.value = "Other" + when /^1.3.6.1.2.1.25.3.1.2$/ + type.value = "Unknown" + when /^1.3.6.1.2.1.25.3.1.3$/ + type.value = "Processor" + when /^1.3.6.1.2.1.25.3.1.4$/ + type.value = "Network" + when /^1.3.6.1.2.1.25.3.1.5$/ + type.value = "Printer" + when /^1.3.6.1.2.1.25.3.1.6$/ + type.value = "Disk Storage" + when /^1.3.6.1.2.1.25.3.1.10$/ + type.value = "Video" + when /^1.3.6.1.2.1.25.3.1.11$/ + type.value = "Audio" + when /^1.3.6.1.2.1.25.3.1.12$/ + type.value = "Coprocessor" + when /^1.3.6.1.2.1.25.3.1.13$/ + type.value = "Keyboard" + when /^1.3.6.1.2.1.25.3.1.14$/ + type.value = "Modem" + when /^1.3.6.1.2.1.25.3.1.15$/ + type.value = "Parallel Port" + when /^1.3.6.1.2.1.25.3.1.16$/ + type.value = "Pointing" + when /^1.3.6.1.2.1.25.3.1.17$/ + type.value = "Serial Port" + when /^1.3.6.1.2.1.25.3.1.18$/ + type.value = "Tape" + when /^1.3.6.1.2.1.25.3.1.19$/ + type.value = "Clock" + when /^1.3.6.1.2.1.25.3.1.20$/ + type.value = "Volatile Memory" + when /^1.3.6.1.2.1.25.3.1.21$/ + type.value = "Non Volatile Memory" + else + type.value = "unknown" + end + + case status.value + when 1 + status.value = "unknown" + when 2 + status.value = "running" + when 3 + status.value = "warning" + when 4 + status.value = "testing" + when 5 + status.value = "down" + else + status.value = "unknown" + end + + descr.value = "unknown" if descr.value.to_s =~ /noSuchInstance/ + + device_information.push([index.value, type.value, status.value, descr.value]) + end + + if not device_information.empty? + output_data["Device information"] = [["Id","Type","Status","Descr"]] + device_information + end + + software_list = [] + + manager.walk(["1.3.6.1.2.1.25.6.3.1.1","1.3.6.1.2.1.25.6.3.1.2"]) do |index,name| + software_list.push([index.value,name.value]) + end + + if not software_list.empty? + output_data["Software components"] = [["Index","Name"]] + software_list + end + + process_interfaces = [] + + manager.walk([ + "1.3.6.1.2.1.25.4.2.1.1","1.3.6.1.2.1.25.4.2.1.2","1.3.6.1.2.1.25.4.2.1.4", + "1.3.6.1.2.1.25.4.2.1.5","1.3.6.1.2.1.25.4.2.1.7" + ]) do |id,name,path,param,status| + + if status.value == 1 + status.value = "running" + elsif status.value == 2 + status.value = "runnable" + else + status.value = "unknown" + end + + process_interfaces.push([id.value, status.value, name.value, path.value, param.value]) + end + + if not process_interfaces.empty? + output_data["Processes"] = [["Id","Status","Name","Path","Parameters"]] + process_interfaces + end + + hp_laserjet_printer_enumeration = [] + + manager.walk([ + "1.3.6.1.4.1.11.2.3.9.4.2.1.1.6.5.1", # job-info-name1 - document name1 + "1.3.6.1.4.1.11.2.3.9.4.2.1.1.6.5.2", # job-info-name2 - document name2 + "1.3.6.1.4.1.11.2.3.9.4.2.1.1.6.5.23.1", # job-info-attr-1 - username + "1.3.6.1.4.1.11.2.3.9.4.2.1.1.6.5.23.2", # job-info-attr-2 - machine name + "1.3.6.1.4.1.11.2.3.9.4.2.1.1.6.5.23.3", # job-info-attr-3 - domain (?) + "1.3.6.1.4.1.11.2.3.9.4.2.1.1.6.5.23.4", # job-info-attr-4 - timestamp + "1.3.6.1.4.1.11.2.3.9.4.2.1.1.6.5.23.6", # job-info-attr-6 - application name + "1.3.6.1.4.1.11.2.3.9.4.2.1.1.6.5.23.7", # job-info-attr-7 - application command + ]) do |name1,name2,username,client,domain,timestamp,app_name,app_command| + + filename = name1.value.to_s + name2.value.to_s + + if (username.value.to_s !~ /noSuchInstance/) + if username.value.to_s =~ /^JobAcct(\d+)=(.*)/ + username = $2 + else + username = '-' + end + else + username = '-' + end + + if (client.value.to_s !~ /noSuchInstance/) + if client.value.to_s =~ /^JobAcct(\d+)=(.*)/ + client = $2 + else + client = '-' + end + else + client = '-' + end + + if (domain.value.to_s !~ /noSuchInstance/) + if domain.value.to_s =~ /^JobAcct(\d+)=(.*)/ + domain = $2 + domain = '-' if domain.empty? + else + domain = '-' + end + else + domain = '-' + end + + if timestamp.value.to_s !~ /noSuchInstance/ + if timestamp.value.to_s =~ /^JobAcct(\d+)=(.*)/ + timestamp = $2 + else + timestamp = '-' + end + else + timestamp = nil + end + + if (app_name.value.to_s !~ /noSuchInstance/) + if app_name.value.to_s =~ /^JobAcct(\d+)=(.*)/ + app_name = $2 + end + else + app_name = '-' + end + + if (app_command.value.to_s !~ /noSuchInstance/) + if app_command.value.to_s =~ /^JobAcct(\d+)=(.*)/ + app_command = $2 + end + else + app_command = '-' + end + + if not timestamp.nil? + hp_laserjet_printer_enumeration.push({ + "Filename" => filename + "#{filename.length}", + "Username" => username, + "Client" => client, + "Timestamp" => timestamp, + "Domain" => domain, + "Application name" => app_name, + "Application command" => app_command + }) + end + end + + if not hp_laserjet_printer_enumeration.empty? + output_data["HP LaserJet printer enumeration"] = hp_laserjet_printer_enumeration + end + + print_things("System information:","result") + puts + + line = "" + width = 30 # name field width + twidth = 32 # table like display cell width + + fields_order.each {|k| + if not output_data.has_key?(k) + next + end + + v = output_data[k] + + case v + when Array + content = "" + + v.each{ |a| + case a + when Hash + a.each{ |sk, sv| + sk = truncate_to_twidth(sk, twidth) + content << sprintf(" %s%s: %s\n", sk, " "*([0,width-sk.length].max), sv) + } + content << "\n" + when Array + a.each { |sv| + sv = sv.to_s.strip + content << sprintf(" %-20s", sv) + } + content << "\n" + else + content << sprintf(" %s\n", a) + content << "\n" + end + } + + line << "\n[*] #{k}:\n\n#{content}" + + when Hash + content = "" + v.each{ |sk, sv| + sk = truncate_to_twidth(sk,twidth) + content << sprintf(" %s%s: %s\n", sk, " "*([0,width-sk.length].max), sv) + } + + line << "\n[*] #{k}:\n\n#{content}" + content << "\n" + else + if (v.nil? or v.empty? or v =~ /Null/) + v = '-' + end + + k = truncate_to_twidth(k,twidth) + line << sprintf(" %s%s: %s\n", k, " "*([0,width-k.length].max), v) + end + } + + puts(line) + + end + + puts + + rescue SNMP::RequestTimeout + print_things("#{target}:#{port} SNMP request timeout","error") + rescue SNMP::ConnectionError + print_things("#{target}:#{port} Connection refused","error") + rescue SNMP::InvalidIpAddress + print_things("#{target}:#{port} Invalid IP Address. Check it with 'snmpwalk tool'","error") + rescue SNMP::UnsupportedVersion + print_things("#{target}:#{port} Unsupported SNMP version specified. Select from '1' or '2c'","error") + rescue ::Interrupt + raise $! + rescue ::Exception => e + print_things("Unknown error: #{e.class} #{e}","error") + print_things("Call stack:\n#{e.backtrace.join "\n"}","error") +end diff --git a/snmpcheck.spec b/snmpcheck.spec index d5a1209..ea75930 100644 --- a/snmpcheck.spec +++ b/snmpcheck.spec @@ -1,19 +1,20 @@ Name: snmpcheck -Version: 1.8 -Release: 14%{?dist} +Version: 1.9 +Release: 1%{?dist} Summary: An utility to get information via SNMP protocols Group: Applications/Internet License: GPLv3+ URL: http://www.nothink.org/perl/snmpcheck/ -Source0: http://www.nothink.org/perl/snmpcheck/downloads/%{name}-%{version}.pl +Source0: http://www.nothink.org/perl/snmpcheck/downloads/%{name}-%{version}.rb #Manual page Source1: snmpcheck.1 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildArch: noarch -Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version)) - +Requires: ruby(release) +Requires: rubygem(snmp) +BuildRequires: %description snmpcheck supports the following enumerations: @@ -67,6 +68,9 @@ rm -rf %{buildroot} %changelog +* Fri Apr 29 2016 Michal Ambroz - 1.9-1 +- bump to version 1.9 + * Fri Feb 05 2016 Fedora Release Engineering - 1.8-14 - Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild From b4a9daa4565fadde8025ae303f016ca63607d626 Mon Sep 17 00:00:00 2001 From: Michal Ambroz Date: Sat, 30 Apr 2016 02:39:27 +0200 Subject: [PATCH 05/30] typo --- snmpcheck.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/snmpcheck.spec b/snmpcheck.spec index ea75930..0ad54ef 100644 --- a/snmpcheck.spec +++ b/snmpcheck.spec @@ -14,7 +14,7 @@ BuildArch: noarch Requires: ruby(release) Requires: rubygem(snmp) -BuildRequires: + %description snmpcheck supports the following enumerations: From 990f4ed1a62c3b8b11475bc12e1a7bfed38c4929 Mon Sep 17 00:00:00 2001 From: Jitka Plesnikova Date: Sun, 15 May 2016 08:12:05 +0200 Subject: [PATCH 06/30] Perl 5.24 rebuild --- snmpcheck.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/snmpcheck.spec b/snmpcheck.spec index 0ad54ef..0bf47d9 100644 --- a/snmpcheck.spec +++ b/snmpcheck.spec @@ -1,6 +1,6 @@ Name: snmpcheck Version: 1.9 -Release: 1%{?dist} +Release: 2%{?dist} Summary: An utility to get information via SNMP protocols Group: Applications/Internet @@ -68,6 +68,9 @@ rm -rf %{buildroot} %changelog +* Sun May 15 2016 Jitka Plesnikova - 1.9-2 +- Perl 5.24 rebuild + * Fri Apr 29 2016 Michal Ambroz - 1.9-1 - bump to version 1.9 From 2734fe07c827da46259acdb0d36a973424d42f02 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 11 Feb 2017 13:39:40 +0000 Subject: [PATCH 07/30] - Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild --- snmpcheck.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/snmpcheck.spec b/snmpcheck.spec index 0bf47d9..b01e687 100644 --- a/snmpcheck.spec +++ b/snmpcheck.spec @@ -1,6 +1,6 @@ Name: snmpcheck Version: 1.9 -Release: 2%{?dist} +Release: 3%{?dist} Summary: An utility to get information via SNMP protocols Group: Applications/Internet @@ -68,6 +68,9 @@ rm -rf %{buildroot} %changelog +* Sat Feb 11 2017 Fedora Release Engineering - 1.9-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + * Sun May 15 2016 Jitka Plesnikova - 1.9-2 - Perl 5.24 rebuild From 9317ee829105dcc232265f17040f3427be7e7600 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 27 Jul 2017 18:52:26 +0000 Subject: [PATCH 08/30] - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild --- snmpcheck.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/snmpcheck.spec b/snmpcheck.spec index b01e687..7d83760 100644 --- a/snmpcheck.spec +++ b/snmpcheck.spec @@ -1,6 +1,6 @@ Name: snmpcheck Version: 1.9 -Release: 3%{?dist} +Release: 4%{?dist} Summary: An utility to get information via SNMP protocols Group: Applications/Internet @@ -68,6 +68,9 @@ rm -rf %{buildroot} %changelog +* Thu Jul 27 2017 Fedora Release Engineering - 1.9-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + * Sat Feb 11 2017 Fedora Release Engineering - 1.9-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild From a1a9109f7b654842d8a52102a3177ae100cf6d90 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 9 Feb 2018 17:07:38 +0000 Subject: [PATCH 09/30] - Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- snmpcheck.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/snmpcheck.spec b/snmpcheck.spec index 7d83760..73edb63 100644 --- a/snmpcheck.spec +++ b/snmpcheck.spec @@ -1,6 +1,6 @@ Name: snmpcheck Version: 1.9 -Release: 4%{?dist} +Release: 5%{?dist} Summary: An utility to get information via SNMP protocols Group: Applications/Internet @@ -68,6 +68,9 @@ rm -rf %{buildroot} %changelog +* Fri Feb 09 2018 Fedora Release Engineering - 1.9-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + * Thu Jul 27 2017 Fedora Release Engineering - 1.9-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild From c757588f1305fe4e325e84d831fcbcd3badcfba2 Mon Sep 17 00:00:00 2001 From: Igor Gnatenko Date: Wed, 14 Feb 2018 00:38:32 +0100 Subject: [PATCH 10/30] Remove BuildRoot definition None of currently supported distributions need that. It was needed last for EL5 which is EOL now Signed-off-by: Igor Gnatenko --- snmpcheck.spec | 1 - 1 file changed, 1 deletion(-) diff --git a/snmpcheck.spec b/snmpcheck.spec index 73edb63..c103e4d 100644 --- a/snmpcheck.spec +++ b/snmpcheck.spec @@ -9,7 +9,6 @@ URL: http://www.nothink.org/perl/snmpcheck/ Source0: http://www.nothink.org/perl/snmpcheck/downloads/%{name}-%{version}.rb #Manual page Source1: snmpcheck.1 -BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildArch: noarch Requires: ruby(release) From ea3196a9099785227cd6f340dd7141740ed2c8f7 Mon Sep 17 00:00:00 2001 From: Igor Gnatenko Date: Wed, 14 Feb 2018 07:39:56 +0100 Subject: [PATCH 11/30] Remove %clean section None of currently supported distributions need that. Last one was EL5 which is EOL for a while. Signed-off-by: Igor Gnatenko --- snmpcheck.spec | 3 --- 1 file changed, 3 deletions(-) diff --git a/snmpcheck.spec b/snmpcheck.spec index c103e4d..27752ab 100644 --- a/snmpcheck.spec +++ b/snmpcheck.spec @@ -56,9 +56,6 @@ install -d %{buildroot}%{_mandir}/man1 install -p -m 0644 %{SOURCE1} %{buildroot}%{_mandir}/man1/%{name}.1 -%clean -rm -rf %{buildroot} - %files %defattr(-,root,root,-) From c963ab11bb2e37a915e5d3df2acb3f5afebac086 Mon Sep 17 00:00:00 2001 From: Jason Tibbitts Date: Tue, 10 Jul 2018 01:23:49 -0500 Subject: [PATCH 12/30] Remove needless use of %defattr --- snmpcheck.spec | 1 - 1 file changed, 1 deletion(-) diff --git a/snmpcheck.spec b/snmpcheck.spec index 27752ab..32f646f 100644 --- a/snmpcheck.spec +++ b/snmpcheck.spec @@ -58,7 +58,6 @@ install -p -m 0644 %{SOURCE1} %{buildroot}%{_mandir}/man1/%{name}.1 %files -%defattr(-,root,root,-) %{_bindir}/%{name} %{_mandir}/man1/%{name}.1.* From 034f286fa643e2ca987e927170c364d64590990c Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 14 Jul 2018 06:22:04 +0000 Subject: [PATCH 13/30] - Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- snmpcheck.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/snmpcheck.spec b/snmpcheck.spec index 32f646f..a9b02d1 100644 --- a/snmpcheck.spec +++ b/snmpcheck.spec @@ -1,6 +1,6 @@ Name: snmpcheck Version: 1.9 -Release: 5%{?dist} +Release: 6%{?dist} Summary: An utility to get information via SNMP protocols Group: Applications/Internet @@ -63,6 +63,9 @@ install -p -m 0644 %{SOURCE1} %{buildroot}%{_mandir}/man1/%{name}.1 %changelog +* Sat Jul 14 2018 Fedora Release Engineering - 1.9-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + * Fri Feb 09 2018 Fedora Release Engineering - 1.9-5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild From 95912c13b46e7e4434a4c41653b6a19f1cf34d21 Mon Sep 17 00:00:00 2001 From: Igor Gnatenko Date: Mon, 28 Jan 2019 20:18:26 +0100 Subject: [PATCH 14/30] Remove obsolete Group tag References: https://fedoraproject.org/wiki/Changes/Remove_Group_Tag --- snmpcheck.spec | 1 - 1 file changed, 1 deletion(-) diff --git a/snmpcheck.spec b/snmpcheck.spec index a9b02d1..2e19814 100644 --- a/snmpcheck.spec +++ b/snmpcheck.spec @@ -3,7 +3,6 @@ Version: 1.9 Release: 6%{?dist} Summary: An utility to get information via SNMP protocols -Group: Applications/Internet License: GPLv3+ URL: http://www.nothink.org/perl/snmpcheck/ Source0: http://www.nothink.org/perl/snmpcheck/downloads/%{name}-%{version}.rb From 47f6fd9e7b47392c88572eade198de48e92bd2b0 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sun, 3 Feb 2019 08:05:24 +0000 Subject: [PATCH 15/30] - Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- snmpcheck.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/snmpcheck.spec b/snmpcheck.spec index 2e19814..935755f 100644 --- a/snmpcheck.spec +++ b/snmpcheck.spec @@ -1,6 +1,6 @@ Name: snmpcheck Version: 1.9 -Release: 6%{?dist} +Release: 7%{?dist} Summary: An utility to get information via SNMP protocols License: GPLv3+ @@ -62,6 +62,9 @@ install -p -m 0644 %{SOURCE1} %{buildroot}%{_mandir}/man1/%{name}.1 %changelog +* Sun Feb 03 2019 Fedora Release Engineering - 1.9-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + * Sat Jul 14 2018 Fedora Release Engineering - 1.9-6 - Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild From fec1bc3ab6ffc6996117e3f52a4a821bd1d79e11 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 26 Jul 2019 23:39:53 +0000 Subject: [PATCH 16/30] - Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- snmpcheck.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/snmpcheck.spec b/snmpcheck.spec index 935755f..c45c087 100644 --- a/snmpcheck.spec +++ b/snmpcheck.spec @@ -1,6 +1,6 @@ Name: snmpcheck Version: 1.9 -Release: 7%{?dist} +Release: 8%{?dist} Summary: An utility to get information via SNMP protocols License: GPLv3+ @@ -62,6 +62,9 @@ install -p -m 0644 %{SOURCE1} %{buildroot}%{_mandir}/man1/%{name}.1 %changelog +* Fri Jul 26 2019 Fedora Release Engineering - 1.9-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + * Sun Feb 03 2019 Fedora Release Engineering - 1.9-7 - Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild From e40974cfd0eca88cd0fdd66b8ad826ef9f2a8b89 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 30 Jan 2020 23:49:44 +0000 Subject: [PATCH 17/30] - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- snmpcheck.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/snmpcheck.spec b/snmpcheck.spec index c45c087..96ff2d7 100644 --- a/snmpcheck.spec +++ b/snmpcheck.spec @@ -1,6 +1,6 @@ Name: snmpcheck Version: 1.9 -Release: 8%{?dist} +Release: 9%{?dist} Summary: An utility to get information via SNMP protocols License: GPLv3+ @@ -62,6 +62,9 @@ install -p -m 0644 %{SOURCE1} %{buildroot}%{_mandir}/man1/%{name}.1 %changelog +* Thu Jan 30 2020 Fedora Release Engineering - 1.9-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + * Fri Jul 26 2019 Fedora Release Engineering - 1.9-8 - Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild From 77f0eedd6ac6259bee5625a585ddbee586fa3a5f Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 29 Jul 2020 11:04:45 +0000 Subject: [PATCH 18/30] - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- snmpcheck.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/snmpcheck.spec b/snmpcheck.spec index 96ff2d7..a26e4b6 100644 --- a/snmpcheck.spec +++ b/snmpcheck.spec @@ -1,6 +1,6 @@ Name: snmpcheck Version: 1.9 -Release: 9%{?dist} +Release: 10%{?dist} Summary: An utility to get information via SNMP protocols License: GPLv3+ @@ -62,6 +62,9 @@ install -p -m 0644 %{SOURCE1} %{buildroot}%{_mandir}/man1/%{name}.1 %changelog +* Wed Jul 29 2020 Fedora Release Engineering - 1.9-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + * Thu Jan 30 2020 Fedora Release Engineering - 1.9-9 - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild From e120efcd00b06ab7e4866ffe4062e4880dd509fc Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 27 Jan 2021 20:41:28 +0000 Subject: [PATCH 19/30] - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- snmpcheck.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/snmpcheck.spec b/snmpcheck.spec index a26e4b6..3ad14ac 100644 --- a/snmpcheck.spec +++ b/snmpcheck.spec @@ -1,6 +1,6 @@ Name: snmpcheck Version: 1.9 -Release: 10%{?dist} +Release: 11%{?dist} Summary: An utility to get information via SNMP protocols License: GPLv3+ @@ -62,6 +62,9 @@ install -p -m 0644 %{SOURCE1} %{buildroot}%{_mandir}/man1/%{name}.1 %changelog +* Wed Jan 27 2021 Fedora Release Engineering - 1.9-11 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + * Wed Jul 29 2020 Fedora Release Engineering - 1.9-10 - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild From dd740e891f7ae3a607b4ec7780ba448468d7f11c Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 23 Jul 2021 17:53:10 +0000 Subject: [PATCH 20/30] - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- snmpcheck.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/snmpcheck.spec b/snmpcheck.spec index 3ad14ac..5f6ee0a 100644 --- a/snmpcheck.spec +++ b/snmpcheck.spec @@ -1,6 +1,6 @@ Name: snmpcheck Version: 1.9 -Release: 11%{?dist} +Release: 12%{?dist} Summary: An utility to get information via SNMP protocols License: GPLv3+ @@ -62,6 +62,9 @@ install -p -m 0644 %{SOURCE1} %{buildroot}%{_mandir}/man1/%{name}.1 %changelog +* Fri Jul 23 2021 Fedora Release Engineering - 1.9-12 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + * Wed Jan 27 2021 Fedora Release Engineering - 1.9-11 - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild From 7c4eae0be48fcf2477ac8538c475587ce4832cb8 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 22 Jan 2022 01:14:44 +0000 Subject: [PATCH 21/30] - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- snmpcheck.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/snmpcheck.spec b/snmpcheck.spec index 5f6ee0a..478ce8f 100644 --- a/snmpcheck.spec +++ b/snmpcheck.spec @@ -1,6 +1,6 @@ Name: snmpcheck Version: 1.9 -Release: 12%{?dist} +Release: 13%{?dist} Summary: An utility to get information via SNMP protocols License: GPLv3+ @@ -62,6 +62,9 @@ install -p -m 0644 %{SOURCE1} %{buildroot}%{_mandir}/man1/%{name}.1 %changelog +* Sat Jan 22 2022 Fedora Release Engineering - 1.9-13 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + * Fri Jul 23 2021 Fedora Release Engineering - 1.9-12 - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild From 3e80cea71c8df5e03513abe1aa6e5d88d0e755a7 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 23 Jul 2022 08:58:25 +0000 Subject: [PATCH 22/30] Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- snmpcheck.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/snmpcheck.spec b/snmpcheck.spec index 478ce8f..b04247b 100644 --- a/snmpcheck.spec +++ b/snmpcheck.spec @@ -1,6 +1,6 @@ Name: snmpcheck Version: 1.9 -Release: 13%{?dist} +Release: 14%{?dist} Summary: An utility to get information via SNMP protocols License: GPLv3+ @@ -62,6 +62,9 @@ install -p -m 0644 %{SOURCE1} %{buildroot}%{_mandir}/man1/%{name}.1 %changelog +* Sat Jul 23 2022 Fedora Release Engineering - 1.9-14 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + * Sat Jan 22 2022 Fedora Release Engineering - 1.9-13 - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild From 5d7829bbc9ec1cf447678020a5e62f64cbf36829 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 21 Jan 2023 03:36:56 +0000 Subject: [PATCH 23/30] Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- snmpcheck.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/snmpcheck.spec b/snmpcheck.spec index b04247b..f60c703 100644 --- a/snmpcheck.spec +++ b/snmpcheck.spec @@ -1,6 +1,6 @@ Name: snmpcheck Version: 1.9 -Release: 14%{?dist} +Release: 15%{?dist} Summary: An utility to get information via SNMP protocols License: GPLv3+ @@ -62,6 +62,9 @@ install -p -m 0644 %{SOURCE1} %{buildroot}%{_mandir}/man1/%{name}.1 %changelog +* Sat Jan 21 2023 Fedora Release Engineering - 1.9-15 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + * Sat Jul 23 2022 Fedora Release Engineering - 1.9-14 - Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild From 12d5db78a4ec176294255f4df0fbad3eb064de0a Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 22 Jul 2023 02:02:46 +0000 Subject: [PATCH 24/30] Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- snmpcheck.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/snmpcheck.spec b/snmpcheck.spec index f60c703..9bc6691 100644 --- a/snmpcheck.spec +++ b/snmpcheck.spec @@ -1,6 +1,6 @@ Name: snmpcheck Version: 1.9 -Release: 15%{?dist} +Release: 16%{?dist} Summary: An utility to get information via SNMP protocols License: GPLv3+ @@ -62,6 +62,9 @@ install -p -m 0644 %{SOURCE1} %{buildroot}%{_mandir}/man1/%{name}.1 %changelog +* Sat Jul 22 2023 Fedora Release Engineering - 1.9-16 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + * Sat Jan 21 2023 Fedora Release Engineering - 1.9-15 - Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild From f76d730dc949c77a26c09988f4d328eb08980834 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 27 Jan 2024 03:47:48 +0000 Subject: [PATCH 25/30] Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild --- snmpcheck.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/snmpcheck.spec b/snmpcheck.spec index 9bc6691..bbb4c52 100644 --- a/snmpcheck.spec +++ b/snmpcheck.spec @@ -1,6 +1,6 @@ Name: snmpcheck Version: 1.9 -Release: 16%{?dist} +Release: 17%{?dist} Summary: An utility to get information via SNMP protocols License: GPLv3+ @@ -62,6 +62,9 @@ install -p -m 0644 %{SOURCE1} %{buildroot}%{_mandir}/man1/%{name}.1 %changelog +* Sat Jan 27 2024 Fedora Release Engineering - 1.9-17 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + * Sat Jul 22 2023 Fedora Release Engineering - 1.9-16 - Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild From b328dd721be4db617f6a17f23b65e1f092d1e749 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 20 Jul 2024 05:58:34 +0000 Subject: [PATCH 26/30] Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild --- snmpcheck.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/snmpcheck.spec b/snmpcheck.spec index bbb4c52..2dd9a35 100644 --- a/snmpcheck.spec +++ b/snmpcheck.spec @@ -1,6 +1,6 @@ Name: snmpcheck Version: 1.9 -Release: 17%{?dist} +Release: 18%{?dist} Summary: An utility to get information via SNMP protocols License: GPLv3+ @@ -62,6 +62,9 @@ install -p -m 0644 %{SOURCE1} %{buildroot}%{_mandir}/man1/%{name}.1 %changelog +* Sat Jul 20 2024 Fedora Release Engineering - 1.9-18 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + * Sat Jan 27 2024 Fedora Release Engineering - 1.9-17 - Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild From 8476e0aa713b9a1e473830efd9c696f737da2026 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20Such=C3=BD?= Date: Thu, 25 Jul 2024 13:16:40 +0200 Subject: [PATCH 27/30] convert GPLv3+ license to SPDX This is part of https://fedoraproject.org/wiki/Changes/SPDX_Licenses_Phase_4 --- snmpcheck.spec | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/snmpcheck.spec b/snmpcheck.spec index 2dd9a35..136426b 100644 --- a/snmpcheck.spec +++ b/snmpcheck.spec @@ -1,9 +1,10 @@ Name: snmpcheck Version: 1.9 -Release: 18%{?dist} +Release: 19%{?dist} Summary: An utility to get information via SNMP protocols -License: GPLv3+ +# Automatically converted from old format: GPLv3+ - review is highly recommended. +License: GPL-3.0-or-later URL: http://www.nothink.org/perl/snmpcheck/ Source0: http://www.nothink.org/perl/snmpcheck/downloads/%{name}-%{version}.rb #Manual page @@ -62,6 +63,9 @@ install -p -m 0644 %{SOURCE1} %{buildroot}%{_mandir}/man1/%{name}.1 %changelog +* Thu Jul 25 2024 Miroslav Suchý - 1.9-19 +- convert license to SPDX + * Sat Jul 20 2024 Fedora Release Engineering - 1.9-18 - Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild From d45d230b73fb3658e03bb08f92fe4e308ce0dadc Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sun, 19 Jan 2025 11:07:25 +0000 Subject: [PATCH 28/30] Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild --- snmpcheck.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/snmpcheck.spec b/snmpcheck.spec index 136426b..3a9d2bf 100644 --- a/snmpcheck.spec +++ b/snmpcheck.spec @@ -1,6 +1,6 @@ Name: snmpcheck Version: 1.9 -Release: 19%{?dist} +Release: 20%{?dist} Summary: An utility to get information via SNMP protocols # Automatically converted from old format: GPLv3+ - review is highly recommended. @@ -63,6 +63,9 @@ install -p -m 0644 %{SOURCE1} %{buildroot}%{_mandir}/man1/%{name}.1 %changelog +* Sun Jan 19 2025 Fedora Release Engineering - 1.9-20 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + * Thu Jul 25 2024 Miroslav Suchý - 1.9-19 - convert license to SPDX From 567b8b24c437f867dd39a3aabdc2ce75f4a19141 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 25 Jul 2025 18:29:25 +0000 Subject: [PATCH 29/30] Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild --- snmpcheck.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/snmpcheck.spec b/snmpcheck.spec index 3a9d2bf..f9fdda9 100644 --- a/snmpcheck.spec +++ b/snmpcheck.spec @@ -1,6 +1,6 @@ Name: snmpcheck Version: 1.9 -Release: 20%{?dist} +Release: 21%{?dist} Summary: An utility to get information via SNMP protocols # Automatically converted from old format: GPLv3+ - review is highly recommended. @@ -63,6 +63,9 @@ install -p -m 0644 %{SOURCE1} %{buildroot}%{_mandir}/man1/%{name}.1 %changelog +* Fri Jul 25 2025 Fedora Release Engineering - 1.9-21 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + * Sun Jan 19 2025 Fedora Release Engineering - 1.9-20 - Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild From 9890d411f1a10a0225e7bb9eb2c7cdbe404390a7 Mon Sep 17 00:00:00 2001 From: Michal Ambroz Date: Sun, 16 Nov 2025 03:58:16 +0100 Subject: [PATCH 30/30] update refererence to upstream --- snmpcheck.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/snmpcheck.spec b/snmpcheck.spec index f9fdda9..768378c 100644 --- a/snmpcheck.spec +++ b/snmpcheck.spec @@ -5,8 +5,8 @@ Summary: An utility to get information via SNMP protocols # Automatically converted from old format: GPLv3+ - review is highly recommended. License: GPL-3.0-or-later -URL: http://www.nothink.org/perl/snmpcheck/ -Source0: http://www.nothink.org/perl/snmpcheck/downloads/%{name}-%{version}.rb +URL: https://www.nothink.org/codes/snmpcheck/ +Source0: https://www.nothink.org/codes/snmpcheck/%{name}-%{version}.rb #Manual page Source1: snmpcheck.1 BuildArch: noarch