Class: Netfilter::Queue
- Inherits:
-
Object
- Object
- Netfilter::Queue
- Extended by:
- FFI::Library
- Defined in:
- lib/nfqueue.rb
Defined Under Namespace
Modules: CopyMode
Class Method Summary collapse
-
.create(qnumber, mode = CopyMode::PACKET, &callback) ⇒ Object
Creates a new Queue with the provided callback.
Instance Method Summary collapse
-
#destroy ⇒ Object
Close the queue.
-
#initialize(qnumber, mode = CopyMode::PACKET) ⇒ Queue
constructor
Creates a new Queue at slot qnumber.
-
#process(&callback) ⇒ Object
Processes packets in the queue, passing them through the provided callback.
-
#set_max_length(len) ⇒ Object
Sets the maximum number of elements in the queue.
-
#set_mode(mode, range = 0xffff_ffff) ⇒ Object
Changes the copy mode for the queue.
Constructor Details
#initialize(qnumber, mode = CopyMode::PACKET) ⇒ Queue
Creates a new Queue at slot qnumber.
238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 |
# File 'lib/nfqueue.rb', line 238 def initialize(qnumber, mode = CopyMode::PACKET) @conn_handle = Queue.nfq_open raise QueueError, "nfq_open has failed" if @conn_handle.null? if Queue.nfq_unbind_pf(@conn_handle, Socket::AF_INET) < 0 close raise QueueError, "nfq_unbind_pf has failed" end if Queue.nfq_bind_pf(@conn_handle, Socket::AF_INET) < 0 close raise QueueError, "nfq_unbind_pf has failed" end @qhandle = Queue.nfq_create_queue(@conn_handle, qnumber, method(:callback_handler), nil) if @qhandle.null? close raise QueueError, "nfq_create_queue has failed" if @qhandle.null? end set_mode(mode) end |
Class Method Details
.create(qnumber, mode = CopyMode::PACKET, &callback) ⇒ Object
Creates a new Queue with the provided callback. The queue will be automatically destroyed at return.
310 311 312 313 314 |
# File 'lib/nfqueue.rb', line 310 def self.create(qnumber, mode = CopyMode::PACKET, &callback) queue = self.new(qnumber, mode) queue.process(&callback) queue.destroy end |
Instance Method Details
#destroy ⇒ Object
Close the queue.
301 302 303 304 |
# File 'lib/nfqueue.rb', line 301 def destroy Queue.nfq_destroy_queue(@qhandle) close end |
#process(&callback) ⇒ Object
Processes packets in the queue, passing them through the provided callback.
286 287 288 289 290 291 292 293 294 295 296 |
# File 'lib/nfqueue.rb', line 286 def process(&callback) @callback = callback fd = Queue.nfq_fd(@conn_handle) raise QueueError, "nfq_fd has failed" if fd < 0 io = IO.new(fd) while data = io.sysread(4096) Queue.nfq_handle_packet(@conn_handle, data, data.size) end end |
#set_max_length(len) ⇒ Object
Sets the maximum number of elements in the queue.
275 276 277 278 279 280 281 |
# File 'lib/nfqueue.rb', line 275 def set_max_length(len) if Queue.nfq_set_queue_maxlen(@qhandle, len) < 0 raise QueueError, "nfq_queue_maxlen has failed" end self end |
#set_mode(mode, range = 0xffff_ffff) ⇒ Object
Changes the copy mode for the queue.
264 265 266 267 268 269 270 |
# File 'lib/nfqueue.rb', line 264 def set_mode(mode, range = 0xffff_ffff) if Queue.nfq_set_mode(@qhandle, mode, range) < 0 raise QueueError, "nfq_set_mode has failed" end self end |