Crates.io | radb_client |
lib.rs | radb_client |
version | 1.1.7 |
source | src |
created_at | 2023-08-05 17:45:08.1236 |
updated_at | 2024-10-17 06:55:13.71324 |
description | adb client for rust |
homepage | https://github.com/sephiroth74/radb_client |
repository | https://github.com/sephiroth74/radb_client |
max_upload_size | |
id | 936643 |
size | 7,056,727 |
Simple Android adb client for rust.
use radb_client::{*};
pub fn main() {
let adb = Adb::new().unwrap();
let device_ip = String::from("192.168.1.128");
let conn = ConnectionType::try_from_ip(device_ip).unwrap();
let client = Client::try_from(conn).unwrap();
match client.connect() {
Ok(()) => println!("Device connected"),
Err(err) => println!("Error connecting to device: {:?}", err),
}
}
Using the feature scanner
is also possible to scan for all the available devices:
use std::str::FromStr;
use std::time::{Duration, Instant};
use cidr_utils::cidr::Ipv4Cidr;
use cidr_utils::Ipv4CidrSize;
use crossbeam_channel::unbounded;
use indicatif::{MultiProgress, ProgressBar, ProgressStyle};
use itertools::Either;
use crate::scanner::Scanner;
use crate::test::test::init_log;
use crate::types::Adb;
fn test_scan() {
let cidr = Ipv4Cidr::from_str("192.168.1.0/24").unwrap();
let progress_style = ProgressStyle::with_template(
"{prefix:.cyan.bold/blue.bold}: {elapsed_precise} [{bar:40.cyan/blue}] {percent:.bold}%. {msg} ",
)
.unwrap()
.progress_chars("=> ");
let multi_progress = MultiProgress::new();
let progress = multi_progress.add(ProgressBar::new(cidr.size()));
progress.set_style(progress_style.clone());
progress.set_prefix("Scanning");
let (tx, rx) = unbounded();
let adb = Adb::new().expect("failed to find adb");
let scanner = Scanner::default()
.with_debug(false)
.with_tcp_timeout(Duration::from_millis(200))
.with_adb_timeout(Duration::from_millis(100));
let start = Instant::now();
scanner.scan(&adb, cidr.iter(), tx.clone());
drop(tx);
let mut result = Vec::new();
for either in rx {
match either {
Either::Left(addr) => {
progress.inc(1);
progress.set_message(format!("{addr}..."));
}
Either::Right(client) => {
if !result.contains(&client) {
result.push(client);
}
}
}
}
progress.finish_with_message(format!("Scanned {} IPs", cidr.size()));
let elapsed = start.elapsed();
println!("Time elapsed for scanning is: {:?}ms", elapsed.as_millis());
println!("Found {:} devices", result.len());
result.sort_by_key(|k| k.conn);
for device in result.iter() {
println!("{device}");
}
}