mirror of
https://github.com/EFForg/rayhunter.git
synced 2026-05-30 06:59:27 -07:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6b07b4e460 | ||
|
|
9b6051380f | ||
|
|
f8581559e7 |
@@ -210,6 +210,16 @@ pub enum LogBody {
|
|||||||
#[deku(count = "hdr_len.saturating_sub(8)")]
|
#[deku(count = "hdr_len.saturating_sub(8)")]
|
||||||
msg: Vec<u8>,
|
msg: Vec<u8>,
|
||||||
},
|
},
|
||||||
|
#[deku(id = "0xb063")]
|
||||||
|
LteMac {
|
||||||
|
#[deku(ctx = "log_type")]
|
||||||
|
direction: LteMacMessageDirection,
|
||||||
|
version: u8,
|
||||||
|
#[deku(pad_bytes_after = "2")]
|
||||||
|
num_subpacket: u8,
|
||||||
|
#[deku(count = "num_subpacket")]
|
||||||
|
subpackets: Vec<LteMacSubpacket>,
|
||||||
|
},
|
||||||
#[deku(id = "0x713a")]
|
#[deku(id = "0x713a")]
|
||||||
UmtsNasOtaMessage {
|
UmtsNasOtaMessage {
|
||||||
is_uplink: u8,
|
is_uplink: u8,
|
||||||
@@ -224,6 +234,24 @@ pub enum LogBody {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, PartialEq, DekuRead, DekuWrite)]
|
||||||
|
pub struct LteMacSubpacket {
|
||||||
|
pub id: u8,
|
||||||
|
pub version: u8,
|
||||||
|
pub size: u16,
|
||||||
|
#[deku(count = "size - 4")]
|
||||||
|
pub data: Vec<u8>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, PartialEq, DekuRead, DekuWrite)]
|
||||||
|
#[deku(ctx = "log_type: u16", id = "log_type")]
|
||||||
|
pub enum LteMacMessageDirection {
|
||||||
|
#[deku(id_pat = "0xb063")]
|
||||||
|
Downlink,
|
||||||
|
#[deku(id_pat = "0xb064")]
|
||||||
|
Uplink,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, DekuRead, DekuWrite)]
|
#[derive(Debug, Clone, PartialEq, DekuRead, DekuWrite)]
|
||||||
#[deku(ctx = "log_type: u16", id = "log_type")]
|
#[deku(ctx = "log_type: u16", id = "log_type")]
|
||||||
pub enum Nas4GMessageDirection {
|
pub enum Nas4GMessageDirection {
|
||||||
|
|||||||
@@ -40,22 +40,25 @@ pub enum DiagDeviceError {
|
|||||||
ParseMessagesContainerError(deku::DekuError),
|
ParseMessagesContainerError(deku::DekuError),
|
||||||
}
|
}
|
||||||
|
|
||||||
pub const LOG_CODES_FOR_RAW_PACKET_LOGGING: [u32; 11] = [
|
pub const LOG_CODES_FOR_RAW_PACKET_LOGGING: [u32; 13] = [
|
||||||
// Layer 2:
|
// Layer 2:
|
||||||
log_codes::LOG_GPRS_MAC_SIGNALLING_MESSAGE_C, // 0x5226
|
log_codes::LOG_GPRS_MAC_SIGNALLING_MESSAGE_C,
|
||||||
// Layer 3:
|
// Layer 3:
|
||||||
log_codes::LOG_GSM_RR_SIGNALING_MESSAGE_C, // 0x512f
|
log_codes::LOG_GSM_RR_SIGNALING_MESSAGE_C,
|
||||||
log_codes::WCDMA_SIGNALLING_MESSAGE, // 0x412f
|
log_codes::WCDMA_SIGNALLING_MESSAGE,
|
||||||
log_codes::LOG_LTE_RRC_OTA_MSG_LOG_C, // 0xb0c0
|
log_codes::LOG_LTE_RRC_OTA_MSG_LOG_C,
|
||||||
log_codes::LOG_NR_RRC_OTA_MSG_LOG_C, // 0xb821
|
log_codes::LOG_NR_RRC_OTA_MSG_LOG_C,
|
||||||
// NAS:
|
// NAS:
|
||||||
log_codes::LOG_UMTS_NAS_OTA_MESSAGE_LOG_PACKET_C, // 0x713a
|
log_codes::LOG_UMTS_NAS_OTA_MESSAGE_LOG_PACKET_C,
|
||||||
log_codes::LOG_LTE_NAS_ESM_OTA_IN_MSG_LOG_C, // 0xb0e2
|
log_codes::LOG_LTE_NAS_ESM_OTA_IN_MSG_LOG_C,
|
||||||
log_codes::LOG_LTE_NAS_ESM_OTA_OUT_MSG_LOG_C, // 0xb0e3
|
log_codes::LOG_LTE_NAS_ESM_OTA_OUT_MSG_LOG_C,
|
||||||
log_codes::LOG_LTE_NAS_EMM_OTA_IN_MSG_LOG_C, // 0xb0ec
|
log_codes::LOG_LTE_NAS_EMM_OTA_IN_MSG_LOG_C,
|
||||||
log_codes::LOG_LTE_NAS_EMM_OTA_OUT_MSG_LOG_C, // 0xb0ed
|
log_codes::LOG_LTE_NAS_EMM_OTA_OUT_MSG_LOG_C,
|
||||||
|
// MAC
|
||||||
|
log_codes::LOG_LTE_MAC_DL,
|
||||||
|
log_codes::LOG_LTE_MAC_UL,
|
||||||
// User IP traffic:
|
// User IP traffic:
|
||||||
log_codes::LOG_DATA_PROTOCOL_LOGGING_C, // 0x11eb
|
log_codes::LOG_DATA_PROTOCOL_LOGGING_C,
|
||||||
];
|
];
|
||||||
|
|
||||||
const BUFFER_LEN: usize = 1024 * 1024 * 10;
|
const BUFFER_LEN: usize = 1024 * 1024 * 10;
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
use crate::diag::*;
|
use crate::diag::*;
|
||||||
use crate::gsmtap::*;
|
use crate::gsmtap::*;
|
||||||
|
|
||||||
|
use deku::DekuContainerWrite;
|
||||||
use log::error;
|
use log::error;
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
|
|
||||||
@@ -13,16 +14,13 @@ pub enum GsmtapParserError {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn parse(msg: Message) -> Result<Option<(Timestamp, GsmtapMessage)>, GsmtapParserError> {
|
pub fn parse(msg: Message) -> Result<Option<(Timestamp, GsmtapMessage)>, GsmtapParserError> {
|
||||||
if let Message::Log {
|
let Message::Log { timestamp, body, .. } = msg else {
|
||||||
timestamp, body, ..
|
return Ok(None);
|
||||||
} = msg
|
};
|
||||||
{
|
|
||||||
match log_to_gsmtap(body)? {
|
match log_to_gsmtap(body)? {
|
||||||
Some(msg) => Ok(Some((timestamp, msg))),
|
Some(msg) => Ok(Some((timestamp, msg))),
|
||||||
None => Ok(None),
|
None => Ok(None),
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Ok(None)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -151,7 +149,16 @@ fn log_to_gsmtap(value: LogBody) -> Result<Option<GsmtapMessage>, GsmtapParserEr
|
|||||||
header,
|
header,
|
||||||
payload: msg,
|
payload: msg,
|
||||||
}))
|
}))
|
||||||
}
|
},
|
||||||
|
LogBody::LteMac { direction, subpackets, .. } => {
|
||||||
|
let mut header = GsmtapHeader::new(GsmtapType::LteMac);
|
||||||
|
header.uplink = matches!(direction, LteMacMessageDirection::Uplink);
|
||||||
|
let mut payload = Vec::new();
|
||||||
|
for packet in subpackets {
|
||||||
|
payload.extend(packet.to_bytes().unwrap());
|
||||||
|
}
|
||||||
|
Ok(Some(GsmtapMessage { header, payload }))
|
||||||
|
},
|
||||||
_ => {
|
_ => {
|
||||||
error!("gsmtap_sink: ignoring unhandled log type: {value:?}");
|
error!("gsmtap_sink: ignoring unhandled log type: {value:?}");
|
||||||
Ok(None)
|
Ok(None)
|
||||||
|
|||||||
@@ -36,6 +36,9 @@ pub const LOG_LTE_NAS_ESM_OTA_OUT_MSG_LOG_C: u32 = 0xb0e3;
|
|||||||
pub const LOG_LTE_NAS_EMM_OTA_IN_MSG_LOG_C: u32 = 0xb0ec;
|
pub const LOG_LTE_NAS_EMM_OTA_IN_MSG_LOG_C: u32 = 0xb0ec;
|
||||||
pub const LOG_LTE_NAS_EMM_OTA_OUT_MSG_LOG_C: u32 = 0xb0ed;
|
pub const LOG_LTE_NAS_EMM_OTA_OUT_MSG_LOG_C: u32 = 0xb0ed;
|
||||||
|
|
||||||
|
pub const LOG_LTE_MAC_DL: u32 = 0xb063;
|
||||||
|
pub const LOG_LTE_MAC_UL: u32 = 0xb064;
|
||||||
|
|
||||||
pub const LTE_BCCH_BCH_V0: u32 = 1;
|
pub const LTE_BCCH_BCH_V0: u32 = 1;
|
||||||
pub const LTE_BCCH_DL_SCH_V0: u32 = 2;
|
pub const LTE_BCCH_DL_SCH_V0: u32 = 2;
|
||||||
pub const LTE_MCCH_V0: u32 = 3;
|
pub const LTE_MCCH_V0: u32 = 3;
|
||||||
|
|||||||
Reference in New Issue
Block a user