Skip to main content

omnyssh_core/ssh/services/
redis.rs

1//! Redis service provider.
2//!
3//! Detects Redis servers from probe output.
4
5use async_trait::async_trait;
6
7use super::ServiceProvider;
8use crate::event::ServiceKind;
9use crate::ssh::probe::ProbeOutput;
10
11/// Redis service provider.
12pub struct RedisProvider;
13
14#[async_trait]
15impl ServiceProvider for RedisProvider {
16    fn kind(&self) -> ServiceKind {
17        ServiceKind::Redis
18    }
19
20    fn detect(&self, probe_output: &ProbeOutput) -> bool {
21        // Check for Redis on port 6379 in listening ports OR redis process
22        if let Some(listen) = probe_output.get_section("LISTEN") {
23            if listen.contains(":6379") || listen.contains("6379") {
24                return true;
25            }
26        }
27        if let Some(processes) = probe_output.get_section("PROCESS") {
28            if processes.contains("redis-server") || processes.contains("redis") {
29                return true;
30            }
31        }
32        false
33    }
34}
35
36// ---------------------------------------------------------------------------
37// Tests
38// ---------------------------------------------------------------------------
39
40#[cfg(test)]
41mod tests {
42    use super::*;
43
44    #[test]
45    fn test_redis_detect_from_port() {
46        let probe = "===OMNYSSH:LISTEN===\n0.0.0.0:6379\tLISTEN\n";
47        let parsed = ProbeOutput::parse(probe).expect("should parse");
48        assert!(RedisProvider.detect(&parsed));
49    }
50
51    #[test]
52    fn test_redis_detect_from_process() {
53        let probe = "===OMNYSSH:PROCESS===\nredis 1234 redis-server\n";
54        let parsed = ProbeOutput::parse(probe).expect("should parse");
55        assert!(RedisProvider.detect(&parsed));
56    }
57
58    #[test]
59    fn test_redis_not_detected() {
60        let probe = "===OMNYSSH:SERVICES===\nsshd.service\n";
61        let parsed = ProbeOutput::parse(probe).expect("should parse");
62        assert!(!RedisProvider.detect(&parsed));
63    }
64}