diff --git a/bin/src/qmdl_store.rs b/bin/src/qmdl_store.rs index 0a41336..3d91d15 100644 --- a/bin/src/qmdl_store.rs +++ b/bin/src/qmdl_store.rs @@ -1,4 +1,4 @@ -use rayhunter::util::RayhunterMetadata; +use rayhunter::util::RuntimeMetadata; use chrono::{DateTime, Local}; use serde::{Deserialize, Serialize}; use std::path::{Path, PathBuf}; @@ -45,25 +45,23 @@ pub struct ManifestEntry { pub qmdl_size_bytes: usize, pub analysis_size_bytes: usize, pub rayhunter_version: Option, - pub os: Option, + pub system_os: Option, pub arch: Option, - pub hardware: Option, } impl ManifestEntry { fn new() -> Self { let now = Local::now(); - let metadata = RayhunterMetadata::new(); + let metadata = RuntimeMetadata::new(); ManifestEntry { name: format!("{}", now.timestamp()), start_time: now, last_message_time: None, qmdl_size_bytes: 0, analysis_size_bytes: 0, - rayhunter_version: Some(metadata.version), - os: Some(metadata.os), + rayhunter_version: Some(metadata.rayhunter_version), + system_os: Some(metadata.system_os), arch: Some(metadata.arch), - hardware: Some(metadata.hardware), } } diff --git a/lib/src/analysis/analyzer.rs b/lib/src/analysis/analyzer.rs index 4db9623..c4eaea5 100644 --- a/lib/src/analysis/analyzer.rs +++ b/lib/src/analysis/analyzer.rs @@ -3,6 +3,7 @@ use chrono::{DateTime, FixedOffset}; use serde::Serialize; use crate::{diag::MessagesContainer, gsmtap_parser}; +use crate::util::RuntimeMetadata; use super::{ imsi_requested::ImsiRequestedAnalyzer, @@ -70,18 +71,10 @@ pub struct AnalyzerMetadata { pub description: String, } -#[derive(Serialize, Debug)] -pub struct RayhunterMetadata { - pub version: String, - pub os: String, - pub arch: String, - pub hardware: String, -} - #[derive(Serialize, Debug)] pub struct ReportMetadata { pub analyzers: Vec, - pub rayhunter: RayhunterMetadata, + pub rayhunter: RuntimeMetadata, } #[derive(Serialize, Debug, Clone)] @@ -214,14 +207,7 @@ impl Harness { }); } - let metadata = crate::util::RayhunterMetadata::new(); - - let rayhunter = RayhunterMetadata { - version: metadata.version, - os: metadata.os, - arch: metadata.arch, - hardware: metadata.hardware, - }; + let rayhunter = RuntimeMetadata::new(); ReportMetadata { analyzers, diff --git a/lib/src/pcap.rs b/lib/src/pcap.rs index 56fed98..a6f7b1d 100644 --- a/lib/src/pcap.rs +++ b/lib/src/pcap.rs @@ -61,8 +61,8 @@ struct UdpHeader { impl GsmtapPcapWriter where T: AsyncWrite + Unpin + Send { pub async fn new(writer: T) -> Result { - let metadata = crate::util::RayhunterMetadata::new(); - let package = format!("{} {}", metadata.name, metadata.version); + let metadata = crate::util::RuntimeMetadata::new(); + let package = format!("{} {}", env!("CARGO_PKG_NAME").to_owned(), metadata.rayhunter_version); let section = SectionHeaderBlock { endianness: Endianness::Big, major_version: 1, @@ -70,7 +70,7 @@ impl GsmtapPcapWriter where T: AsyncWrite + Unpin + Send { section_length: -1, options: vec![ SectionHeaderOption::Hardware(Cow::from(metadata.arch)), - SectionHeaderOption::OS(Cow::from(metadata.os)), + SectionHeaderOption::OS(Cow::from(metadata.system_os)), SectionHeaderOption::UserApplication(Cow::from(package)), ], }; diff --git a/lib/src/util.rs b/lib/src/util.rs index 3701f97..aa153fe 100644 --- a/lib/src/util.rs +++ b/lib/src/util.rs @@ -1,34 +1,36 @@ use nix::sys::utsname::uname; +use serde::Serialize; /// Expose binary and system information. -pub struct RayhunterMetadata { - pub name: String, - pub version: String, - pub os: String, +#[derive(Serialize, Debug)] +pub struct RuntimeMetadata { + /// The cargo package version from this library's cargo.toml, e.g., "1.2.3". + pub rayhunter_version: String, + /// The operating system `sysname` and optionally `release`. e.g., "Linux 3.18.48" or "linux". + pub system_os: String, + /// The CPU architecture in use. e.g., "armv7l" or "arm". pub arch: String, - pub hardware: String, } -impl RayhunterMetadata { +impl RuntimeMetadata { + /// Return the binary and system information, attempting to retrieve + /// attributes from `uname(2)` and falling back to values from + /// `std::env::consts`. pub fn new() -> Self { match uname() { - Ok(utsname) => RayhunterMetadata { - name: env!("CARGO_PKG_NAME").to_owned(), - version: env!("CARGO_PKG_VERSION").to_owned(), + Ok(utsname) => RuntimeMetadata { + rayhunter_version: env!("CARGO_PKG_VERSION").to_owned(), arch: format!("{}", utsname.machine().to_string_lossy()), - os: format!( + system_os: format!( "{} {}", utsname.sysname().to_string_lossy(), utsname.release().to_string_lossy(), ), - hardware: String::from("unknown"), }, - Err(_) => RayhunterMetadata { - name: env!("CARGO_PKG_NAME").to_owned(), - version: env!("CARGO_PKG_VERSION").to_owned(), + Err(_) => RuntimeMetadata { + rayhunter_version: env!("CARGO_PKG_VERSION").to_owned(), arch: std::env::consts::ARCH.to_string(), - os: std::env::consts::OS.to_string(), - hardware: String::from("unknown"), + system_os: std::env::consts::OS.to_string(), }, } }