strat9_kernel/shell/commands/net/
nslookup.rs1use super::*;
2
3pub fn cmd_nslookup(args: &[String]) -> Result<(), ShellError> {
9 if args.is_empty() {
10 shell_println!("Usage: nslookup <domain>");
11 return Err(ShellError::InvalidArguments);
12 }
13 let domain = &args[0];
14
15 let dns = match vfs::open("/net/dns", OpenFlags::READ) {
16 Ok(fd) => {
17 let mut buf = [0u8; 128];
18 let n = vfs::read(fd, &mut buf).unwrap_or(0);
19 let _ = vfs::close(fd);
20 let s = core::str::from_utf8(&buf[..n]).unwrap_or("").trim();
21 String::from(s)
22 }
23 Err(_) => String::from("(not configured)"),
24 };
25 shell_println!("Server: {}", dns);
26
27 let resolve_path = alloc::format!("/net/dns/resolve/{}", domain);
28 match vfs::open(&resolve_path, OpenFlags::READ) {
29 Ok(fd) => {
30 let mut buf = [0u8; 256];
31 let n = vfs::read(fd, &mut buf).unwrap_or(0);
32 let _ = vfs::close(fd);
33 if n > 0 {
34 let result = core::str::from_utf8(&buf[..n]).unwrap_or("(invalid)");
35 shell_println!("Name: {}", domain);
36 shell_println!("Address: {}", result.trim());
37 } else {
38 shell_println!("** cannot resolve {}", domain);
39 }
40 }
41 Err(_) => {
42 shell_println!("** DNS resolution unavailable in /net scheme");
44 shell_println!(" Configured nameserver(s): {}", dns);
45 }
46 }
47 Ok(())
48}