PDA

View Full Version : Tìm hiểu công cụ Net-SNMP


sutrinh
07-07-2007, 12:25 AM
Sau đây mình xin giới thiệu một công cụ SNMP đơn giản quản lý bằng dòng lệnh - công cụ Net-SNMP (viết bằng Perl). Để gỏ lệnh thì vào Command Prompt của Windows hoặc Console trong Linux, nhớ cài đặt công cụ trước nhe :D .


I. Giới thiệu công cụ net-snmp:

• Nguồn gốc của công cụ Net-SNMP khởi đầu từ năm 1992 tại đại học Carnegie-Mellon được phát triển bởi nhóm mạng CMU (trưởng nhóm là Steve Waldbusser). Nhóm này đã phát triển một giao thức quản lý mạng mới bao gồm một số thư viện hỗ trợ các câu lệnh quản lý đơn giản. Từ đó, giao thức này ngày càng được phát triển.
• Davis-Wes Hardaker đưa ra một định nghĩa cho tập MIB về quản lý tài nguyên host trong mạng (host resources MIB). Ông ta cũng phát triển thêm một số đoạn script để báo cáo, ghi nhận kết quả thực hiện.
• Năm 1995, mã nguồn của công cụ này được phát triển ngày càng rộng rãi và từ đó, dự án UCD ra đời.
• Dave-Shield tại đại học Liverpool (Anh) sau đó đã tìm cách sử dụng UCD-SNMP để giám sát máy in nội bộ, phát hiện một số lỗi trong mã nguồn và đưa ra một số bản vá thích hợp với hệ thống HP-UX.
• Một nhà quản trị mạng hệ thống người Đan Mạch tên Niels Baggensen phát triển thêm một số bản vá tương khả năng thực thi trên hệ điều hành Solaris.
• Năm 1998, IETF thông qua SNMP version 3 có hỗ trợ các phương thức mã hóa.
• Trước năm 2000, dự án có tên là UCD-SNMP sau đó được đổi tên thành Net-SNMP.

Đây là công cụ được viết bằng ngôn ngữ Perl sử dụng dòng lệnh để quản lý. Có thể nói đây là công cụ SNMP cơ bản nhất cho việc quản trị mạng thông qua các dòng lệnh truy vấn, rất phù hợp với việc làm quen giao thức SNMP, sau đây là chi tiết cách cài đặt, cấu hình và sử dụng công cụ Net-SNMP.

II. Cài đặt, cấu hình và sử dụng:
1. Cài đặt, cấu hình:

Có thể download các bản cài đặt từ một trong hai địa chỉ sau:

http://www.net-snmp.org/download/
ftp://ftp.net-snmp.org/pub/sourceforge/net-snmp/

a. Trên Windows:

Cài đặt dịch vụ SNMP:

Mặc định hệ điều hành Windows không cài dịch vụ hỗ trợ cho giao thức SNMP, để cài thêm ta Vào Control Panel, double click vào Add Remove Programs -> Add Remove Window Components. Chọn Management and Monitoring Tools.

http://i202.photobucket.com/albums/aa89/thuthuattinhoc/1-2.jpg http://i202.photobucket.com/albums/aa89/thuthuattinhoc/2-2.jpg

Khi khi cài, ta sẽ có thêm 2 dịch vụ hỗ trợ SNMP là SNMP Service và SNMP Trap Service.

Cấu hình community trên các dịch vụ của SNMP:

Mở dịch vụ SNMP Service vàoTab security, tab này cho phép thiết lập community có ý nghĩa giống như mật khẩu giữa thiết bị quản lý và thiết bị cần quản lý.

Đối với mỗi Community sẽ đi kèm với quyền (rights) khác nhau:

READ-ONLY: chỉ cho phép chỉ đọc, không thiết lập lại thông số được.
READ-WRITE: cho phép thiết lập lại thông số.
READ-CREATE: cho phép tạo ra thông số
NOTIFY: dùng cho cơ chế trapping.
NONE: community không có quyền gì hết.

Đó là thiết lập quyền phía người dùng, thật ra thì bản thân mỗi tham biến cũng có quyền của riêng nó. Ví dụ: đối với tham biến về thời gian UpTime của hệ thống thì ta không set giá trị lại được. Mặt khác, đối với tham biến system.sysContact thì ta có thể đặt lại giá trị được.
http://i202.photobucket.com/albums/aa89/thuthuattinhoc/3-2.jpg

Sau khi cấu hình dịch vụ, cần restart lại dịch vụ.

b. Trên Linux:

Có thể dùng gói cài thêm hoặc dùng công cụ Net-SNMP có sẵn trong một số distro Linux.
Sử dụng gói cài:
Giải nén, tạo liên kết mềm với net-snmp:
#cd
# tar -xvzf net-snmp-5.0.2.tar.gz
#ln -s net-snmp-5.0.2 net-snmp
#cd ~/net-snmp
#./configure
(SNMPv1 mặc định được sử dụng)
Biên dịch:
#make
Cài đặt:
#make install

Nên thiết lập thêm biến môi trường:
PATH=$PATH:/usr/local/bin:/usr/local/sbin
MIBS=ALL
export PATH MIBS

Sử dụng dịch vụ có sẵn trong Linux::D

Ta có thể sử dụng dịch vụ SNMP và công cụ Net-SNMP có sẵn của Linux. Mặc định thì dịch vụ SNMP không được cài trên Linux nên phải cài thêm vào. Đối với distro Fedora Core 4 thì cài thêm trong mục System Tools/snmpd. Sau khi cài thì sẽ có thêm hai dịch vụ là snmpd và snmptrapd.

Khác với trong Windows, nếu ta muốn thiết lập community cho dịch vụ SNMP thì phải sữa lại file cấu hình /etc/snmp/snmpd.conf như sau:

http://i202.photobucket.com/albums/aa89/thuthuattinhoc/4-2.jpg

Sau mỗi lần chỉnh sữa file cấu hình thì gỏ lệnh service snmpd restart để khởi động lại dịch vụ SNMP ứng với lần chỉnh sữa mới.

Sau khi cấu hình xong thì sử dụng dòng lệnh để quản lý. Phần này giống như trong windows, được trình bày ở mục 2 tiếp theo.

2. Sử dụng:
Một số lệnh quản lý dùng giao thức SNMP, chú ý các câu lệnh gỏ vào được in đậm và nghiêng trong mỗi ví dụ, chữ nghiêng không tô đậm là kết quả xuất ra:

a. snmpget:
Lệnh snmpget được sử dụng để lấy dữ liệu từ một host nào đó bằng cách cung cấp tên host, thông tin xác thực và một OID.

Cú pháp:

snmpget [-Cf] [options...] <hostname> {<community>} [<objectID> ...]

Trong đó:

[-Cf]: Không sửa lỗi và thử lại request
[options]:
-h:thông tin giúp đỡ
-H:hiển thị file cấu hình
-V: hiển thị version
-v1|2c|3: chỉ định versions sử dụng.
-c: chuỗi community.
-r: số lần thử lại nếu có lỗi.
-t: đặt thời gian timeout.
-d: in dữ liệu vào ra dạng thập lục phân.
-m MIB[:…]: nạp danh sách file MIB.
-M DIR[:…]: tìm vị trí thư mục của các file MIB.
Đối với SNMP version 3:
-a: thiết lập giao thức xác thực (SHA, MD5).
-x: thiết lập giao thức bảo mật (DES).
-l: cấp độ bảo mật.
Ví dụ:
Giả sử ta muốn đếm số tiến trình đang chạy trên một host nào đó trong mạng thì dùng lệnh sau:
http://i202.photobucket.com/albums/aa89/thuthuattinhoc/5-2.jpg
Xem phiên bản Net-SNMP đang sử dụng:

snmpget –V
NET-SNMP version: 5.4

b. snmpgetnext:
Lệnh snmpgetnext được sử dụng giống như lệnh snmpget nhưng lấy thông tin ở oid tiếp theo trong cây mib của dữ liệu. Thay vì trả về dữ liệu của oid yêu cầu, nó sẽ trả về oid kế tiếp và giá trị của nó.
Cú pháp:

snmpget [-Cf] [options...] <hostname> {<community>} [<objectID> ...]
Các tùy chọn giống lệnh snmpget.

Ví dụ:
Dùng lệnh snmpgetnext để lấy giá trị tham biến system.sysName đứng liền sau tham biến system.sysContact

snmpgetnext -v 2c -c public1 localhost system.sysContact.0
SNMPv2-MIB::sysName.0 = STRING: SUTRINH

c. snmpwalk:

Là tập hợp liên tiếp nhiều câu lệnh snmpgetnext. Thay vì lấy một giá trị vô hướng cụ thể nào đó như snmpget (hoặc snmpgetnext), snmpwalk lấy về một bảng tập các tham biến. Để dễ hình dung, ta hiểu các lệnh snmpget và snmpgetnext là lấy về một nút lá trong cấu trúc cây còn snmpwalk là lấy về một nhánh trong cây. Nó là tập hợp liêp tiếp các lệnh snmpgetnext cho đến hết giới hạn của nhánh MIB (tham biến đầu tiên thì dùng snmpget).

Cú pháp:

snmpwalk [options...] <hostname> {<community>} [<objectID> ...]

Trong đó:

Các tùy chọn tương tự như trong lệnh snmpget nhưng không có tùy chọn –Cf .

Ví dụ:

Lấy về thông tin tên các chương trình đã được cài trên một thiết bị nào đó:

snmpwalk -v 2c -c public1 localhost
host.hrSWInstalled.hrSWInstalledTable.hrSWInstalle dEntry.hrSWInstalledName
HOST-RESOURCES-MIB::hrSWInstalledName.1 = STRING: "Net-SNMP 5.4.0"
HOST-RESOURCES-MIB::hrSWInstalledName.2 = STRING: "Adobe Flash Player 9 ActiveX"
HOST-RESOURCES-MIB::hrSWInstalledName.3 = STRING: "SolarWinds Engineers Edition"
HOST-RESOURCES-MIB::hrSWInstalledName.4 = STRING: "WinRAR archiver"
HOST-RESOURCES-MIB::hrSWInstalledName.5 = STRING: "Free eXPert PDF Reader"
HOST-RESOURCES-MIB::hrSWInstalledName.6 = STRING: "VMware Workstation"
HOST-RESOURCES-MIB::hrSWInstalledName.7 = STRING: "Java(TM) SE Runtime Environme
nt 6 Update 1"
HOST-RESOURCES-MIB::hrSWInstalledName.8 = STRING: "Java(TM) SE Development Kit 6
Update 1"
HOST-RESOURCES-MIB::hrSWInstalledName.9 = STRING: "Microsoft Office Professional
Edition 2003"

d. snmptalble:

Lệnh snmptable dùng để hiển thị một SNMP table. Thật khó khi xem xét dữ liệu xuất ra từ lệnh snmpwalk, lệnh snmptable cho phép dữ liệu xuất ra dưới dạng dễ nhìn hơn.

Cú pháp:

snmptable [options...] <hostname> {<community>} [<objectID> ...]

Trong đó:
Các tùy chọn tương tự như snmpget và có thêm một số tùy chọn khác như:
-Cw <W>: in ra bảng trong chiều rộng W kí tự
-Cf <F>: in ra một bảng ranh giới F (F delimited table)
-Cb: các trường có tên ngắn gọn
-CB: không sử dụng GETBULK request
-Ci: in ra giá trị index
-Ch: chỉ in ra các cột header
-CH: không in ra các cột header

Ví dụ:

Khác với lệnh snmpwalk, lệnh snmptable sẽ hiển thi dưới dạng dễ nhìn hơn và có thêm một số tùy chọn hỗ trợ cho việc trình bày kết quả. Mặt khác, lệnh snmpwalk có thể lấy về một tập các thông số ngay khi cả gốc của nhánh con đó không thật sự là một bảng. Ví dụ: nếu ta sử dụng lệnh

snmptable -v 2c -c public1 localhost host.hrSWInstalled.hrSWInstalledTable.hrSWInstalle dEntry.hrSWInstalledName


Thì sẽ không thể lấy được kết quả, vì bảng thân hrSWInstalledName không tổ chức dưới dạng bảng.

snmptable -v 2c -c public1 localhost host.hrSWInstalled.hrSWInstalledTable
SNMP table: HOST-RESOURCES-MIB::hrSWInstalledTable
hrSWInstalledIndex hrSWInstalledName hrSWIns
talledID hrSWInstalledType hrSWInstalledDate
1 "Net-SNMP 5.4.0" SNMPv2-SMI::zer
oDotZero application 2007-6-29,14:48:4.0
2 "Adobe Flash Player 9 ActiveX" SNMPv2-SMI::zer
oDotZero application 2007-6-29,13:32:8.0
3 "SolarWinds Engineers Edition" SNMPv2-SMI::zer
oDotZero application 2007-6-29,11:31:30.0
4 "WinRAR archiver" SNMPv2-SMI::zer
oDotZero application 2007-6-29,10:54:8.0
5 "Free eXPert PDF Reader" SNMPv2-SMI::zer
oDotZero application 2007-6-27,15:46:58.0
6 "VMware Workstation" SNMPv2-SMI::zer
oDotZero application 2007-6-29,11:34:2.0
7 "Java(TM) SE Runtime Environment 6 Update 1" SNMPv2-SMI::zer
oDotZero application 2007-6-29,11:24:30.0
8 "Java(TM) SE Development Kit 6 Update 1" SNMPv2-SMI::zer
oDotZero application 2007-6-29,11:22:32.0
9 "Microsoft Office Professional Edition 2003" SNMPv2-SMI::zer
oDotZero application 2007-6-29,10:51:16.0

snmptable -v 2c -c public1 localhost host.hrSWInstalled.hrSWInstalledTable.hrSWInstalle dEntry.hrSWInstalledName
Was that a table? HOST-RESOURCES-MIB::hrSWInstalledName

e. snmpset:

Lệnh snmpset được dùng để thiết lập thông tin cho host nào đó. Với mỗi tham biến muốn thiết lập, thì cần phải cung cấp OID, kiểu dữ liệu và dữ liệu muốn thiết lập cho nó.

Cú pháp:

snmpset [options...] <hostname> {<community>} [<objectID> <type> <value>...]

Trong đó:

Các tùy chọn khác giống với lệnh snmpget, và có thêm tùy chọn về kiểu dữ liệu: i, u, t, a, o, s, x, d, b, n.
i: INTEGER.
u: unsigned INTEGER.
t: TIMETICKS.
a: IPADDRESS.
o: OBJID.
s: STRING.
x: HEX STRING.
d: DECIMAL STRING.
b: BITS.
U: unsigned int64.
I: signed int64.
F: float.
D: double.

Ví dụ:

Giả sử cần thiết lập giá trị của tham biến system.sysLocation.0 từ “PTIT” sang “HVCNBCVT”. Lưu ý quyền của community phải là READ-WRITE. Nếu ta dùng community là public1 thì không set được vì community của public là READ-ONLY nên phải dùng public2 (READ-WRITE).

snmpget -v 2c -c public1 localhost system.sysLocation.0
SNMPv2-MIB::sysLocation.0 = STRING: PTIT

snmpset -v 2c -c public1 localhost system.sysLocation.0 s "HVCNBCVT"
Timeout: No Response from localhost

snmpset -v 2c -c public2 localhost system.sysLocation.0 s "HVCNBCVT"
SNMPv2-MIB::sysLocation.0 = STRING: HVCNBCVT

snmpget -v 2c -c public1 localhost system.sysLocation.0
SNMPv2-MIB::sysLocation.0 = STRING: HVCNBCVT

f. snmptranslate:

Lệnh snmptranslate là dùng để chuyển một hay nhiều giá trị OID của các đối tượng SNMP từ dạng chữ thành dạng số và ngược lại, ngoài ra cũng có thể dùng nó để tìm kiếm hoặc xem thông tin thêm về oid.

Cấu trúc lệnh:

snmptranslate [options] [<objectID>]

Trong đó:

-h: Thông tin về giúp đỡ
-V: Version
-m <MIBS>: Sử dụng danh sách MIBS thay cho danh sách mib mặc định.
-D <TOKEN[,TOKEN,...]>: Cho phép debug thông điệp snmplib.
-M <MIBDIRS>: sử dụng MIBDIRS là địa chỉ tìm kiếm mibs.
-w <width>: độ rộng của cây và chi tiết lúc xuất ra
-T <TRANSOPTS>: In ra một hay nhiều MIB symbol reports.
Giá trị của TRANSOPTS:
B: In ra tất cả những đối tuợng nào so khớp với mẫu.
d: In ra đầy đủ chi tiết OID đã cho.
p: In ra định dạng cây cho symbol table.
a: In ra mã Ascii cho symbol table.
l: Cho phép đánh dấu OID report.
o: Cho phép OID report.
s: Cho phép dấu chấm khi report.
t: Cho phép report hậu tố theo định dạng luân phiên.
-P <MIBOPTS>
Giá trị của MIBOPTS:
u: cho phép sử dụng gạch chân trong mib symbols.
c: không cho phép sử dụng "--" để ghi chú giới hạn.
d: lưu mô tả của các đối tượng mib.
e: Tắt mib errors về những xung đột MIB symbols
w: Bật cảnh báo về những xung đột MIB symbols
W: Bật cảnh báo chi tiết về những xung đột MIB symbols
R: Thay MIB symbols từ module cuối cùng
-O <OUTOPTS>
Giá trị của OUTOPTS:
n: In ra OID theo số.
e: In ra số kiểu enum.
E: Tránh dấu ngoặc kép từ chuỗi trích dẫn.
X: Mở rộng dạng index
b: Không can thiệp vào sự giảm index.
q: Xuất ra ngắn gọn cho sự phân tách dễ dàng.
f: In ra đầy đủ oid.
s: Chỉ in ra symbol cuối cùng của oid.
S: In ra MIB module-id cộng với thành phần cuối cùng.
t: In ra timeticks dưới dạng số nguyên.
v: Chỉ in ra giá trị (not OID = value).
T: In ra text có thể đọc được với chuỗi hex.
-I <INOPTS>
Giá trị của INOPTS:
R: Thực hiện truy cập random đến oid labels.
r: Không kiểm tra giá trị hợp lệ cho range/type.
b: Thực hiện so khớp để tìm MIB node

Ví dụ:

Sử dụng các tùy chọn để hiển thị đường dẫn đầy đủ từ nút gốc đến tham biến sysUpTime.

snmptranslate -Of SNMPv2-MIB::system.sysUpTime.0
.iso.org.dod.internet.mgmt.mib-2.system.sysUpTime.sysUpTimeInstance
snmptranslate -On SNMPv2-MIB::system.sysUpTime.0
.1.3.6.1.2.1.1.3.0
snmptranslate -OT SNMPv2-MIB::system.sysUpTime.0
DISMAN-EVENT-MIB::sysUpTimeInstance

g. snmptrap:

Lệnh snmptrap được sử dụng để gửi đi những dấu hiệu bất thường đến management stations.

Cú pháp:

snmptrap [options...] <hostname> {<community>} [<trap parameters> ...]

Trong đó:

Các tùy chọn khác giống với lệnh snmpget, tuy nhiên nó không có tùy chọn –Cf.

Ví dụ: (chưa làm được)

h. snmpstatus:

Lệnh snmpstatus dùng để lấy các thông tin thống kê về trạng thái của các thực thể mạng.

Cú pháp:

snmpstatus [-Cf][options...] <hostname> {<community>}

Trong đó:

Các tùy chọn giống với các tùy chọn của lệnh snmpget.

Ví dụ:

Hiển thị trạng thái chung của localhost:

snmpstatus -v 2c -c public1 localhost
[UDP: [127.0.0.1]:161]=>[Hardware: x86 Family 6 Model 8 Stepping 10 AT/AT COMPATIBLE - Sof
tware: Windows Version 5.2 (Build 3790 Uniprocessor Free)] Up: 1:57:55.96
Interfaces: 4, Recv/Trans packets: 4214/2055 | IP: 2996/2032
1 interface is down!

i. snmpdf:

Lệnh snmpdf dùng để kiểm tra không gian của đĩa ở một máy ở xa bằng cách khám phá hrStorageTable của HOST-RESOURCES-MIB hoặc dskTable của UCD-SNMP-MIB . Mặc định thì hrStorageTable được ưu tiên vì nó thường chứa nhiều thông tin, tuy nhiên có thể dùng tùy chọn –Cu để chuyển sang sử dùng the dskTable.

Cú pháp:

snmpdf [-Cu] [options...] <hostname> {<community>}

Trong đó:

Các tùy chọn khác giống với lệnh snmpget, tuy nhiên nó không có tùy chọn –Cf. Ngoài ra còn có thêm:
-Cu Sử dụng UCD-SNMP dskTable để lấy thông tin.

Ví dụ:
Tương tự như lệnh df trong Linux, lệnh snmpdf cho biết thông tin về các phân vùng của host.

snmpdf -v 2c -c public1 localhost
Description size (kB) Used Available Used%
A:\ 0 0 0 0%
C:\ Label:Windows2003 Serial Number 8c1fefad 18787984 7014404 11773
580 37%
G:\ 0 0 0 0%
H:\ Label:SU_D03THA1 Serial Number 79212b6 1035888 1028352 753
6 99%
Z:\ 0 0 0 0%
Virtual Memory 635072 176576 458496 27%
Physical Memory 261568 103168 158400 39%


Chú ý: các thông số mình chỉ ghi theo lý thuyết nên chưa kiểm tra hết các trường hợp. Có lẽ bạn sẽ thắc mắc tại sao gỏ lệnh làm chi cho mắc công. Thứ nhất, thường cái gì miễn phí thì hơi "mắc công". Hơn nữa, đây là công cụ cơ bản giúp bạn hiểu rỏ thêm về giao thức này. Các bài sau, mình sẽ post thêm hướng dẫn một vài công cụ dễ sử dụng hơn như MRTG, Cacti, Solarwinds, HPOpenView,...

Rất vui được trao đổi. bibi!:)

PS: hix, cần gấp 2 quyển này::rolleyes:

1) RMON: Remote Monitoring of SNMP-Managed LANsby David T. Perkins
464 pages 1 edition (September 17, 1998)
Published by Prentice Hall
ISBN: 0130961639

2) LAN Management With SNMP and RMON
by Gilbert Held
371 pages (August 1996)
Published by John Wiley & Sons
ISBN: 0471147362

sutrinh
07-07-2007, 02:50 PM
Không ai hướng ứng hết! Buồn quá. Không post nữa.

boycold83
08-20-2007, 02:12 PM
Chào Bạn!
HIện tại mình đang nghiên cứu về SNMP. Mình dùng MRTG để hiển thị kết qủa ra giao diện Web. Bây giờ mình đang xây dựng server đo kiểm chất lượng của đường truyền ADSL. Mình đang cần chuyển file ".log" sang dạng file ".png" hoặc file dạng html.
Ko biet co chuong trinh nao ko? HInh như trong MRTG có chương trình chuyển. Tuy nhiên trong window nó lại ko hỗ trợ.

sutrinh
08-20-2007, 06:54 PM
Chào bạn.

Mình đang cần chuyển file ".log" sang dạng file ".png" hoặc file dạng html.

Mình chưa hiểu câu này cho lắm. Bạn cần chuyển thế để làm gì? Có phải ý bạn định nói là chuyển từ file cấu hình sang file html hiển thị kết quả phải không? Nếu thế thì bạn xem bài này nhé:
http://www.adminviet.net/forum/showthread.php?t=1571
Chào bạn :-)

raulanh
09-21-2008, 09:52 AM
Cho mình hỏi có ai sử dụng được lệnh snmptrap không vậy,chỉ cho mình với.Thanks!