#scan #async #networking #monitoring

async-port-scanner

简单快速的Rust异步端口扫描库

4个版本

0.1.4 2020年5月25日
0.1.3 2020年4月29日
0.1.2 2020年4月29日
0.1.1 2020年4月29日
0.1.0 2020年4月29日

#66 in #scan

每月下载 32

MIT 协议

9KB
148

port-scanner

一个简单快速的Rust异步端口扫描库。基于async-std构建

使用

创建一个新的扫描器只需要每个端口的超时时间。

对localhost进行端口扫描。这将返回一个正在监听tcp的套接字地址的向量。

  use async_std::task;
  use futures::future::join_all;
  use async_port_scanner::Scanner;
  let ps = Scanner::new(Duration::from_secs(4));

  let ftr = ps.run("127.0.0.1".to_string(), 1, 65535);
  let my_addrs: Vec<SocketAddr> = task::block_on(async { ftr.await });
  println!("{:?}", my_addrs);

很容易达到系统上的打开文件限制。为了解决这个问题,可以将扫描器限制为每次运行一批端口。

  let ftr = ps.run_batched("127.0.0.1".to_string(), 1, 65535, 10000);
  let my_addrs: Vec<SocketAddr> = task::block_on(async { ftr.await });
  println!("{:?}", my_addrs);

您还可以对多个主机进行扫描。这将返回一个套接字地址向量的向量。

  let my_ftr = ps.run_batched("127.0.0.1".to_string(), 1, 65535, 3000);
  let dev1_ftr = ps.run_batched("192.168.1.172".to_string(), 1, 65535, 3000);
  let dev2_ftr = ps.run_batched("192.168.1.137".to_string(), 1, 65535, 3000);
  let all_ftrs = vec![my_ftr, dev1_ftr, dev2_ftr];
  let results: Vec<Vec<SocketAddr>> = task::block_on(async move { join_all(all_ftrs).await });
  println!("{:?}", results);

依赖关系

~5–14MB
~179K SLoC