mirror of
https://github.com/EFForg/rayhunter.git
synced 2026-05-27 10:04:47 -07:00
46 lines
1.2 KiB
Rust
46 lines
1.2 KiB
Rust
use std::fs::File;
|
|
use std::mem;
|
|
use std::os::unix::io::AsRawFd;
|
|
|
|
fn main() -> std::io::Result<()> {
|
|
const DIAG_IOCTL_SWITCH_LOGGING: u32 = 7;
|
|
const MEMORY_DEVICE_MODE: i32 = 2;
|
|
const DIAG_IOCTL_REMOTE_DEV: u32 = 32;
|
|
|
|
let mut mode_param: [i32; 3] = [MEMORY_DEVICE_MODE, -1, 0]; // diag_logging_mode_param_t
|
|
let use_mdm: i32 = 0;
|
|
|
|
println!("Initializing DIAG");
|
|
|
|
let diag_file = File::options()
|
|
.read(true)
|
|
.write(true)
|
|
.open("/dev/diag")?;
|
|
let diag_fd = diag_file.as_raw_fd();
|
|
|
|
unsafe {
|
|
if libc::ioctl(diag_fd, DIAG_IOCTL_SWITCH_LOGGING, MEMORY_DEVICE_MODE, 0, 0, 0) < 0
|
|
&& libc::ioctl(
|
|
diag_fd,
|
|
DIAG_IOCTL_SWITCH_LOGGING,
|
|
&mut mode_param as *mut _,
|
|
mem::size_of::<[i32; 3]>(), 0, 0, 0, 0
|
|
) < 0
|
|
{
|
|
println!("ioctl failed 1");
|
|
//std::process::exit(1);
|
|
}
|
|
}
|
|
|
|
unsafe {
|
|
if libc::ioctl(diag_fd, DIAG_IOCTL_REMOTE_DEV, &use_mdm as *const i32) < 0 {
|
|
println!("ioctl failed 2");
|
|
std::process::exit(1);
|
|
}
|
|
}
|
|
|
|
println!("successfully opened diag device");
|
|
|
|
Ok(())
|
|
}
|