#!/usr/bin/env ruby#encoding: UTF-8comment=ARGV[0]||"報告學長,完全沒有描述"collect_count=(ARGV[1]||5).to_iraw_data=`/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -s`# log raw_dataFile.open("log/raw.txt",'a')do|file|file.puts"# #{comment}"file.putsraw_dataend# collect all AP info in hashlines=raw_data.split(/[\r\n]/)lines.shiftwifi_info=lines.map{|line|nextif(line[1..32].nil?orline[33..-1].nil?)ssid=line[1..32].stripcols=line[33..-1].split(' ')bssid=cols[0]signal=cols[1].to_ichannel=cols[2].split(',').first.to_iifsignal!=0{ssid:ssid,bssid:bssid,signal:signal,channel:channel}else# parse errornextend}.compact# sort with signalwifi_info.sort_by!{|x|x[:signal]}# log top n AP infotop_wifi=wifi_info.reverse.firstcollect_countputstop_wifiFile.open("log/collect.txt",'a')do|file|file.puts"# #{comment}"top_wifi.eachdo|info|file.puts"gnome-terminal -e \"airbase-ng -c #{info[:channel]} -e '#{info[:ssid]}' -a #{info[:bssid]} $WLANIFACE\" &"endfile.puts"sleep 50"file.puts"killall airbase-ng"endputs"已經新增[#{comment}] #{top_wifi.size} 筆 AP 資訊"
這支程式是 Mac Only,執行後會抓出當下周圍的 AP 資訊,並擷取訊號強度前 n 筆(預設是 5 筆)的 AP,輸出成前面的 shell script 樣式。執行時的畫面大概長這樣:
結論
為了滿足我們想要製造手持裝置是在移動中的效果,可以透過持續偽造不同的 AP 來達成。本文提供了一段可以自動化切換偽造 AP 的 script 範例,還有一支用來收集 AP 資訊的程式。這樣一來,即使在家裡也可以在虛擬的世界啪啪造了!至於這到底有什麼實際上的應用,我也還沒有想到就是了 XD