/usr/lib/ruby/1.8/snmp/agent.rb is in libsnmp-ruby1.8 1.0.2-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | #
# Copyright (c) 2004 David R. Halliday
# All rights reserved.
#
# This SNMP library is free software. Redistribution is permitted under the
# same terms and conditions as the standard Ruby distribution. See the
# COPYING file in the Ruby distribution for details.
#
require 'snmp'
require 'socket'
require 'logger'
module SNMP
class Agent #:nodoc:all
def initialize(listen_port=161, max_packet=8000)
@log = Logger.new(STDOUT)
@log.level = Logger::DEBUG
@max_packet = max_packet
@socket = UDPSocket.open
@socket.bind(nil, listen_port)
@mib = MIB::SystemMIB.new
end
def start
@log.info "SNMP agent running"
loop do
begin
data, remote_info = @socket.recvfrom(@max_packet)
puts "Received #{data.length} bytes"
p data
message = Message.decode(data)
case message.pdu
when GetRequest
response = message.response
response.pdu.varbind_list.each do |v|
v.value = @mib.get(v.name)
end
when SetRequest
response = message.response
else
raise "invalid message #{message.to_s}"
end
puts "Responding to #{remote_info[3]}:#{remote_info[1]}"
encoded_message = response.encode
n=@socket.send(encoded_message, 0, remote_info[3], remote_info[1])
p encoded_message
rescue => e
@log.error e
shutdown
end
end
end
def shutdown
@log.info "SNMP agent stopping"
@socket.close
exit
end
alias stop :shutdown
end
end
if $0 == __FILE__
agent = SNMP::Agent.new(1061)
trap("INT") { agent.shutdown }
agent.start
end
|