如何在Ruby脚本中为wash生成的WiFi数据按dBm添加颜色显示
给WiFi接入点输出添加颜色标识
要实现根据dBm区间为输出添加颜色,你可以利用终端的ANSI转义序列来控制文本颜色。以下是修改后的代码:
def select_point_to_crack(access_points, wlan_iface_name) # 按功率排序(默认升序会把信号最弱的放前面,加reverse可让信号最好的排首位) access_points = access_points.sort_by { |access_point| access_point[:power] }.reverse puts "Enter a number (between 0 y #{access_points.length - 1}):" access_points.each_with_index do |access_point, idx| power = access_point[:power].to_i # 根据dBm区间匹配对应颜色 color = case power when 0..-60 then "\e[32m" # 绿色:信号优秀 when -61..-80 then "\e[33m" # 橙色:信号良好 when -81..-100 then "\e[31m" # 红色:信号较差 else "\e[0m" # 默认重置颜色 end reset_color = "\e[0m" # 仅给功率值添加颜色,也可修改为整行变色 puts "#{idx}. #{access_point[:essid]} #{access_point[:vendor]} #{access_point[:bssid]} #{color}#{access_point[:power]}dB#{reset_color} Canal: #{access_point[:channel]}" end end
关键细节说明:
- ANSI颜色控制:
\e[32m对应绿色、\e[33m对应橙色、\e[31m对应红色,\e[0m用于重置颜色,避免后续文本继承当前颜色。 - 排序逻辑:原代码的
sort_by是升序排列,会将信号最弱(-100左右)的接入点放在最前面。如果希望优先展示信号好的设备,添加.reverse反转排序结果即可。 - 区间匹配:Ruby的范围会自动适配数值方向,
0..-60实际匹配的是-60到0之间的所有整数,完全覆盖需求中的区间。 - 整行变色方案:若需要整行根据功率显示对应颜色,只需调整输出语句为:
puts "#{color}#{idx}. #{access_point[:essid]} #{access_point[:vendor]} #{access_point[:bssid]} #{access_point[:power]}dB Canal: #{access_point[:channel]}#{reset_color}"
内容的提问来源于stack exchange,提问作者Damien
相关产品推荐
相关产品推荐

