0% menganggap dokumen ini bermanfaat (0 suara)
30 tayangan41 halaman

Panduan SNMP dengan Python PySNMP

Dokumen ini menyajikan pengantar tentang protokol SNMP dan penggunaannya dengan Python. Menjelaskan bahwa SNMP memungkinkan pemantauan perangkat jaringan seperti router dan server melalui kueri GET dan SET. Ini juga menjelaskan konsep kunci seperti agen, MIB, dan ASN1. Penulis menjelaskan bahwa pustaka PySNMP memungkinkan interaksi dengan perangkat SNMP di Python dan mencantumkan beberapa tugas umum seperti kueri, perangkap, dan pembuatan agen.

Diterjemahkan oleh

ScribdTranslations
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
30 tayangan41 halaman

Panduan SNMP dengan Python PySNMP

Dokumen ini menyajikan pengantar tentang protokol SNMP dan penggunaannya dengan Python. Menjelaskan bahwa SNMP memungkinkan pemantauan perangkat jaringan seperti router dan server melalui kueri GET dan SET. Ini juga menjelaskan konsep kunci seperti agen, MIB, dan ASN1. Penulis menjelaskan bahwa pustaka PySNMP memungkinkan interaksi dengan perangkat SNMP di Python dan mencantumkan beberapa tugas umum seperti kueri, perangkap, dan pembuatan agen.

Diterjemahkan oleh

ScribdTranslations
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd

Pengantar SNMP dengan Python:

PySNMP (Bagian 1) - Protokol dan


perintah
Por Gaël Pegliasco- dipublikasikan pada 03/03/2016, dipublikasikan pada 22/04/2016
SNMP adalah protokol pemantauan jaringan yang sangat populer. Ini adalah standar
digunakan oleh hampir semua perangkat jaringan. Ini memungkinkan Anda untuk memantau (memeriksa dan memodifikasi)
semua jenis perangkat keras, mulai dari router hingga printer, dan bahkan beberapa
mesin kopi terhubung.

Pengantar - Bagian satu


Tutorial ini mengajak Anda untuk menjelajahi pustaka Python PySNMP yang memungkinkan komunikasi
dengan bahan apa pun yang kompatibel dengan protokol dengan nama yang sama.

Namun, sebelum memulai presentasi teknis yang menjelaskan bagaimana menjalankan


sebuah kueri "get" atau "set" di SNMP v2 atau v3, kami mengusulkan sebuah presentasi tentang
konsep dari protokol ini. Ini akan memungkinkan Anda untuk memahami lebih baik seluk-beluk perpustakaan
dengan tujuan membawanya ke Grial absolut dari penguasaan penuhnya.

Pada bagian pertama ini kami memperkenalkan protokol SNMP dan penggunaan perintah sistem
yang akan memungkinkan mereka untuk menyentuh konsep-konsep yang kami paparkan.

Di akhir tutorial 4 bagian ini, Anda biasanya akan dapat:

Melakukan kueri GET / SET


Kirim jebakan
Buat survei untuk alat pemantauan sepertiNagios, Centreondan lainnya.
Membuat agen SNMP
Sebelum melanjutkan membaca artikel ini, jika Anda baru dalam topik ini, saya mengundang Anda untuk membaca ini
pengantar kepada pengawasanyang akan memberikan dasar-dasar teknis untuk memahami pekerjaan ini,
begitu juga dengan masalah dan alat yang tersedia. Bacaan ini akan membantumu untuk menemukan
lebih baik tempat SNMP di alam semesta ini. Dokumen ini sangat berorientasi pada Nagios dan
turunan, tetapi akan memberikan semua elemen dasar untuk memahami
dengan benar disiplin ini.

rencana
Presentasi protokol
oSNMP

oMIB

oASN1

oTandai dengan agen menggunakan perintah sistem

pysnmp
oElemen dasar
oPermintaan

oMeja

oGunakan MIB Anda dengan agen

Apa itu SNMP?


SNMP berarti Protokol Manajemen Jaringan Sederhana

Ini adalah protokol manajemen jaringan.

Secara konkret memungkinkan untuk memantau keadaan jaringan perangkat atau taman komputer,
seperti bahan dan layanan:

Router, saklar
Stasiun kerja
printer
Layanan (pengiriman pesan, ftp, ssh, http, proses, memori ...)

Untuk pengawasan, perlu memahami "untuk mendapatkan informasi" tentang keadaan ini
elemen". Tetapi protokol ini juga memungkinkan untuk melakukan tindakan pemeliharaan
cara merestart layanan atau mesin, membersihkan kepala baca dari sebuah
printer, dll.
Bagaimana cara kerja SNMP

SNMP didasarkan pada ide bahwa sistem pemantauan jaringan terdiri dari:

Nodos yang dikelola, masing-masing dengan agen


Agen adalah layanan (perangkat lunak) yang berkomunikasi dengan manajer untuk melakukan pertukaran
informasi tentang status node
Setidaknya satu stasiun manajemen, si pengelola (Manajemen Jaringan
Stasiun)
Sebuah protokol untuk menukar informasi antara agen dan NMS, ini
protokol adalah SNMP

Situs wikipedia menawarkan sebuahpresentasi singkatdari yang terakhir ini dalam versi Prancis.
Versi bahasa Inggris dari artikel yang sama adalahjauh lebih lengkapdan menyebutkan rangkaian RFC
yang menggambarkannya.

Manajer dan agen (sumberPySNMP)

Bagaimana cara kerjanya?

Administrator mengirimkan permintaan jenis "GET" kepada agen untuk mengambil


informasi tentang layanan / mesin melalui protokol SNMP
Anda juga dapat mengirim permintaan "SET" untuk mengubah status layanan dan /
atau mesin yang dikelola oleh agen
Agen dapat mengirim permintaan "TRAP" kepada administrator untuk melaporkan sebuah
malfungsi
Para agen dapat dikelompokkan melalui 'agen utama'
Informasi yang dapat diakses dan disediakan oleh agen diorganisir dalam sebuah basis data
"virtual" llamada MIB.
Basis ini telah distandarisasi.

Pertukaran permintaan antara administrator dan agenwikipedia)

Itu saja. Sederhana?

Mengapa menggunakan SNMP?

Ini adalah protokol yang sangat lama dan kompatibel dengan hampir semua penyedia
perangkat keras jaringan.
Sejak versi 2 dan 3, aman, menawarkan akses terbatas ke informasi tertentu dan
berbasis pada protokol enkripsi seperti SSH dan TLS (tetapi dengan protokolnya sendiri
perpustakaan dan alat internal).
Informasi yang terkandung dalam MIB distandarisasi, artinya apa pun yang
perangkat dan pembuatnya, akan dapat mengakses informasi yang sama di yang sama
tempat dan dengan cara yang sama. Dan itu luar biasa:
Anda adalah seorang administrator jaringan, ingin mengetahui total dan memori yang tersedia
sebuah mesin, ia akan memperoleh dengan cara yang sama apapun sistem operasi (mac /
windows / unix / android) dan perangkat keras yang digunakan (AMD, ARM, Intel, ...). "Apakah tidak ada
fabuloso?
Sederhana (agen-agen itu ringan, kompleksitas dipindahkan ke tingkat yang
manajer)
Ini independen dari arsitektur jaringan dan elemen-elemen (PC, printer,
pengarah, ...)
Ini dapat diperluas, Anda dapat menyesuaikan basis data selain apa yang ditawarkan oleh
standar
Dia kokoh. Ini berbasis pada UDP atau TCP:
Akan tetap berfungsi ketika jaringan menghadapi masalah bottleneck yang serius: sebuah
marco informasi UDP adalah ringan.

Apakah itu benar-benar baik?

En general, es bastante bueno y, sobre todo, tiene pocos competidores maduros y


generalisasi, tetapi:

Namun, kadang-kadang, itu tidak begitu sederhana: MIB adalah "dapat dibaca oleh manusia",
tetapi untuk mengutip salah satu kolega saya, kadang-kadang, mereka yang tiba di sana tidak benar-benar
manusia.
Protokolnya sederhana tetapi implementasinya bisa jauh lebih rumit.
Versi 3 telah mengimplementasikan lapisan SSH-nya sendiri alih-alih menggunakan HTTPS (HTTP
tentang SSH). Ini menyulitkan komunikasi: tidak ada negosiasi otomatis untuk enkripsi
dan harus memberikan 5 informasi untuk membuat koneksi yang aman.
Beberapa pesaing mulaimunculbagaimanaWMIdan menawarkan sebuah bahasa
de consulta más rico (WQL).

sejarah

Versi pertama protokol data pada tahun 1989


Tidak menawarkan keamanan dan menggunakan versi 1 dari MIB, yang masih cukup sederhana
Versi kedua diterbitkan pada tahun 1993
oMemberikan lebih banyak keamanan dalam hal autentikasi dan enkripsi

oMengizinkan administrasi terdistribusi


oBawa versi MIB yang lebih kaya (MIB-2)

Versi 3 diterbitkan pada tahun 1998


oBawa transaksi terenkripsi melalui SSH

oLebih modular
Dalam fakta

Versi 2 mengalami masalah saat mulai dan beberapa 'peluncuran' dilakukan. Ini
versi "2c" yang telah menang. Saya menyarankan Anda tentang topik ini dengan membaca ini
presentasi SNMPyang sedikit lebih menjelaskan kesulitan ini dalam pelaksanaan
marcha dan lapresentasi PySNMPyang mengambil beberapa dari poin ini.
Versi 3, sama seperti v2, juga mengalami masalah untuk menguasai.
kompatibel dengan semua bahan saat ini meskipun telah mengalami perbaikan. Masalah dari
keamanan telah menjadi sangat sensitif saat ini dan itu adalah versi yang direkomendasikan.

SNMP mendominasi dunia TCP/IP dan merupakan standar yang direkomendasikan sejak Mei
1990

MIB
Sebelum kita dapat meluncurkan kueri SNMP pertama kita, penting untuk memahami
apa itu MIB.

LaBasis informasi manajemenini adalah basis data 'virtual' untuk mengatur


secara hierarkis informasi yang diberikan oleh agen di tim.

Ini bukan basis data secara ketat seperti basis data relasional.
Ada hanya melalui agen yang bebas untuk melaksanakannya sesuai keinginannya. Ketika agen itu
agen tidak berfungsi, tidak ada data di MIB. Hanya terdapat deskripsi MIB
(umumnya sebuah file teks).

Sebuah MIB sebenarnya menggambarkan bagaimana memberi nomor / mengakses informasi.

Ia adalah agen (perangkat lunak) yang menyimpan (tetapi seharusnya dikatakan bahwa mengelola) ini
informasi, yang sering kali 'volatile', seperti yang diinginkan.

Sangat penting untuk memahami poin sebelumnya, yang sering kali menyulitkan
pemahaman MIB oleh para pendatang baru dalam protokol ini.

Ambil contoh jumlah proses aktif di sebuah mesin. Ini diidentifikasi


secara unik oleh MIB-II. Tetapi informasi ini diminta oleh agen sistem
operatif ketika menerima permintaan untuk yang terakhir, karena data ini sedang berubah
setiap saat. Oleh karena itu, tidak 'disimpan' oleh sistem operasi. Tidak ada
dapat diakses melalui kueri SQL. Diberikan saat diminta, dan selalu ketika
agen tidak meminta kepada sistem operasi, tidak benar-benar tersedia atau belum
ada

Manajer meminta informasi kepada agen


Agen menerima permintaan dan menelepon sistem primitif untuk memperolehnya
Agen mengembalikan informasi kepada manajer
Ini adalah informasi "volatil" yang sebenarnya tidak dapat disimpan.

Sebagian besar informasi dari MIB memiliki sifat ini, yang lain kadang-kadang disimpan.
di suatu tempat, seperti orang yang bertanggung jawab atas mesin, pelabuhan sebuah layanan atau
status dari jalur pasokan atau dioda (mati, menyala) Sesuai dengan
konstruktor / OS, informasi ini disimpan secara fisik dengan cara yang berbeda, tetapi
MIB distandarisasi untuk sebagian besar, sehingga manajer selalu meminta yang sama
informasi dengan cara yang sama. Tergantung pada agen untuk mencari tahu ke mana pergi tergantung pada
material / layanan yang dikelola.

Dan itu memberikan banyak kemudahan dalam penulisan alat uji / pemantauan.
ini adalah salah satu kekuatan besar dari standar ini.

MIB-II

Salah satu MIB yang paling dikenal adalah MIB-II, yang dijelaskan olehRFC 1213.

Diimplementasikan pada hampir semua perangkat TCP / IP.

Dia memiliki sepuluh kelompok:

sistem
antarmuka
Penerjemahan alamat
IP
ICMP
TCP
UDP
EGP
transmisi
y SNMP

Artinya, informasi apa pun yang dapat saya minta tentang MIB-II akan ditempatkan di salah satu dari
grup-grup ini.
Beberapa contoh informasi yang dapat Anda temukan di kumpulan ini adalah:

daftar proses (dengan informasi memori dan CPU);


kecepatan jaringan;
rata-rata beban;
penggunaan memori;
kontak sistem, waktu aktif;
penggunaan ruang disk;
tabel routing

Contoh deskripsi MIB

Akhirnya, mibs dijelaskan dalam suatu "bahasa" yang disebutASN.1.

Contoh berikut menunjukkan informasi 'deskripsi antarmuka (jaringan)' seperti yang


deskripsikan dalam ASN.1:

ifDescr OBJEK TIPE


SYNTAX TampilkanString (UKURAN (0..255))
AKSES hanya baca
ESTADO wajib
DESCRIPCIÓN
Sebuah rangkaian teks yang berisi informasi tentang
antarmuka. Rangkaian ini harus mencakup nama dari
pabrikan, nama produk dan versi
dari antarmuka perangkat keras.
:: = {ifEntry 2}

Membaca definisi data ini cukup dapat dipahami dengan sendirinya.


Kami menunjukkan di sini:

su nombre, "ifDescr"
tipe, "DisplayString", sebuah string dengan panjang hingga 255 karakter

mode akses, "hanya baca"


statusnya, "wajib"
akhirnya lokasi Anda di node induk "ifEntry": elemen sub kedua dari node
jikaEntri

Organisasi informasi dalam MIB

Untuk memahami deskripsi "hierarkis" dari data "ifDescr", berikut adalah grafik
apa yang diwakili oleh hierarki utama dari semua MIB:
Hierarki utama dari MIB (Layanan Wikipedia)

Grafik di atas menunjukkan struktur hierarkis dari MIB.


Di bawah simpul akar, yang ditandai dengan "." Ada 3 informasi bernomor:

CCITT dengan nomor 0


ISO con el número 1
ISO - CCITT dengan nomor 2

Di bawah node ISO ada 4 informasi, juga dinomori:

standar, dengan nomor 0


otoritas pendaftaran, dengan nomor 1
anggota tubuh, dengan nomor 2
organisasi, dengan nomor 3

Ruta menuju informasi organisasi di bawah "ISO", yang terletak di bawah akar,
akan menjadi ".1.3" atau ".[Link]"
Dan seterusnya.

Misalnya, akses ke informasi "MIB-2" akan dilakukan melalui jalur


.[Link].2.1 atau .[Link]-2
Dan sekarang, Anda tahu segalanya tentang MIB: mereka mendefinisikan informasi dalam ASN.1, yang dapat diakses
melalui rute yang diungkapkan dengan angka atau nama informasi utama.
OID

Oleh karena itu, informasi diberi nomor sesuai dengan urutannya di pohon MIB, ini
angka disebut OID (Pengidentifikasi Objek).
Berikut adalah beberapa contoh OID:

.[Link].2.1.1 sistema: tiempo de actividad, contacto, nombre


.[Link].2.1.2 antarmuka: antarmuka jaringan
.[Link].2.1.4 pengaturan ip: ip, dll.
.[Link].2.1.5 icmp: kesalahan icmp, pembuangan ... (icmp adalah, misalnya, ping)
.[Link].2.1.6 / 7 tcp atau udp: status koneksi tcp atau udp

Sekarang pertanyaannya menjadi "bagaimana cara menemukan semua informasi yang tersedia di seorang"
MIB?
Jawabannya adalah:

Dengan membaca standar dan standar yang terkait:[Link]


Menjalankan kueri dengan alat SNMP yang memungkinkan Anda menjelajahi pohon
lengkap dari sebuah MIB.

Menyelidiki MIB ini melalui situs web yang memiliki kebaikan untuk
mewakili mereka dengan mudah, seperti situs web diMONITOR IP.

Akan diamati dalam yang terakhir bahwa OID "[Link].[Link].1.2berikan rute lengkap
a la informaciónifDescr ".
Ini adalah apa yang akan kami lakukan dengan PySNMP: mengirimkan kueri menanyakan nilai dari sebuah node
(informasi) terletak di lokasi tertentu dalam MIB atau mengubah nilai ini.

Dan itu saja. Atau hampir. Apa kamu melihat sedikit lebih jelas?

Latihan semakin dekat.

Sebuah alam semesta MIB

Ada banyak MIB:

Tergantung pada perangkat keras (router, printer), informasi tersebut berbeda.


Oleh karena itu, beberapa perangkat atau pembangun menyediakan MIB mereka sendiri
yang mendefinisikan suatu cabang di pohon OID, dengan nomor resmi yang ditentukan oleh
Otoritas Nomor yang Ditetapkan untuk Internet (IANA).
Por ejemplo, encontramos CISCO en esta rama del árbol:
[Link] = [Link].4.1.9
Di lokasi ini, CISCO bebas untuk menawarkan MIB yang menggambarkan informasi dari
perangkat keras mereka sendiri sesuai dengan yang mereka anggap perlu. Banyak perusahaan lain melakukan hal yang sama.
sama, seperti Alcatel / Nokia untuk menyebutkan beberapa.
TempatIP Monitor memiliki banyak basis data (mib)untuk berbagai jenis
informasi / materi / layanan yang dapat Anda konsultasikan.

Komunitas
El acceso a la información de un MIB se filtra por lo que se llama la "comunidad", excepto
versi 3 dari protokol.
"Komunitas" adalah jenis kata yang dibagikan, "publik" secara default.

"Publik" dapat berada dekat dengan opsi login "anonim" yang tersedia di sebagian besar dari
server ftp.

Permintaan informasi selalu dilakukan melalui sebuah komunitas.


Tergantung pada komunitas yang digunakan, informasi yang diterima akan berbeda:

Komunitas "publik" memberikan akses ke level "hanya baca".


Ada tingkat pembacaan / penulisan pribadi (komunitas "pribadi") yang lebih besar
frekuensi dinonaktifkan (memberikan akses ke seluruh pengaturan sistem
ditulis)

Oleh karena itu, ketika Anda ingin mengakses atau mengedit informasi seorang agen, Anda:

mengirim permintaan GET / SET ke agen


menyediakan jalur informasi yang diinginkan, OID Anda
menyediakan komunitas yang digunakan ("pribadi" untuk perubahan)
memberikan nilai baru dari data dalam kasus modifikasi
menyediakan alamat IP / nama domain atau menjalankan agen
port yang digunakan adalah secara default port 161

Menggunakan protokol baris perintah


Untuk sepenuhnya memahami apa yang diizinkan oleh protokol ini, saya usulkan untuk menjalankan
perintah dasar dengan alat sistem.
Ini akan menyentuh mekanisme mendasar dan memastikan bahwa para agen memahami mereka
konsultasi sebelum menuliskannya di Python.

Perintah

Sebelum meluncurkan pesanan pertama kami, mari kita lihat jenis permintaan yang ada dalam protokol.
mengusulkan agar para administrator dan agen dapat saling bertukar informasi:

Ambil: meminta nilai OID oleh administrator kepada agen


Agen mengembalikan informasi melalui pesan jenis Respon
GetNext: minta informasi berikut di MIB
Jelajahi MIB tanpa mengetahui apa isinya
Menetapkan: mengubah nilai yang terkait dengan OID
Mengubah pengaturan atau mengubah status sebuah host
GetBulk: meminta seperangkat lengkap informasi dalam satu kueri.
Hindari mengalikan Get dan GetNext
Jawaban: pesan yang dikirim oleh agen kepada administrator yang berisi
informasi yang diminta
Trampa: pesan yang dikirim oleh agen kepada administrator untuk memberi tahu
masalah
Memberitahukan: pesan yang dikirim oleh manajer untuk mengonfirmasi penerimaan perangkap

Persyaratan awal
Untuk meluncurkan pesanan pertama kami, diperlukan memiliki seorang agen dan seorang manajer.
Saya merekomendasikan initutorial yang sangat baikuntuk instalasi tersebut di mesin Linux (tipe
debian).
Untuk administrator, Anda dapat menginstal alat dasar snmp dan mib melalui ini.
perintah

sudo apt-get install snmp snmp-mibs-downloader


sudo apt-get install smitools libsmi

Jadi Anda membutuhkan seorang agen.

Untuk menemukannya, kamu bisa:

Cobalah dengan printer jaringan atau mesin dengan alamat IP


Umumnya kompatibel dengan protokol SNMP
Pasang agennya sendiri mengikuti tutorial yang disebutkan sebelumnya
Mulailah pesanan Anda ke agen "[Link]" akses gratis melalui
Internet, yang akan kami lakukan.

Akhirnya, jika Anda tidak memiliki kemungkinan untuk menginstal perintah SNMP di Linux Anda, ketahuilah bahwa
Perpustakaan PySNMP menawarkan skrip setara murni Python yang dapat Anda instal dengan
perintah "pip install pysnmp-apps".

Perintah "DAPATKAN"

Menerima beberapa parameter, yang mencakup:

"-v": versión del protocolo


"-c": comunidad
"-O": formato de salida (prueba a, f, n, s, ...)

Contoh:

$ snmpget -v2c -c publik -Oa [Link] sysDescr.0


SNMPv2-MIB :: sysDescr.0 = STRING: SunOS [Link] 4.1.3_U1 1
sun4m

Versi protokol yang digunakan adalah wajib, pada perintah sebelumnya kita menggunakan protokol
dari versi 2c dan komunitas "publik".
Kami meminta informasi "sysDescr". Untuk melakukan ini, kami menambahkan jalur ".0" yang menunjuk
nilai dari node sysDescr

Nilai-nilai lainnya di bawah sebuah node (.1, .2, dll.) menandakan subelemen dari yang terakhir.
Oleh karena itu, informasi dapat diminta melalui jalur lengkap dalam bentuk sebuah
OID digital "[Link].[Link]. 0 " (teks) atau melalui nama pendek. Karena itu adalah
biasanya unik.

Jadi Anda bisa memulai ulang perintah di atas dengan OID digital ...

Perintah "Dapatkan berikutnya"


Menerima parameter yang sama seperti "GET" tetapi tidak mengembalikan OID yang diminta, melainkan yang
terus di pohon. Dengan mengelompokkan satu GET dan beberapa GET NEXT, Anda dapat meng-query seluruh pohon
un MIB.

$ snmpgetnext -v2c -Oa -c publik -Os [Link] sysDescr.0


sysObjectID.0 = OID: empresas.20408
$ snmpgetnext -v2c -On -c publik -Os [Link] sysObjectID.0
sysUpTimeInstance = Timeticks: (179062573) 20 días, 17: 23: 45.73

Anda dapat menjalankan GET NEXT di node mana pun, termasuk akar dari MIB.

Namun berjalan sebuah pohon adalah pekerjaan yang sulit.

Perintah "Ambil massal dan jalan"

Untuk menghindari mengirim beberapa perintah "GET" satu setelah yang lain, yang membebani
pertukaran jaringan, dimungkinkan untuk meminta konsultasi beberapa OID sekaligus melalui perintah
"DAPATKAN GROSS". Tapi tidak semua agen menerimanya.

Anda juga bisa menggunakan perintah "Walk" untuk menavigasi seluruh pohon, seperti yang
Saya akan melakukan dengan 'GET' dan 'GET NEXT'. Tetapi adalah perintah 'WALK' yang akan mengeksekusinya untuk Anda.

$ snmpwalk -v2c -On -c publik -Os [Link] sistem


sysDescr.0 = CADENA: SunOS [Link] 4.1.3_U1 1 sun4m
sysObjectID.0 = OID: perusahaan.20408
sysUpTimeInstance = Timeticks: (179082328) 20 días, 17: 27: 03.28
sysContact.0 = STRING: SNMP Laboratories, info@[Link]
sysName.0 = STRING: [Link]
sysLocation.0 = STRING: Moscú, Rusia
sysServices.0 = INTEGER: 72
sysORLastChange.0 = Timeticks: (179082382) 20 días, 17: 27: 03.82
sysORID.1 = OID: empresas.20408.1.1
sysORDescr.1 = STRING: nuevo comentario
sysORUpTime.1 = Timeticks: (123) 0: 00: 01.23

Terjemahkan OID

Perintah "snmptranslate" digunakan untuk menerjemahkan OID dari mode numerik ke mode
teks dan sebaliknya.

$ snmptranslate -On SNMPv2-MIB :: sysDescr.0


.[Link].[Link].0
$ snmptranslate [Link].[Link].0
SNMPv2-MIB :: sysDescr.0

Edit OID, perintah "SET"

Perintah "snmpset" digunakan untuk memodifikasi nilai dari sebuah OID.


Hanya tersedia dengan protokol v2 dan komunitas 'privat' atau protokol v3.
Contoh berikut diberikan untuk protokol v3.

Parameter yang digunakan adalah:

"-u": usuario
"-l": nivel de seguridad para identificarte
"-a": protocolo de autenticación
enkripsi kata sandi
"-A": contraseña de autenticación
"-x": algoritmo de cifrado para la conexión
"-X": contraseña / sal para encriptar la conexión

Di sinilah kita menemukan rasa sakit dari protokol v3 yang mengimplementasikan koneksi SSH
tanpa melakukan SNMP di atas SSH: tidak ada negosiasi otomatis algoritma enkripsi, diperlukan
spesifikasikan semuanya! Hanya untuk diri sendiri! Misera!

$ snmpget localhost sysLocation.0


SNMPv2-MIB :: sysLocation.0 = STRING: Rouans
$ snmpset -u demo -l authPriv -a MD5 -x DES-pass1 -X pass2 localhost
sysLocation.0 s " Bumi "
SNMPv2-MIB :: sysLocation.0 = CADENA: Tierra
$ snmpget localhost sysLocation.0
SNMPv2-MIB :: sysLocation.0 = CADENA: Bumi
Rekomendasi untuk menggunakan SNMP dan alat terkait

Versi 1 dan 2 dari protokol tidak cukup aman dan tidak ada untuk yang pertama.

Perlindungan dalam versi 2 dari protokol dilakukan hanya melalui "komunitas" yang
mereka tidak menggunakan kata sandi. Ini sangat lemah sebagai jenis perlindungan karena hanya membutuhkan
mengetahui nama komunitas untuk mengakses informasi tentang materi yang mungkin
sangat rahasia.

Agen WindowsXP terkenal karena menawarkan terlalu banyak


informasi sensitif dalam pengaturan defaultnya, seperti login dari
usuarios a los que se podía acceder directamente a través de la comunidad "pública".

Dalam praktiknya, agen yang disediakan oleh alat NetSNMP (di Linux) adalah
relatif lambat dan tidak selalu terlindungi dengan baik, banyak cacat yang
ditemukan secara teratur.

Oleh karena itu, apa pun solusi yang dipilih, selalu matikan mode anonim atau periksa
setiap informasi yang diberikan.

Kemudian, buat akses ACLS ke setiap MIB berdasarkan pengguna untuk memiliki kontrol penuh atas siapa
apa yang bisa kamu lakukan.

Akhirnya, kami tidak bisa merekomendasikan terlalu banyak untuk memprivilegikan hanya versi 3 dari
protokol.

kesimpulan
Perintah dasar SNMP cukup sederhana setelah Anda memahami bagaimana
memanipulasi parameter yang mereka gunakan.

Bagian pertama dari pengenalan SNMP ini seharusnya telah memberi Anda:

Pemahaman global tentang protokol


Sebuah ide yang baik tentang bagaimana mengakses dan memanipulasi informasi MIB, dengan
perintah sistem

Bagian kedua dari tutorial ini tentang SNMP dan PySNMPdidedikasikan untuk penemuan
de PySNMP:

Instal PySNMP

Pelajari cara memanipulasi komponen dasar (OID, Komunitas, Pengguna,


Konteks, ...)
Menjalankan kueri GET / GETNEXT / SET
Bagian ketiga dari tutorial ini akan membawa Andalebih jauh dalam penggunaanPySNMP untuk mengajarinya
cara membaca tabel data.

Akhirnya, bagian keempat akan mengajarkan Anda cara membuat agen menggunakan MIB kustom.

Pengantar SNMP dengan Python:


PySNMP (Bagian 2) - Penggunaan pustaka
KarenaGaël Pegliasco- dipublikasikan pada 03/03/2016, dipublikasikan pada 25/04/2016.
SNMP adalah protokol pemantauan jaringan yang sangat populer secara universal. Ini adalah standar
digunakan oleh hampir semua perangkat jaringan. Ini memungkinkan Anda untuk memantau (memeriksa dan mengubah)
semua jenis perangkat keras, dari router hingga printer, dan bahkan beberapa mesin kopi
terhubung. Bagian kedua dari tutorial ini memperkenalkan pustaka PySNMP

pengantar
Tutorial ini mengusulkan Anda untuk menemukan pustaka Python PySNMP yang memungkinkan dialog.
dengan bahan apa pun yang kompatibel dengan protokol dengan nama yang sama.

Dalam bagian kedua ini, kami akan mempresentasikan penggunaan protokol SNMP melalui pustaka
PySNMP.

Anda bisa mulai belajar langsung dari bagian kedua ini jika Anda sudah memahami protokol.
SNMP.

Namun, jika Anda baru dalam protokol ini, kami sarankan Anda membacanya terlebih [Link]
bagian pertama dari tutorial ini yang akan memperkenalkan protokol SNMP, kualitasnya dan
cacat dan akan memberikan alat dasar untuk mulai menggunakannya dan Anda
kepemilikan. Tanpa pengetahuan awal ini, bab kedua ini mungkin tampak sangat
sulit untuk dipahami.

Di akhir bagian kedua ini, Anda biasanya akan:


Untuk memanipulasi elemen OID dasar, komunitas, akun pengguna,
konteks, ...
Untuk menggunakan MIB Anda sendiri

Jalankan permintaan GET / GETNEXT / SET dan simulasikan WALKs

Buat survei untuk alat pemantauan sepertiNagios, Centreondan lainnya.

rencana
Presentasi protokol
oSNMP

oMIB

oASN1

oPermohonan

pysnmp
oPermohonan

oMeja

oGunakan MIB Anda dengan agen

pysnmp
Sekarang kita telah memperkenalkan protokol SNMP dan beberapa perintah untuk menggunakannya,
akhirnya kita bisa beralih ke topik nyata dari tutorial ini: pustaka PySNMP!
PySNMPini adalah pustaka Python yang mengimplementasikan semua versi protokol
SNMP secara lengkap di Python.

Karakteristik utamanya adalah:

Completo: mengimplementasikan seluruh protokol SNMP (v1 hingga v3) sepenuhnya dalam Python
Cukup ringan, sekitar 15000 baris kode
Cukup sederhana untuk hal-hal sederhana
Secara luas digunakan di komunitas: 30.000 unduhan per bulan di Pypi
Sangat berguna untuk menulis nagios / centeron / probe lainnya atau mengambil informasi dari
SNMP dalam program Python-nya
Memungkinkan Anda untuk menulis agen Anda sendiri

Terkadang itu kompleks dan kurangnya dokumentasi yang jelas tentang elemen tertentu seperti itu.
seperti
Menginstal PySNMP

Instalasi pustaka itu sederhana, ini adalah Python:

$ pip install pysnmp

Namun, di mesin dengan Windows, perintah "pip" biasanya akan gagal dalam
instalasi 'pycrypto' yang ingin dikompilasi oleh 'pip'. Tetapi yang terakhir sering terlihat
terasing dari alat-alat semacam itu.
Dalam hal ini,instal sebelumnya binari 'pycrypto' dari situs iniodari situs ini
untuk Python 3.5.

Jika Anda benar-benar memiliki kesulitan, ikuti initutorial instalasi PySNMP di Windows
ditulis khusus atas permintaan para pembaca kami.

Memanipulasi data ASN.1


Dengan PySNMP Anda dapat memanipulasi data dalam format ASN.1 karena itulah yang digunakan oleh
protokol SNMP.

Perpustakaan PySNMP didasarkan pada perpustakaan lain: pyasn1 untuk mencapai ini.
Konversi tipe ASN.1 ke python hampir alami:

de [Link] import *
a = Entero ( 21 ) * 2
mencetak ( a )
a = Entero ( - 1 ) + Entero ( 1 )
mencetak ( a )
a = int ( Masukkan ( 42 ))
cetak ( a )
a = OctetString ( 'Halo' ) + ',' + OctetString ( hexValue =
5079534e4d5021
cetak ( a , jenis ( a ))

Perintah dasar

PySNMP menawarkan beberapa fungsi "tingkat rendah" untuk menggunakan protokol SNMP, tetapi ia
disarankan untuk menggunakan modul "hlapi" yang berarti "API tingkat tinggi".

Yang terakhir menawarkan fungsi tingkat tinggi, mudah disiapkan untuk menjalankan perintah.
dasar-dasar yang dapat dicantumkan dengan cara ini

dari impor [Link] *


l = [ x untuk x dalam dir () jika 'Cmd' dalam x ]
cetak ( l )
bantuan ('[Link]')

yang menunjukkan
[ 'bulkCmd' , 'getCmd' , 'nextCmd' , 'setCmd' ]
Bantuan tentang fungsi getCmd di pysnmp. hlapi:
pysnmp . hlapi . getCmd = getCmd ( snmpEngine , authData ,
transportTarget , contextData , * varBinds , ** opciones )
Buatlah generator untuk melakukan satu atau lebih kueri SNMP GET.

Sebelum menggunakan perintah ini, kita akan belajar bagaimana memanipulasi parameter yang
membutuhkan:

OID yang ingin kami konsultasikan / modifikasi


Elemen koneksi komunitas untuk protokol v2 atau pengguna untuk
protokol v3
...

OIDS

OID adalah pengidentifikasi informasi yang dijelaskan dalam MIB.


Un OID menunjukkan jalur yang harus diikuti di pohon MIB untuk menemukan informasi; ".[Link]"
dapat dipahami sebagai:

". "
Bermula dari alun-alun pusat, beberapa jalan menantangmu.
1
Ambil yang pertama dari kiri
Kamu sampai di tempat baru.
2
Berbagai jalan menghadapi kamu lagi.
Ambil yang kedua di sebelah kiri kamu.
Kamu tiba di tempat baru.

3
Berbagai jalan menghadapkanmu lagi.
Ambil yang ketiga di sebelah kiri Anda.
Kamu sampai di tempat baru.
0
Ada sebuah plakat di bingkai, berisi informasi kamu.
Jika mengirim 'GET' dia membacanya, jika mengirim 'SET' dia mengubahnya.
Jalan di MIB

Sebuah OID diwakili oleh sekumpulan nilai numerik atau oleh serangkaian
nama-nama yang menunjuk setiap cabang yang dilalui di MIB.
Jika Anda ingin mendapatkan informasi lebih lanjut tentang OID ini, saya mengundang Anda untuk membacadokumentasi dari
PySNMP tentang tema ini.

Untuk membuat OID dengan PySNMP, perlu membuat instance dari kelas
"ObjectIdentity"

Un OID dapat didefinisikan:

Melalui suatu rangkaian karakter


Untuk sebuah tuple
Karena penulisannya

Keempat instansi berikut mendefinisikan objek yang sama

o = ObjectIdentity ( '[Link].[Link].0' )
o = ObjectIdentity (( 1 , 3 , 6 , 1 , 2 , 1 , 1 , 3 , 0 ))
o = ObjectIdentity ( 'SNMPv2-MIB' , 'sysUpTime' , 0 )
o = ObjectIdentity ( '[Link]-
[Link].0'

Tampaknya sederhana, tetapi untuk menggunakan masalah mulai:

dari impor [Link] *


o = ObjectIdentity ( '[Link].[Link].0' )
cetak ( o . ambilLabel ())
cetak ( o . getMibNode ())
cetak ( o . getMibSymbol ())
cetak ( o . getOid ())
mencetak ( o . prettyPrint ())
Tindak lanjut (panggilan terakhir yang paling baru):
File "<...> / oid_example.py", line 4, in <module>
cetak ([Link] ())
File "<...>/site-packages/pysnmp/smi/[Link]", baris 185,
en getLabel
elevate SmiError ('% s tidak sepenuhnya diinisialisasi' % self.__class)
.__. nama__)
[Link]: objek ObjectIdentity tidak ditemukan
diinisialisasi sepenuhnya

Tapi mengapa kesalahan ini? Contoh-contoh dalam dokumentasi PySNMP cukup


torpes dalam hal ini:

>>> dari [Link] impor *


>>> x = ObjectType ( ObjectIdentity ( 'SNMPv2-MIB' , 'sysDescr' , 0 ),
kotak Linux i386
>>> # ... memanggil pencarian MIB ...
>>> x [ 0 ] . prettyPrint ( )

Sangat penting untuk benar-benar mencari OID ini di MIB, karena banyak.
MIB. PySNMP dilengkapi dengan seluruh arsenal MIB, tetapi Anda harus memberitahunya di mana
menemukan mereka.

Dan untuk dokumentasi itu sangat disayangkan karena tidak pernah menunjukkan contoh
nyata!

Anda memiliki hak untuk mengganggu; Setelah saraf Anda tenang, ingatlah
apa itu produk OpenSource dan apa keuntungan yang didapatkan dengan akses ke kodenya.
Perintah 'ayuda' Python menunjukkan bahwa ada metode 'resolveWithMib'.

Metode ini mengambil objek "MibViewController" sebagai parameter.


Fungsi dari pengendali ini adalah menyelesaikan pencocokan "OID" / MIB.
Dokumentasi kelas "MibViewController" hampir tidak ada. Kelas ini mengambil sebuah
objek "MibBuilder" sebagai argumen saat dibuat.
Jadi kamu harus pergi melihat kelas "MibBuilder"

Tetapi pencarian kecil di pohon PySNMP menunjukkan bahwa tampaknya diperoleh


sebuah "MibViewController" dari mesin SNMP Engine.
Mesin adalah, dengan cara tertentu, jantung dari pustaka PySNMP yang memungkinkan Anda
berinteraksi dengan berbagai elemen protokol (pesan, host, komunitas, OID,
MIBS, dll.).

Ini dapat memiliki beberapa mesin untuk, misalnya, bekerja dengan beberapa MIB.

Kode kami menjadi:

dari impor [Link] *

se = SnmpEngine ()
mvc = se . getUserContext ( 'mibViewController' )
o resolveWithMib ( mvc )

o = ObjectIdentity ( '[Link].[Link].0' )
cetak ( o . getLabel ())
cetak ( o . getMibNode ())
cetak (o . getMibSymbol ())
cetak ( o . getOid ())
imprimir ( o . prettyPrint ())

Sayangnya, kami masih belum sampai di sana ...

Tindak lanjut (panggilan terakhir yang paling baru):


Berkas "<...> / PySNMP / oid_example.py", baris 7, di <modul>
[Link] (VCM)
Arsip "<...> / site-packages / pysnmp / smi / [Link]", baris 355,
dalam resolveWithMib
addMibCompiler ([Link],
AttributeError: objek 'NoneType' tidak memiliki atribut apa pun
mibBuilder

Pengendali tampilan mib tidak didefinisikan karena kita belum membuat "UserContext".
Solusi yang paling sederhana adalah, pada akhirnya, menciptakan sendiri kami
"MibViewController":

dari impor [Link] *


dari [Link] impor MibViewController

se = SnmpEngine ()
mvc = se . getUserContext ( 'mibViewController' )
si tidak mvc :
mvc = MibViewController ( ver getMibBuilder ())

o = ObjectIdentity ( '[Link].[Link].0' )
o resolveWithMib ( mvc )
cetak ( o . getLabel ())
cetak ( o . getMibNode ())
cetak ( o . getMibSymbol ())
cetak ( o . getOid ())
cetak ( o . prettyPrint ())

Dan itu saja!

('iso', 'org', 'dod', 'internet', 'mgmt', 'mib-2', 'sistem')


'sysUpTime')
MibScalar ((1, 3, 6, 1, 2, 1, 1, 3), TimeTicks ())
('SNMPv2-MIB', 'sysUpTime', (ObjectName ('0'),))
[Link].[Link].0
SNMPv2-MIB :: sysUpTime.

Pengontrol MIB menggunakan MIB PySNMP "generator" default yang menyimpan


versi "pythonized" dari MIBS di subfolder instalasi pysnmp: "pysnmp / smi /
mibs /". Jangan ragu untuk melihat-lihat.

Trabaja con tu propia MIB

Para MIB estándar, sabes cómo hacerlo. Pero dirás:

Ya, tetapi saya bekerja dengan MIB yang dipatenkan karena saya adalah seorang pembangun perangkat keras atau menggunakan
hardware spesifik pabrikan dan saya memerlukan MIB saya sendiri.
Tidak ada masalah, OID dapat melakukannya untuk Anda.

Mari kita anggap Anda memiliki MIB Anda sendiri, seperti di bawah ini, yang telahpengambilan dari tutorial ini
:

MAKINA_MIB DEFINICIONES :: = BEGIN

IMPORTACIONES
OBJEK TIPE, Integer32, NOTIFIKASI-TIPE, perusahaan
DARI SNMPv2-SMI
;

MakinaCorpus IDENTIFIKATOR OBJEK :: = {perusahaan 3}

dataValue OBJECT-TYPE
Sintaks Integer32
MAX-ACCESS hanya baca
Kondisi saat ini
DESCRIPCIÓN "Un conteo de muestra de algo".
:: = {MakinaCorpus 1}

dataDescription OBJETO DE TIPO


STRING OKTET SINTAKSIS
MAX-ACCESS hanya baca
STATUS saat ini
DESCRIPCIÓN "Una descripción de algo"
{MakinaCorpus 2}

testTrap JENIS_NOTIFIKASI
Kondisi saat ini
DESCRIPCIÓN "Notificación de prueba"
:: = {MakinaCorpus 3}
FIN

Secara umum, MIB dari para produsen disimpan di "perusahaan" OID: iso. org.
dod. Internet . pribadi Perusahaan ([Link].4.1)
Situs pemantau IP menunjukkan bahwa subnodo ".3" adalah kosong, jadi saya memilihnya untuk
menginstal Makina MIB sebelumnya, tetapi bisa mengambil subnodo yang sudah ada.

MakinaCorpus IDENTIFIER OBJEK :: = {perusahaan 3}

Sekarang perlu mengompilasi MIB ini denganPySMI. Biasanya pustaka ini diinstal
dengan PySNMP, jika tidak jalankan "pip install pysmi".
PySNMP dilengkapi dengan beberapa skrip, termasuk "build-pysnmp-mib" yang akan melakukan ini untuk kita.
conversión:

$ build-pysnmp-mib -o MAKINA_MIB.py MAKINA_MIB

Ini akan menghasilkan file "MAKINA_MIB.py" yang berisi kode Python yang
implementasikan MIB ini.

Namun, sejak versi 4.3 dari PySNMP, skrip "build-pysnmp-mib" telah menjadi
usang dan sudah tidak dikirim.

Untuk mengompilasi MIB Anda, Anda harus menggunakan skrip "[Link]", yang biasanya diinstal di
folder "/usr/local/bin"

$ /path/to/[Link]/path/to/ MAKINA_MIB # gunakan ./ MAKINA_MIB jika ada


di repositori yang benar untuk menghindari kesalahan mib tidak ditemukan
Repositori MIB sumber: file: /// path / to / MAKINA_MIB,
file: /// usr / share / snmp / mibs, [Link]
Meminta MIB yang gagal dari:
[Link]
Lokasi MIB yang ada / yang dikompilasi: [Link],
pysnmp_mibs
Direktori tujuan MIB yang dikompilasi: / rumah / <pengguna> / .pysnmp /
mibs
...
MIB dibuat / diperbarui: MAKINA_MIB
MIB precompilados prestados:
MIB yang diperbarui: SNMPv2-CONF, SNMPv2-SMI, SNMPv2-TC
MIB sumber hilang:
MIB ignoradas:
MIB fallidas:

Akhirnya, untuk membangun OID menggunakan yang terakhir ini, sekarang Anda harus menulis:
o = ObjectIdentity (( 1 , 3 , 6 , 1 , 4 , 1 , 3 , 1 ))
o addMibSource ( '/ jalur / ke / makina_mib / dot / py / folder ' )
o loadMibs ( "MAKINA_MIB" )
o resolveWithMib ( mvc )

mencetak ( o . dapatLabel ())


mencetak ( o . getMibNode ())
cetak ( o . getMibSymbol ())
cetak ( o . getOid ())
cetak ( o . prettyPrint ())
["iso","org","dod","internet","pribadi","perusahaan"]
'MakinaCorpus', 'dataValue')
MibScalar ((1, 3, 6, 1, 4, 1, 3, 1), Integer32 ())
('MAKINA_MIB', 'dataValue', ())
[Link].[Link]
MAKINA_MIB :: DataValue

Kita akan melihat saat menjalankan perintah dasar bahwa kita juga dapat menentukan langsung.
sumber ASN.1 al lieu de mengompilasi MIB. Sejak versi 4.3, PySNMP dapat melakukannya
secara otomatis dalam beberapa kasus.

Artikel lain sebelum memulai


Perintah "GET", "SET" dan "BULK" dari perpustakaan PySNMP memerlukan beberapa
parámetros:

Motor SNMP untuk digunakan


Pengaturan otentikasi, "komunitas" atau "pengguna"
Tipe transportasi yang digunakan (UDP), IPv4 atau IPv6 dan port (161 secara default)
Konteks eksekusi
Dan variabel yang harus dikelola (OID)

Mesin SNMP

PySNMP memungkinkan dialog dengan semua komponen SNMP melalui sebuah objek
Motor SNMP. Sudeskripsi lengkaptersedia dalam dokumentasi resmi.
Seringkali Anda hanya perlu menginstansikannya.

dari impor [Link] *


se = SnmpEngine ()

Pengaturan otentikasi

Parameter ini adalah:

Sebuah komunitas untuk protokol v1 dan v2


Seorang pengguna (dengan 5 parameter untuk masuk, kata sandi, kata sandi dari
algoritma enkripsi, komunikasi enkripsi garam, komunikasi algoritma
cifrado) dalam kasus protokol v3

Komunitas disediakan oleh kelas "CommunityData"

dari impor [Link] *


cv1 = CommunityData ( 'publik' , mpModel = 0 ) # SNMPv1
cv2 = CommunityData ( 'publik' , mpModel = 1 ) # SNMPv2c

Pengguna yang digunakan untuk koneksi melalui protokol v3 harus diinstansiasi ke


melalui kelas "UsmUserData" yang menerima 5 parameter:

nombre de usuario: inicio de sesión de usuario


authKey: contraseña
authProtocol: protocolo para encriptar la contraseña
Sebuah tuple yang menunjukkan jalur di MIB yang mendefinisikan protokol.

En "iso" org. dod. Internet . snmpV2. snmpModules. snmpFrameworkMIB.


snmprameworkAdmin. SnmpAuthProtocols »
Secara defaultprotokolOtentikasiHMACMD5usm»

privKey: la clave / la sal para el algoritmo de encriptación


privProtocol: el algoritmo de cifrado.
Sebuah tuple yang menunjukkan bahwa jalur di MIB yang mendefinisikan algoritme ini sedang turun
iso. org. dod. Internet. snmpV2. snmpModules. snmpFrameworkMIB.
[Link] , atau di tempat lain.
PySNMP menawarkan 6 algoritma:
ousmNoPrivProtocol, ditetapkan sebagai default jika tidak ada kunci yang terkait

ousmDESPrivProtocol, nilai default jika tidak ditentukan dan kunci


terkait
ousm3DESEDEPrivProtocol

ousmAesCfb128Protokol

ousmAesCfb192Protokol

ousmAesCfb256Protocol

Contoh:

u = UsmUserData ( 'userlogin' )
, authKey = 'authenticationkey'
, privKey = 'encryptionkey'
, privProtocol = usmAesCfb256Protocol )
cetak ( u )
UsmUserData (userName = 'userlogin', authKey = <AUTHKEY>,
privKey = <PRIVKEY>, authProtocol = (1, 3, 6, 1, 6, 3, 10, 1, 1, 2),
privProtocol = (1, 3, 6, 1, 4, 1, 9, 12, 6, 1, 2),
securityEngineId = '<DEFAULT>', securityName = 'userlogin')

Jenis-jenis transportasi

UDP di IPv4 atau IPv6:

Oleh karena itu, itu akan menjadi contoh salah satu dari 2 jenis transportasi ini:

TargetTransportUdp
TujuanTransportUdp6

Dua kelas ini menerima beberapa argumen:

Yang pertama adalah pasangan (alamat IP, port).


Alamat adalah deretan karakter, nama host atau alamat IP. Gunakan sebuah
entero.
Alamat IPv6 harus memenuhiRFC 1924 # bagian-3
waktu tunggu, dinyatakan dalam detik, secara default
un número máximo para reintentar, predeterminado
sebuah daftar label, sesuai denganRFC 3413 # bagian-4.1.4

Ejemplo:

t1 = UdpTransportTarget (( '[Link]' , 161 ))


t2 = Udp6TransportTarget (( '[Link]' , 161 ))
cetak ( t1 )
mencetak ( t2 )
UdpTransportTarget (('[Link]', 161), waktu_tunggu = 1, percobaan = 5,
tagList = b '')
Udp6TransportTarget (('2a00: 1450: 4007: 80e :: 200th', 161), waktu tunggu =
1, percobaan = 5, daftarTag = b ''

Konteks

Ini adalah konteks SNMP seperti yang didefinisikan diRFC 3411. # 3.3.1

Dengan SNMPv1, seorang agen hanya dapat mengelola satu MIB.


Tapi saat ini, beberapa perangkat dapat menangani banyak MIB, misalnya, sebuah
konverter ATM dengan beberapa kartu, masing-masing dengan basisnya sendiri.

Oleh karena itu, konteks memungkinkan untuk menunjukkan kepada subset MIB mana agen diarahkan.

Untuk membuat konteks, Anda perlu menginstansiasi kelas "ContextData".


Menerima 2 parameter:

ContextEngineId
O el contextName

OID dan TipeObjek

Kami telah membahas OID dalam bab sebelumnya.


Namun, ketika mengirim perintah melalui pustaka SNMP, itu dilakukan melalui
kelas TipeObjek. Objek standar mengenkapsulasi OID dan nilai aslinya (dalam kasus
sebuah perintah "SET") atau mengembalikan sebuah "GET".
Sebagai bagian dari GET, Anda hanya menyebutkan OID saat membuat instance "ObjectType",
tapi sebagai gantinya akan memiliki ObjectType dengan OID yang sama dan nilainya.

ot = ObjectType ( ObjectIdentity ( 'SNMPv2-MIB' , 'sysDescr' ), 'Linux


kotak i386
ot . resolveWithMib ( mvc )
mencetak ( ot )
SNMPv2-MIB :: sysDescr = Linux i386 box

Perintah "DAPATKAN"
Sekarang kita telah memeriksa semua elemen yang diperlukan untuk pemanggilan pesanan,
AKHIRNYA kita dapat menulis perintah GET pertama kita
Untuk mengirim pesan "DAPATKAN", gunakan fungsi "getCmd" yang disebutkan di atas.

Akhirnya, ketika Anda menjalankan perintah ini, Anda dapat meminta beberapa OID sekaligus.
Sintaksisnya adalah sebagai berikut:

[Link] ( snmpEngine ,authData ,transportTarget ,


contextData ,* varBinds ,** opciones )

Fungsi ini mengembalikan tuple yang terdiri dari 4 elemen:

errorIndication: Un valor considerado "True" si se produjo un error en el motor


errorStatus: valor considerado "verdadero" para un error de PDU
errorIndex: el índice de la variable que causó el error (comienza en 0)
varBinds: una tupla que contiene los valores devueltos por el comando en instancias
dari kelas "ObjectType"

Atau perintah berikut:

$ snmpget -v1 -c public [Link] sysLocation.0 sysDescr.0

Dapat dijalankan melalui kode Python berikut:


dari impor [Link] *

data = (
TipeObjek ( IdentitasObjek ( 'SNMPv2-MIB' , 'lokasiSistem' , 0 ))
TipeObjek ( IdentitasObjek ( 'SNMPv2-MIB' , 'sysDescr' , 0 ))
)

g = getCmd ( SnmpEngine ()
, CommunityData ( 'publik' , mpModel = 0 )
, UdpTransportTarget (( '[Link]' , 161 ))
, ContextData ()
, * data )

errorIndication , errorStatus , errorIndex , varBinds = next ( g )

jika indikasiKesalahan :
print ( errorIndication )
elif statusKesalahan :
print ( ' % s dan % s ' % (
errorStatus . prettyPrint (),
errorIndex y varBinds [ int ( errorIndex ) -
1 ] [ 0 ] o '?'
)

)
lain :
para varBind di varBinds :
cetak('=' . gabung([[Link]() untuk x di varBind]))
SNMPv2-MIB :: sysLocation.0 = Moscú, Rusia
SNMPv2-MIB :: sysDescr.0 = SunOS [Link] 4.1.3_U1 1 sun4m

Untuk menjalankannya dengan protokol "v2c", cukup ubah nilai parameter


mpModel = 1 di dalam objek komunitas.

Untuk menjalankannya dengan protokol "v3", ganti instance "CommunityData" dengan sebuah
instansi "UsmUserData".

Daftar darikomunitas dan pengguna yang tersediadi situs "[Link]" berada


tersedia diurl ini.
Contoh pengguna (usr-sha-des / SHA / authkey1 / DES / privkey1):

UsmUserData ( "usr-sha-des"
, authProtocol = usmHMACSHAAuthProtocol
, authKey = "authkey1"
, privProtocol = usmDESPrivProtocol
, privKey = "privkey1"

Perintah GetNEXT
Perintah "GetNEXT" dijalankan persis seperti perintah "get", dengan yang sama
parameter
Ambil elemen yang mengikuti OID yang diberikan sebagai argumen.
dari impor [Link] *
g = nextCmd ( SnmpEngine ()
, CommunityData ( 'public' , mpModel = 1 )
, UdpTransportTarget (( '[Link]' , 161 ))
, DataKonteks ()
, TipeObjek ( IdentitasObjek ( 'SNMPv2-MIB' , 'sysObjectID'
, 0 )))

errorIndication , errorStatus , errorIndex , varBinds = next ( g )

jika indikasiKesalahan :
print ( errorIndication )
elif errorStatus :
print ( ' % s dan % s ' % (
errorStatus . prettyPrint ()
, errorIndex y varBinds [ int ( errorIndex ) - 1
o '?'
)
)
lainnya :
para varBind di varBinds :
cetak ( '=' . bergabung ([ x . prettyPrint () untuk x dalam varBind ]))
SNMPv2-MIB :: sysUpTime.0 = 280102869

Seperti yang mungkin sudah Anda perhatikan, perintah tersebut mengembalikan sebuah "generator".
Jadi Anda dapat mengembalikan panggilan dengan fungsi "berikutnya" untuk mendapatkan yang berikutnya
artículo.
Ini memungkinkan Anda untuk mengunduh MIB lengkap dengan memodifikasi kode sebelumnya, setelah itu
variabel "g" membuat sebuah instance.

{"de la importación [Link] *":"dari impor [Link] *"}

g = nextCmd ( SnmpEngine ()
, DataKomunitas ( 'publik' , mpModel = 1 )
UdpTransportTarget (( '[Link]' , 161 ))
, ContextData ()
, TipeObjek ( IdentitasObjek ( 'SNMPv2-MIB' , 'sysObjectID'
, 0 )))

para errorIndication , errorStatus , errorIndex , varBinds en g :

if errorIndication :
["cetak ( indikasiKesalahan )"]
elif errorStatus :
cetak (' % s en % s ' % (
errorStatus . prettyPrint (),
errorIndex y varBinds [ int ( errorIndex ) - 1 ] [ 0 ] o '?'
)
)
lain :
para varBind di varBinds :
cetak ( '=' . gabung ([ x . tampilkanMenyenangkan () untuk x di
varBind ]))
SNMPv2-MIB :: sysUpTime.0 = 280140241
SNMPv2-MIB :: sysContact.0 = Laboratorium SNMP,info@[Link]
SNMPv2-MIB :: sysName.0 = [Link]
SNMPv2-MIB :: sysLocation.0 = Moscú, Rusia
SNMPv2-MIB :: sysServices.0 = 72
SNMPv2-MIB :: sysORLastChange.0 = 280140343
SNMPv2-MIB :: sysORID.1 = PYSNMP-MIB :: pysnmpObjects.1
SNMPv2-MIB :: sysORDescr.1 = comentario nuevo
SNMPv2-MIB :: sysORUpTime.1 = 123

Perintah "SET"
Perintah "SET" dijalankan persis seperti perintah "get", dengan yang sama
parameter
Kecuali bahwa ObjectType mengandung argumen kedua: nilai baru.

dari impor [Link] *

def tampilkan_barang ( ):

g = getCmd ( SnmpEngine ()
, CommunityData ( 'publik' , mpModel = 1 )
, UdpTransportTarget (( '[Link]' , 161 ))
, ContextData ()
, TipeObjek ( IdentitasObjek ( 'SNMPv2-MIB' ,
'sysORDescr' , 1 )))

errorIndication , errorStatus , errorIndex , varBinds = next ( g )

para varBind di varBinds :


cetak ('=' . gabung ([ x . cetakIndah () untuk x dalam
varBind ]))

# Tampilkan nilai awal


tampilkan_item ()
Menetapkan nilai baru
g = setCmd ( SnmpEngine ()
, UsmUserData ( "usr-sha-des"
, authProtocol = usmHMACSHAAuthProtocol
, authKey = "authkey1"
, privProtocol = usmDESPrivProtocol
, privKey = "privkey1" )
, UdpTransportTarget (( '[Link]' , 161 ))
, DataKonteks ()
, TipeObjek ( IdentitasObjek ( 'SNMPv2-MIB' , 'sysORDescr' ,
1 ), 'Halo dari Lannion menggunakan prosesor Kalray di Linux' ))

errorIndication , errorStatus , errorIndex , varBinds = next ( g )

cetak ( indikasiKesalahan , varBinds )

tampilkan_item ()
SNMPv2-MIB :: sysORDescr.1 = Ini adalah catatan baru saya
SNMPv2-MIB :: sysORDescr.1 = Hai dari Lannion menggunakan prosesor
Kalray di Linux

kesimpulan
Perintah dasar SNMP digunakan dengan cukup mudah setelah Anda memahaminya.
bagaimana mengkonfigurasi berbagai parameter yang dibutuhkan.

Bagian kedua dari inisiasi SNMP dan PySNMP ini seharusnya telah memberikan Anda:

Pemahaman global tentang elemen dasar dari pustaka PySNMP


Cara mengonversi MIB ASN.1 Anda ke kode Python untuk PySNMP
Cara membangun probe untuk perangkat lunak pemantauan Anda

Kita masih harus melihat beberapa elemen yang lebih canggih seperti:

Introduksi ke SNMP dengan Python:


PySNMP (Bagian 3) -Tabel
UntukGaël Pegliasco- dipublikasikan pada 07/04/2016, dipublikasikan pada 22/04/2016
SNMP adalah protokol pemantauan jaringan yang sangat populer secara universal. Ini adalah standar
digunakan oleh hampir semua perangkat jaringan. Ini memungkinkan Anda untuk memantau (memeriksa dan mengubah)
semua jenis perangkat keras, dari router hingga printer, dan bahkan beberapa
mesin kopi terhubung. Bagian ketiga dari tutorial ini menunjukkan kepada Anda cara mengelola data
dari meja.

introduksi
Tutorial ini mengajak Anda untuk menemukan pustaka Python PySNMP yang memungkinkan dialog
dengan bahan apa pun yang kompatibel dengan protokol dengan nama yang sama.
Pada bagian ketiga ini, kami akan menunjukkan cara untuk mengakses data bertipe 'tabel' dari baris perintah
komando dan dengan pustaka PySNMP.

Jika Anda tidak mengenal protokol SNMP, kami mengundang Anda untuk membacabagian
pertama dari tutorial ini yang Anda
akan mempersembahkan protokol SNMP, sifat dan kekurangan, dan akan memberikan kepadanya
alat dasar untuk mulai menggunakannya dan melepasnya. Tanpa pengetahuan awal ini,
bab ketiga ini mungkin terlihat sangat sulit untuk dipahami.

Jika Anda belum pernah menggunakan pustaka PySNMP, kami juga mengundang Anda untuk membacabagian
kedua dari
tutorial ini akan memberikan Anda konsep dasar untuk menggunakan protokol SNMP dalam Python.

Pada akhir bagian ketiga ini, Anda biasanya dapat:

Konsultasikan tabel data di baris perintah


Baca tabel data SNMP dengan Python

Meja-meja
Sebagian informasi MIB disediakan dalam bentuk tabel.

Misalnya, antarmuka jaringan dari sebuah server (eth0, wlan0, loopback).


Tabel-tabel ini diatur sebagai catatan. Setiap catatan atau baris dalam tabel berisi
varias piezas de información.
Rekam ini dapat diakses secara individu melalui indeksnya.

Ambil contoh dari entri "tabelJika, yang OID-nya adalah:

iso org. dod. Internet . mgmt. mib-2. interfaces. ifTable


[Link].[Link]

Definisi Anda tentang ASN.1 adalah:

Antarmuka tabel
Tabel Antarmuka berisi informasi tentang entitas
- antarmuka. Setiap sublapisan di bawah lapisan internetwork
- dari antarmuka jaringan dianggap sebagai antarmuka.
ifTable OBJEK TIPE
SINTAKSIS URUTAN IfEntry
MAX-ACCESS tidak dapat diakses
STATUS saat ini
DESCRIPCIÓN
Daftar entri
diberikan oleh nilai ifNumber ".
:: = {antarmuka 2}

jikaEntri OBJEK TIPE


SINTAKSIS IfEntry
MAX-ACCESS tidak dapat diakses
STATUS saat ini
DESCRIPCIÓN
Sebuah entri yang berisi informasi manajemen yang berlaku
ke antarmuka tertentu.
ÍNDICE {ifIndex}
:: = {ifTable 1}

IfEntry :: =
SECUENCIA {
ifIndex IndeksAntarmuka,
ifDescr DisplayString
ifType IANAifType,
ifMtu Integer32,
ifSpeed Gauge32,
ifAlamatFisik AlamatFisik,
ifAdminStatus INTEGER,
ifOperStatus INTEGER,
jikaPerubahanTerakhir WaktuTick,
ifInOctets Counter32,
ifInUcastPkts Counter32,
ifInNUcastPkts Counter32, - usang
ifInDiscards Counter32
ifInErrors Counter32,
ifInUnknownProtos Counter32,
ifOutOctets Counter32,
ifOutUcastPkts Counter32,
ifOutNUcastPkts Counter32, - usang
ifOutDiscards Counter32,
ifOutErrors Counter32,
ifOutQLen Gauge32, - usang
ifSpecific OBJECT IDENTIFIER - tidak lagi berlaku
}

Dibaca bahwa elemen "ifTable" adalah urutan elemen "ifEntry" dan bahwa setiap
elemen "ifEntry" diindeks oleh elemen "ifIndex".
Akhirnya, "ifEntry" itu sendiri adalah urutan dari banyak elemen seperti "ifDescr",
"ifType", "ifSpeed", etc.
Dengan kata lain, "ifTable" adalah sebuah matriks garis dari jenis "ifEntry" dengan banyak
kolom "ifDescr", "ifType", dll.

Representasi tabel 'ifTable', sumber '[Link]"


Kita bisa melihat ini lebih dekat dengan perintah SNMPWALK:

$ snmpwalk -v2c -c publik [Link] ifTable


IF-MIB :: ifIndex.1 = INTEGER: 1
IF-MIB :: ifIndex.2 = INTEGER: 2
IF-MIB :: ifDescr.1 = STRING: eth0
IF-MIB :: ifDescr.2 = STRING: eth1
IF-MIB :: ifType.1 = INTEGER: ethernetCsmacd (6)
IF-MIB :: ifType.2 = INTEGER: ethernetCsmacd (6)
IF-MIB :: ifMtu.1 = INTEGER: 1500
IF-MIB :: ifMtu.2 = INTEGER: 1500
IF-MIB :: ifSpeed.1 = Gauge32: 100000000
IF-MIB :: ifSpeed.2 = Gauge32: 100000000
IF-MIB :: ifPhysAddress.1 = CADENA: 0: 12: 79: 62: f9: 40
IF-MIB :: ifPhysAddress.2 = CADENA: 0: 12: 79: 62: f9: 41
IF-MIB :: ifAdminStatus.1 = INTEGER: arriba (1)
IF-MIB :: ifAdminStatus.2 = INTEGER: arriba (1)
IF-MIB :: ifOperStatus.1 = INTEGER: arriba (1)

Adalah mungkin untuk menemukan berbagai catatan dari tabel berkat indeks "ifIndex" dari
entradas "ifEntry". Aquí tenemos 2 valores para el índice: 1 y 2, por lo tanto, 2 registros.

Oleh karena itu, setiap kolom dari catatan "ifEntry" akan terasosiasi dengan indeksnya:

"IfDescr.1" dan "ifType.1" untuk catatan pertama.


"IfDescr.2" dan "ifType.2" untuk yang kedua, dan seterusnya.

Dengan cara ini, adalah mungkin untuk mengkonstruksi kembali semua rekaman melalui perintah
"snmpwalk" dan nilai indeksnya. Tapi itu melelahkan.
Perintah "snmptable" melakukan ini secara otomatis untuk Anda:

$ snmptable -v2c -c public [Link] ifTable


Tabel SNMP: IF-MIB :: ifTable

ifIndex ifDescr ifType ifMtu ifSpeed ifPhysAddress


1 eth0 ethernetCscmac 1500 100000000 0: 12: 79: 62: f9: 40
2 eth1 ethernetCsmacd 1500 100000000 0: 12: 79: 62: f9: 41

Ini bisa menjadi rumit ketika sebuah entri tabel diindeks oleh beberapa indeks.

Anda mungkin telah mencatat bahwa nilai indeks terletak di OID setiap "kolom". Ini adalah
sama ketika ada beberapa indeks, mereka terhubung dalam OID, saya biarkan Anda membacala
dokumentasi PySNMP di tabel, ituyang menjelaskan dengan cukup baik.

Tabel dengan PySNMP


PySNMP tidak menawarkan padanan untuk perintah "snmptable" untuk membaca tabel.

Tapi Anda bisa melakukannya dengan cara yang sangat sederhana menggunakan perintah "nextCmd" jika Anda mengkonfigurasinya

dengan benar.
Sebelum melihat cara melakukan bacaan ini dengan praktik baik, kita akan mencoba menjelajahi
berbagai elemen MIB "Antarmuka" OID (IF-MIB, ifTable) secara manual dan
kami akan mengembalikan daftar kamus, masing-masing dengan nilai dari masing-masing kolom
nodo "ifEntry".

Ini akan memungkinkan kita untuk lebih memahami mekanisme yang digunakan oleh PySNMP dan akan mengajarkan kita untuk
memanipulasi iterasi yang berurutan dari "nextCmd."

Setelah kita menerapkan solusi fungsional, kita dapat menerapkan beberapa


konfigurasi tambahan untuk menyederhanakan pembuatan daftar catatan kami.

Menggunakan perintah berikut, kita akan melihat semua elemen dari entri (IF-MIB, ifTable):

g = nextCmd ( SnmpEngine ()
, CommunityData ( 'publik' , mpModel = 1 )
, UdpTransportTarget (( '[Link]' , 161 )
, ContextData ()
ObjectType ( ObjectIdentity ( 'IF-MIB' , 'ifTable' ))
, lexicographicMode = False )

Aquí todavía agregamos la opción "lexicographiqueMode = False" que le dice al comando


dapatkanNext agar tidak melanjutkan menjelajahi elemen di luar yang ada di bawah OID ini.
Untuk membangun elemen "ifEntry" kami menggunakan perintah "getNext" seperti biasa:

Meja untuk berjalan


data = []
dIndex = {}

para errorIndication , errorStatus , errorIndex , varBinds en g :

jika indikasi kesalahan :


cetak ( indikasiKesalahan )
elif errorStatus :
cetak ( ' % s dan % s ' % (
errorStatus . prettyPrint (),
errorIndex y varBinds [ int ( errorIndex ) - 1 ] [ 0 ] o '?'
)
)
lainnya :
para varBind di varBinds :

cetak ( varBind )
oid = varBind [ 0 ]
value = varBind [ 1 ]

label = oid . getLabel ()


print ("Etiket:", etiket)
Simbol Mib:

Ini akan memberikan hasil yang mirip dengan ini:


Meja jalan
IF-MIB :: ifIndex.1 = 1
Etiket: ('iso', 'org', 'dod', 'internet', 'mgmt', 'mib-2'
["antarmuka","ifTable","ifEntry","ifIndex"]
Simbol Mib: ('IF-MIB', 'ifIndex', (IndexAntarmuka (1),))
IF-MIB :: ifIndex.2 = 2
Label: ('iso', 'org', 'dod', 'internet', 'mgmt', 'mib-2',
'interfaces', 'ifTable', 'ifEntry', 'ifIndex')
Simbol Mib: ('IF-MIB', 'ifIndex', (IndeksAntarmuka (2),))
IF-MIB :: ifDescr.1 = eth0
Label: ('iso', 'org', 'dod', 'internet', 'mgmt', 'mib-2',
["antarmuka","tabelIf","entriIf","deskripsiIf"]
Simbol Mib: ('IF-MIB', 'ifDescr', (IndeksAntarmuka (1),))
IF-MIB :: ifDescr.2 = eth1

Daftar ini menunjukkan kepada kita 2 hal:

Nomor ifEntry yang dimiliki setiap properti disediakan oleh


elemen terakhir dari tuple "Mib Symbol" InterfaceIndex (1) atau InterfaceIndex (2)
Nama properti disediakan oleh elemen terakhir dari Label
["iso","org","dod","internet","mgmt","mib-2","interfaces","ifTable","ifEntry","ifDescr"]

Jadi kita bisa membuat daftar setiap elemen "ifEntry" dalam sebuah kamus, dari
cara berikutnya:

key = str ( oid . getMibSymbol () [ - 1 ] [ 0 ])


jika bukan kunci di dIndex :
dIndex [ clave ] = {}
data. append ( dIndex [ kunci ])

dIndex [ kunci ] [ label [ - 1 ]] = str ( nilai . prettyPrint ())

Kode akhir menjadi sebagai berikut:

dari impor [Link] *


dari [Link] impor MibViewController

se = SnmpEngine ()
mvc = se . getUserContext ( 'mibViewController' )
si tidak mvc :
mvc = MibViewController ( ver getMibBuilder () )
#
# # [Link].[Link] ('iso', 'org', 'dod', 'internet', 'mgmt', 'mib-2',
'interfaces', 'ifTable')
oid_iftable = ObjectIdentity ( 'IF-MIB' , 'ifTable' )
oid_iftable . resolveWithMib ( mvc )

Cetak ("Root oid")


cetak ( oid_iftable . ambilOid ())
cetak ( oid_iftable . ambilLabel ())
cetak ( oid_iftable . getMibNode ())
cetak (oid_iftable . ambilSimbolMib ())
g = nextCmd ( SnmpEngine ()
, CommunityData ( 'publik' , mpModel = 1 )
, UdpTransportTarget (( '[Link]' , 161 ))
, DataKonteks ()
, JenisObjek ( IdentitasObjek ( 'IF-MIB' , 'ifTabel' ))
, lexicographicMode = False )

Meja untuk berjalan


data = []
dIndex = {}

para errorIndication , errorStatus , errorIndex , varBinds en g :

jika ada indikasi kesalahan :


cetak ( indikasiKesalahan )
elif statusKesalahan :
cetak ( ' % s dan % s ' % (
errorStatus . prettyPrint (),
errorIndex y varBinds [ int ( errorIndex ) - 1 ] [ 0 ] o '?'
)
)
lain :
para varBind en varBinds :

cetak ( varBind )

oid = varBind [ 0 ]
value = varBind [ 1 ]

label = oid . dapatkanLabel ()


cetak ("Label:", label)
Cetak ("Simbol Mib:", [Link]())
key = str ( oid . getMibSymbol () [ - 1 ] [ 0 ])

jika bukan kunci di dIndex :


dIndex [ clave ] = {}
datos . append ( dIndex [ clave ] )

dIndex [ kunci ] [ label [ - 1 ]] = str ( nilai .


prettyPrint ())

Cetak elemen
untuk ind, elemen di enumerate (data):
Cetakan ( "Artikel % s " % ( str ( ind + 1 ), ))
untuk kunci, nilai dalam artikel. artikel ():
print ( " % s : % s " % ( kunci , nilai ))

Dengan hasil akhir berikut untuk elemen "ifEntry":

Pencetakan artikel
Artículo 1
ifOutUcastPkts: 11277302
ifInErrors: 0
ifInUcastPkts: 22554581
ifOutErrors: 0
ifOutDiscards: 0
ifInNUcastPkts: 2506064
ifType: 'ethernetCsmacd'
jikaSpesifik: SNMPv2-SMI :: nolTitikNol
ifSpeed: 100000000
ifPhysAddress: 00: 12: 79: 62: f9: 40
ifOutNUcastPkts: 1253033
ifOperStatus: 'up'
ifIndex: 1
ifInOctets: 275667056
ifDescr: eth0
ifLastChange: 150603818
ifInDiscards: 0
ifOutOctets: 125303333
ifAdminStatus: 'arriba'
ifInUnknownProtos: 125301
ifMtu: 1500
ifOutQLen: 0
Artikel 2
ifOutUcastPkts: 11277305
ifInErrors: 0
ifInUcastPkts: 22554583
ifOutErrors: 0
ifOutDiscards: 0
ifInNUcastPkts: 2506065
ifType: 'ethernetCsmacd'
ifSpecific: SNMPv2-SMI :: zeroDotZero
ifSpeed: 100000000
ifPhysAddress: 00: 12: 79: 62: f9: 41
ifOutNUcastPkts: 1253034
ifOperStatus: 'up'
ifIndex: 2
ifInOctets: 250606431
ifDescr: eth1
ifLastChange: 249303192
ifInDiscards: 0
ifOutOctets: 125303346
ifAdminStatus: 'arriba'
ifInUnknownProtos: 125304
ifMtu: 1500
ifOutQLen: 0

Teknik ini berguna untuk memahami bagaimana catatan diorganisir dalam tabel SNMP dan
untuk membangun kembali secara manual.
Tapi perintah "getNext" membuatnya lebih mudah untuk memulihkannya dengan jauh lebih sederhana saat
menunjukkan informasi apa yang ingin kita baca di entri "ifEntry" untuk masing-masing dari mereka
panggilan daripada membacanya satu per satu, seperti sebelumnya.

Untuk itu, cukup berikan OID yang kita minati hanya sekali:

nextCmd ( SnmpEngine (),


CommunityData ( 'publik' , mpModel = 0 )
UdpTransportTarget (( '[Link]' , 161 ))
ContextData ()
TipeObjek ( IdentitasObjek ( 'IF-MIB' , 'ifDescr' ))
ObjectType ( ObjectIdentity ( 'IF-MIB' , 'ifType' ))
TipeObjek ( IdentitasObjek ( 'IF-MIB' , 'ifMtu' ))
ObjectType ( ObjectIdentity ( 'IF-MIB' , 'ifSpeed' ))
TipeObjek ( IdentitasObjek ( 'IF-MIB', 'jenisIf'))
ObjectType ( ObjectIdentity ( 'IF-MIB' , 'ifPhysAddress' ))
modeKamus = Salah

Program kami menjadi:

dari impor [Link] *

item = 0

para errorIndication , \
errorStatus , \
errorIndex , \
varBinds dan nextCmd (SnmpEngine (),
CommunityData ( 'publik' , mpModel = 0 )
UdpTransportTarget (( '[Link]' ,
161 ))
ContextData ()
ObjectType ( ObjectIdentity ( 'IF-MIB' ,
'ifDescr' ))
TipeObjek ( IdentitasObjek ( 'IF-MIB' ,
'ifType' )),
ObjectType ( ObjectIdentity ( 'IF-MIB', 'ifMtu'
)),
JenisObjek ( IdentitasObjek ( 'IF-MIB' ,
'ifSpeed' ))
TipeObjek ( IdentitasObjek ( 'IF-MIB' ,
'ifType' ))
ObjectType ( ObjectIdentity ( 'IF-MIB' ,
'ifPhysAddress' ))
lexicographicMode = False ):

imprimir ( "Artículo" , artículo )


item + = 1

jika indikasi kesalahan :


cetak ( indikasiKesalahan )
jeda
elif errorStatus :
cetak ('% s dan % s' % (
errorStatus . prettyPrint (),
errorIndex y varBinds [ int ( errorIndex ) - 1 ] [ 0 ] o
'?'
)
)
pausa
lain :
para varBind di varBinds :
cetak ( '=' . gabung ([ x . prettyPrint () untuk x di
varBind ]))
Dengan hasil berikut:

Artikel 0
IF-MIB :: ifDescr.1 = eth0
IF-MIB :: ifType.1 = 'ethernetCsmacd'
IF-MIB :: ifMtu.1 = 1500
IF-MIB :: ifSpeed.1 = 100000000
IF-MIB :: ifType.1 = 'ethernetCsmacd'
IF-MIB :: ifPhysAddress.1 = 00: 12: 79: 62: f9: 40
Artikel 1
IF-MIB :: ifDescr.2 = eth1
IF-MIB :: ifType.2 = 'ethernetCsmacd'
IF-MIB :: ifMtu.2 = 1500
IF-MIB :: ifSpeed.2 = 100000000
IF-MIB :: ifType.2 = 'ethernetCsmacd'
IF-MIB :: ifPhysAddress.2 = 00: 12: 79: 62: f9: 41

kesimpulan
Kami melihat di bagian ketiga ini bagaimana mengelola tabel SNMP dengan baris perintah atau
perpustakaan Python.
PySNMP tidak memiliki perintah khusus untuk menjelajahi tabel, jadi kita harus
daftar semua elemennya melalui "getNext".

Untungnya, adalah mungkin untuk memulihkan semua properti dari sebuah entri melalui sebuah
panggilan tunggal ke "getNext", yang sangat menyederhanakan rekonstruksi catatan
dari tabel.

Dalam bagian keempat tutorial ini, kita akan belajar bagaimana cara membuat agen.

Anda mungkin juga menyukai