Simple Network Management Protocol
간이 망 관리 프로토콜(Simple Network Management Protocol, SNMP)은 IP 네트워크상의 장치로부터 정보를 수집 및 관리하며, 또한 정보를 수정하여 장치의 동작을 변경하는 데에 사용되는 인터넷 표준 프로토콜이다. SNMP를 지원하는 대표적인 장치에는 라우터, 스위치, 서버, 워크스테이션, 프린터, 모뎀 랙 등이 포함된다.
SNMP는 네트워크 모니터링의 목적으로 네트워크 관리에서 널리 사용된다. SNMP는 관리 정보 베이스(Management Information Base) 상에 관리 중인 시스템의 상태와 설정을 변수의 형태로 관리할 수 있게 해준다. 이러한 변수들은 관리 프로그램에 의해 원격에서 질의될 수 있으며, 경우에 따라서는 원격에서 값을 설정할 수도 있다.
현재 사용되는 SNMP의 주요 버전은 세 가지로, SNMPv1이 가장 초기 버전이며 이후 개발된 SNMPv2와 SNMPv3는 성능 및 유연성, 보안성 면에서 향상된 버전이다.
SNMP는 국제 인터넷 표준화 기구에 의해 정의된 인터넷 프로토콜 스위트의 일부분이다. 인터넷 프로토콜 스위트는 응용 계층 프로토콜, 데이터베이스 명세, 데이터 객체 집합 등을 포함하는 네트워크 관리용 표준들로 구성되어 있다.
Projects
- Top 5 open source network monitoring tools | Opensource.com
- Top 20 Best Open Source Monitoring Tools for Servers, Networks & Apps - 스크린샷 첨부됨. 장단점 명시됨.
- Top 14 Open Source SNMP Tools | Hitecnectar
- Cacti
- Nagios
- icinga
- Ganglia
- Zabbix
- Prometheus
- Observium
- Riemann
- Sensu
- LibreNMS
- Pandora FMS
- Checkmk
- AppNeta PathTest
- Shinken
- Netdata
- Munin
- NetXMS
- Ntopng
- OpenNMS
- Monit
- Mibble
- SNMPcollector
- SNMPsim
- Collectd
- Reconnoitre
- Sharpsnmplib
- Thola
- Observium Community
- Snimpy
Tutorials
L4 Switch#네트워크 엔지니어 환영의 기술블로그 : L4 스위치 쉽게 이해하기 의 내용
- SNMP 쉽게 이해하기 #1 - Easy_to_understand_SNMP_1.pdf (SNMP)
- SNMP 쉽게 이해하기 #2 - Easy_to_understand_SNMP_2.pdf (SNMP)
라우터 네트워크 트래픽 용량 확인 방법
가장 표준적인 방법은 SNMP(Simple Network Management Protocol)를 통해 라우터의 인터페이스 트래픽을 조회하는 것입니다.
pysnmp-lextudio 설치:
라우터 인터페이스 트래픽 조회:
from pysnmp.hlapi import *
def get_interface_traffic(host, community='public'):
"""
Fetch router interface traffic via SNMP
SNMP를 통해 라우터 인터페이스 트래픽 조회
"""
# ifHCInOctets (1.3.6.1.2.1.31.1.1.1.6) - 수신 바이트
# ifHCOutOctets (1.3.6.1.2.1.31.1.1.1.10) - 송신 바이트
# ifSpeed (1.3.6.1.2.1.2.2.1.5) - 인터페이스 최대 속도 (bps)
oids = {
'ifDescr': '1.3.6.1.2.1.2.2.1.2',
'ifSpeed': '1.3.6.1.2.1.2.2.1.5',
'ifHCInOctets': '1.3.6.1.2.1.31.1.1.1.6',
'ifHCOutOctets':'1.3.6.1.2.1.31.1.1.1.10',
}
for oid_name, oid in oids.items():
iterator = nextCmd(
SnmpEngine(),
CommunityData(community),
UdpTransportTarget((host, 161)),
ContextData(),
ObjectType(ObjectIdentity(oid)),
lexicographicMode=False
)
for errorIndication, errorStatus, errorIndex, varBinds in iterator:
if errorIndication or errorStatus:
print(f"Error: {errorIndication or errorStatus}")
break
for varBind in varBinds:
print(f"{oid_name}: {varBind[1]}")
get_interface_traffic('192.168.1.1')
핵심 확인 포인트
- 인터페이스 대역폭 (최대 용량)
- SNMP OID
ifSpeed또는ifHighSpeed— 인터페이스의 물리적 최대 속도 - 예: 1Gbps 포트라면 1,000,000,000 (bps)
- SNMP OID
- 현재 트래픽 사용량 (utilization)
- 두 시점의
ifHCInOctets/ifHCOutOctets차이를 시간 간격으로 나누면 현재 throughput 계산 가능:사용률(%) = (ΔOctets × 8) / (Δtime × ifSpeed) × 100
- 두 시점의
See also
- Network monitoring
- Computer Network
- InformationSecurity:CheckList:Unix - Unix계열 시스템의 보안 항목 체크 리스트.
- Router
- SNMP Exporter (Prometheus)