You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决airodump-ng无法按timeout设置5秒后停止的问题?

解决airodump-ng无法被timeout终止且输出无法正确保存的问题

问题分析

你遇到的核心问题有两个:一是timeout无法终止airodump-ng进程,二是输出无法正确存入变量用于whiptail展示。根源在于:

  1. airodump-ng会通过标准错误流输出部分终端内容,默认timeout无法完整监控这类进程状态;
  2. sudo放在timeout内部时,timeout没有足够权限向root运行的airodump-ng发送终止信号;
  3. 用数组赋值netwroks=($(...))会破坏输出的换行格式,还存在变量名拼写错误(netwroks应为networks)。

解决方案1:调整权限与输出重定向

把sudo放在timeout外层,确保timeout能管理root进程,同时合并标准错误到标准输出,完整捕获所有内容:

function aircrack() {
  sudo airmon-ng check kill
  name=($(sudo /usr/sbin/airmon-ng ))
  sudo airmon-ng start ${name[5]}
  name=($(sudo /usr/sbin/airmon-ng ))
  # 修正变量名,调整sudo与timeout顺序,合并输出流
  networks=$(sudo timeout 5s airodump-ng ${name[5]} 2>&1)
}
  • sudo timeout ...:让timeout以root权限运行,可正常向airodump-ng发送终止信号;
  • 2>&1:将标准错误输出合并到标准输出,避免扫描状态信息丢失;
  • 去掉数组括号():用普通变量保存多行原始输出,适配whiptail的展示需求。

解决方案2:手动后台运行+强制终止(兜底方案)

如果timeout仍失效,可手动控制进程生命周期:

function aircrack() {
  sudo airmon-ng check kill
  name=($(sudo /usr/sbin/airmon-ng ))
  sudo airmon-ng start ${name[5]}
  name=($(sudo /usr/sbin/airmon-ng ))
  
  # 后台启动airodump-ng,输出写入临时文件
  sudo airodump-ng ${name[5]} 2>&1 > /tmp/airodump_scan.log &
  local airodump_pid=$!
  
  # 等待5秒
  sleep 5
  
  # 强制终止进程(忽略不存在进程的错误)
  sudo kill -9 $airodump_pid 2>/dev/null
  
  # 读取扫描结果到变量
  networks=$(cat /tmp/airodump_scan.log)
  # 清理临时文件
  rm -f /tmp/airodump_scan.log
}
  • 用&将进程后台运行,$!获取其PID;
  • sudo kill -9强制终止进程,确保彻底停止;
  • 临时文件存储输出,避免后台进程直接输出到变量的异常。

适配whiptail展示

获取到networks变量后,可通过以下命令在whiptail中展示完整扫描结果:

whiptail --title "无线网络扫描结果" --textbox <(echo "$networks") 25 80 --scrolltext

内容的提问来源于stack exchange,提问作者Nate-ar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 00:25:26