Linux: cek snmp publik yang aktif di subnet/prefix IP

 1. pakai script bash linux


#!/bin/bash

# Loop untuk semua alamat IP dalam subnet

for ip in $(fping -g 202.102.1.0/24 2>&1 | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | sort -u); do

  # Cek SNMP dengan snmpwalk dan ambil sysDescr

  sysDescr=$(snmpwalk -v 2c -c public $ip 1.3.6.1.2.1.1.1 2>/dev/null | awk -F "STRING: " '{print $2}')

  # Jika SNMP aktif dan sysDescr ditemukan, tampilkan hasilnya

  if [ ! -z "$sysDescr" ]; then

    echo "SNMP aktif (sysDescr) di: $ip - $sysDescr"

  fi

done


2. ini versi lebih cepat dengan parallel


#!/bin/bash

# Fungsi untuk memeriksa SNMP hanya sysDescr
check_snmp() {
  ip=$1
  sysDescr=$(snmpwalk -v 2c -c public -r 1 -t 2 $ip 1.3.6.1.2.1.1.1 2>/dev/null | awk -F "STRING: " '{print $2}')
  
  if [ ! -z "$sysDescr" ]; then
    echo "SNMP aktif (sysDescr) di: $ip - $sysDescr"
  fi
}

export -f check_snmp

# Loop untuk semua alamat IP dalam subnet
fping -g 103.102.12.0/24 2>/dev/null | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | sort -u | parallel -j 10 check_snmp

3. versi dengan argument


ini ada tambahan nama perangkatnya dan pakai argument untuk subnet ipnya, untuk menjalankannya bash script.sh 102.0.0.0/24

#!/bin/bash

# Mengecek apakah parameter subnet diberikan
if [ -z "$1" ]; then
  echo "Usage: $0 <subnet>"
  exit 1
fi

# Fungsi untuk memeriksa SNMP hanya sysDescr dan sysName
check_snmp() {
  ip=$1

  # Ambil sysDescr
  sysDescr=$(snmpwalk -v 2c -c public -r 1 -t 2 $ip 1.3.6.1.2.1.1.1 2>/dev/null | awk -F "STRING: " '{print $2}')

  # Ambil sysName (Nama perangkat/host)
  sysName=$(snmpwalk -v 2c -c public -r 1 -t 2 $ip 1.3.6.1.2.1.1.5 2>/dev/null | awk -F "STRING: " '{print $2}')

  # Jika SNMP aktif dan sysDescr ditemukan, tampilkan hasilnya
  if [ ! -z "$sysDescr" ]; then
    # Menampilkan baik sysName dan sysDescr
    echo "SNMP $ip (sysName: $sysName, sysDescr: $sysDescr)"
  fi
}

export -f check_snmp

# Mendapatkan subnet dari parameter yang diberikan
subnet=$1

# Loop untuk semua alamat IP dalam subnet
fping -g $subnet 2>/dev/null | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | sort -u | parallel -j 10 check_snmp

4. Versi pakai 2 argument:


bash script.sh 202.0.1.0/24 public


#!/bin/bash

# Mengecek apakah parameter subnet dan komunitas SNMP diberikan
if [ -z "$1" ] || [ -z "$2" ]; then
  echo "Usage: $0 <subnet> <community>"
  exit 1
fi

# Fungsi untuk memeriksa SNMP hanya sysDescr dan sysName
check_snmp() {
  ip=$1
  community=$2

  # Ambil sysDescr
  sysDescr=$(snmpwalk -v 2c -c $community -r 1 -t 2 $ip 1.3.6.1.2.1.1.1 2>/dev/null | awk -F "STRING: " '{print $2}')

  # Ambil sysName (Nama perangkat/host)
  sysName=$(snmpwalk -v 2c -c $community -r 1 -t 2 $ip 1.3.6.1.2.1.1.5 2>/dev/null | awk -F "STRING: " '{print $2}')

  # Jika SNMP aktif dan sysDescr ditemukan, tampilkan hasilnya
  if [ ! -z "$sysDescr" ]; then
    # Menampilkan baik sysName dan sysDescr
    echo "SNMP: $ip (sysName: $sysName, sysDescr: $sysDescr)"
  fi
}

export -f check_snmp

# Mendapatkan subnet dan komunitas SNMP dari parameter yang diberikan
subnet=$1
community=$2

# Loop untuk semua alamat IP dalam subnet
fping -g $subnet 2>/dev/null | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | sort -u | parallel -j 50 check_snmp {} $community