mirror of
https://github.com/EFForg/rayhunter.git
synced 2026-04-26 23:49:59 -07:00
Because we toggle some ioctl settings based on this field, change the name to better capture that we're selecting which device we want to load settings for, not just the display module to load. This creates room for future per-device settings without needing more config file fields.
100 lines
2.7 KiB
Rust
100 lines
2.7 KiB
Rust
/// Installer for the TMobile TMOHS1 hotspot.
|
|
///
|
|
/// Tested on (from `/etc/wt_version`):
|
|
/// WT_INNER_VERSION=SW_Q89527AA1_V045_M11_TMO_USR_MP
|
|
/// WT_PRODUCTION_VERSION=TMOHS1_00.05.20
|
|
/// WT_HARDWARE_VERSION=89527_1_11
|
|
use std::io::Write;
|
|
use std::net::SocketAddr;
|
|
use std::str::FromStr;
|
|
use std::time::Duration;
|
|
|
|
use anyhow::Result;
|
|
use tokio::time::sleep;
|
|
|
|
use crate::TmobileArgs as Args;
|
|
use crate::util::{echo, http_ok_every, telnet_send_command, telnet_send_file};
|
|
use crate::wingtech::start_telnet;
|
|
|
|
pub async fn install(
|
|
Args {
|
|
admin_ip,
|
|
admin_password,
|
|
}: Args,
|
|
) -> Result<()> {
|
|
run_install(admin_ip, admin_password).await
|
|
}
|
|
|
|
async fn run_install(admin_ip: String, admin_password: String) -> Result<()> {
|
|
echo!("Starting telnet ... ");
|
|
start_telnet(&admin_ip, &admin_password).await?;
|
|
sleep(Duration::from_millis(200)).await;
|
|
println!("ok");
|
|
|
|
echo!("Connecting via telnet to {admin_ip} ... ");
|
|
let addr = SocketAddr::from_str(&format!("{admin_ip}:23")).unwrap();
|
|
telnet_send_command(addr, "mkdir -p /data/rayhunter", "exit code 0").await?;
|
|
println!("ok");
|
|
|
|
telnet_send_command(addr, "mount -o remount,rw /", "exit code 0").await?;
|
|
|
|
telnet_send_file(
|
|
addr,
|
|
"/data/rayhunter/config.toml",
|
|
crate::CONFIG_TOML
|
|
.replace("#device = \"orbic\"", "device = \"tmobile\"")
|
|
.as_bytes(),
|
|
)
|
|
.await?;
|
|
|
|
let rayhunter_daemon_bin = include_bytes!(env!("FILE_RAYHUNTER_DAEMON"));
|
|
telnet_send_file(
|
|
addr,
|
|
"/data/rayhunter/rayhunter-daemon",
|
|
rayhunter_daemon_bin,
|
|
)
|
|
.await?;
|
|
telnet_send_command(
|
|
addr,
|
|
"chmod 755 /data/rayhunter/rayhunter-daemon",
|
|
"exit code 0",
|
|
)
|
|
.await?;
|
|
telnet_send_file(
|
|
addr,
|
|
"/etc/init.d/misc-daemon",
|
|
include_bytes!("../../dist/scripts/misc-daemon"),
|
|
)
|
|
.await?;
|
|
telnet_send_command(addr, "chmod 755 /etc/init.d/misc-daemon", "exit code 0").await?;
|
|
telnet_send_file(
|
|
addr,
|
|
"/etc/init.d/rayhunter_daemon",
|
|
crate::RAYHUNTER_DAEMON_INIT.as_bytes(),
|
|
)
|
|
.await?;
|
|
telnet_send_command(
|
|
addr,
|
|
"chmod 755 /etc/init.d/rayhunter_daemon",
|
|
"exit code 0",
|
|
)
|
|
.await?;
|
|
|
|
println!("Rebooting device and waiting 30 seconds for it to start up.");
|
|
telnet_send_command(addr, "reboot", "exit code 0").await?;
|
|
sleep(Duration::from_secs(30)).await;
|
|
|
|
echo!("Testing rayhunter ... ");
|
|
let max_failures = 10;
|
|
http_ok_every(
|
|
format!("http://{admin_ip}:8080/index.html"),
|
|
Duration::from_secs(3),
|
|
max_failures,
|
|
)
|
|
.await?;
|
|
println!("ok");
|
|
println!("rayhunter is running at http://{admin_ip}:8080");
|
|
|
|
Ok(())
|
|
}
|