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
74
75
76
77
78
79
80
81
82
|
use crate::event::event::Event;
use crate::event::manager::EventHandle;
use crate::event::manager::EventManager;
use crate::event::manager::EventQueue;
use crate::packet::packet::Packet;
use crate::session::session::Session;
use std::cell::RefCell;
use std::rc::Rc;
#[derive(Clone)]
pub struct ExamplePulgin {
plugin_name: &'static str,
plugin_ctx: Rc<RefCell<String>>,
}
impl ExamplePulgin {
pub fn new(plugin_name: &'static str) -> ExamplePulgin {
ExamplePulgin {
plugin_name,
plugin_ctx: Rc::new(RefCell::new(String::new())),
}
}
}
impl EventHandle for ExamplePulgin {
fn init(&mut self, event_mgr: &mut EventManager) {
event_mgr.register(Event::TCPOpeningEvent, Box::new(self.clone()));
event_mgr.register(Event::TCPActiveEvent, Box::new(self.clone()));
event_mgr.register(Event::TCPExpireEvent, Box::new(self.clone()));
event_mgr.register(Event::TCPClosedEvent, Box::new(self.clone()));
event_mgr.register(Event::HTTPRequestEvent, Box::new(self.clone()));
}
fn handle(
&mut self,
event: Event,
queue: &mut EventQueue,
packet: Option<&Packet>,
session: Option<Rc<RefCell<Session>>>,
) {
self.plugin_ctx.borrow_mut().push_str("1");
if session.is_none() {
return;
}
if packet.is_none() {
println!("{} handle Packet: None", self.plugin_name);
}
let session = session.unwrap();
session.borrow_mut().inc_session_c2s_metrics(0, 0, 1, 1);
match event {
Event::TCPOpeningEvent => {
println!("{} handle TCPOpeningEvent: {:?}", self.plugin_name, session);
let (src_port, dst_port) = packet.unwrap().get_innermost_port().unwrap();
if src_port == 80 || dst_port == 80 {
println!("{} add HTTPRequestEvent", self.plugin_name);
queue.add(Event::HTTPRequestEvent, Some(session));
}
}
Event::TCPActiveEvent => {
println!("{} handle TCPActiveEvent: {:?}", self.plugin_name, session);
}
Event::TCPExpireEvent => {
println!("{} handle TCPExpireEvent: {:?}", self.plugin_name, session);
}
Event::TCPClosedEvent => {
println!("{} handle TCPClosedEvent: {:?}", self.plugin_name, session);
}
Event::HTTPRequestEvent => {
println!(
"{} handle HTTPRequestEvent: {:?}",
self.plugin_name, session
);
}
_ => {
println!("{} handle UnknownEvent: {:?}", self.plugin_name, session);
}
}
}
}
|