2010-08-14 2 views
1

SNMP를 사용하여 서버 포트를 모니터링하는 방법이 있습니까? (net-snmp-python을 사용하여 이것을 파이썬으로 확인하고 있습니다). 지금까지 "nc"명령으로 매우 간단하게 점검했지만 SNMP로 이것을 수행 할 수 있는지 알고 싶습니다.SNMP (net-snmp)로 포트 검사

답변과 인내심에 감사드립니다.

+1

정확히 모니터링 하시겠습니까? 어떤 포트가 청취 중이며, 연결을 허용하는 포트가 더 큽니까? – Doon

+1

FTP, SSH, HTTP (S), BIND, MySQL – abiko

+1

과 같은 표준 포트를 확인하고 싶습니다. serverfault에서이 질문을 시도해보십시오. 사용자의 필요에 더 잘 맞을 수있는 솔루션이있을 수 있습니다. – bstpierre

답변

3

는 정확히 포트를 듣고 무엇을, 당신이 UDP는 다음과 같이 당신에게 뭔가를 줄 것이다 걷기 테이블

"1.3.6.1.2.1.6.13.1.1" tcpConnState 
    "1.3.6.1.2.1.7.5.1.1" udpLocalAddress 

을 다음 OIDS를 사용하여 걸을 수 있어야 볼 SNMP를 사용하려면 잘 경우 :

snmpwalk -cpublic 192.168.1.13 1.3.6.1.2.1.7.5.1.1              
    UDP-MIB::udpLocalAddress.0.0.0.0.68 = IpAddress: 0.0.0.0 
    UDP-MIB::udpLocalAddress.0.0.0.0.161 = IpAddress: 0.0.0.0 
    UDP-MIB::udpLocalAddress.0.0.0.0.32908 = IpAddress: 0.0.0.0 
    UDP-MIB::udpLocalAddress.0.0.0.0.33281 = IpAddress: 0.0.0.0 
    UDP-MIB::udpLocalAddress.0.0.0.0.33795 = IpAddress: 0.0.0.0 
    UDP-MIB::udpLocalAddress.0.0.0.0.34822 = IpAddress: 0.0.0.0 
    UDP-MIB::udpLocalAddress.0.0.0.0.44782 = IpAddress: 0.0.0.0 
    UDP-MIB::udpLocalAddress.192.168.1.13.9950 = IpAddress: 192.168.1.13 

및 TCP 좋아 :

snmpwalk -cpublic 192.168.1.13 1.3.6.1.2.1.6.13.1.1             
    TCP-MIB::tcpConnState.0.0.0.0.21.0.0.0.0.0 = INTEGER: listen(2) 
    TCP-MIB::tcpConnState.0.0.0.0.23.0.0.0.0.0 = INTEGER: listen(2) 
    TCP-MIB::tcpConnState.0.0.0.0.80.0.0.0.0.0 = INTEGER: listen(2) 

이 테이블을 산책하는 포트가 리튬 무엇을 보여줍니다 stening, 그리고 몇 가지 정보를 제공 할 수 있습니다.

이제 질문에 나열된 특정 포트가 수신 중인지 확인하려면 다음 OIDS를 사용하여 확인할 수 있습니다.

ftp -- 1.3.6.1.2.1.6.13.1.1.0.0.0.0.21.0.0.0.0.0 
ssh -- 1.3.6.1.2.1.6.13.1.1.0.0.0.0.22.0.0.0.0.0 
http -- 1.3.6.1.2.1.6.13.1.1.0.0.0.0.80.0.0.0.0.0 
https -- 1.3.6.1.2.1.6.13.1.1.0.0.0.0.443.0.0.0.0.0 
bind -- 1.3.6.1.2.1.7.5.1.1.0.0.0.0.53 

위의 OIDS는 서버가 기본 주소 (0.0.0.0)에 바인딩되어 있다고 가정합니다. 하지만 서버 IP 주소에만 바인딩 될 수 있습니다 (config에 따라 다름). 서버의 IP 가정이 경우 당신이 그렇게 모든 당신이 파이썬을 사용하여 HTTP 호스트 192.168.10.1에 기본 주소에서 수신 된 경우 말하려고하면 생각했다되고 있음을

1.3.6.1.2.1.7.5.1.1.192.168.10.1.53 for bind 

을 얻을 것 192.168.10.1입니다 net snmp 바인딩을 사용하면 다음과 같은 결과를 얻을 수 있습니다. 내가 파이썬의 모든 SNMP 물건을하지 않는 한 VARBIND이 필요한 경우

import netsnmp 
oid = netsmp.Varbind('1.3.6.1.2.1.6.13.1.1.0.0.0.0.80.0.0.0.0.0') 
result = netsnmp.snmp(oid, 
         Version = 2, 
         DestHost="192.168.10.1", 
         Community="public") 

나는 100 % 확실하지 않다, 그리고 내가 찾은 몇 가지 예를했고, 일부는하지 않았다. 그러나 어느 쪽이든 그것을 시도하십시오. 위의 쿼리에서 서버가 수신 대기 중이 아니면 열려있는 경우 수신 대기 결과가 Integer (2) 인 경우 해당 OID가 없음을 반환합니다.

0

는 SNMP가 맞지 수있는 위치를 확인하기 어렵다.

프로토콜 특정 클라이언트를 사용하는 것입니다 모니터링하는 가장 좋은 방법은 (즉, MySQL의 대 간단한 쿼리를 실행 등 FTP를 사용하여 테스트 파일을 검색)

그래도 작동하지 않으면 포트에 TCP 또는 UDP 소켓을 열어 다른 사람이 수신 대기 중인지 확인할 수 있습니다.

0

확인할 포트에 대해 nmap을 실행 해 볼 수는 있지만 열려있는 포트의 반대쪽에있는 서버 프로세스이 활성 상태임을 나타내는 것은 아닙니다.