我正在bash中开发一个wifi工具脚本。我是一个新手,这让我很头疼。我的脚本中有一点需要“剪切”stdout才能获得正确的值。我已经开发并正在开发......但是,根据Linux发行版的不同,命令的标准输出行为也有所不同。为不同的linux发行版管理bash脚本
例如。我想在监视模式下设置它后,检查一个接口的新名称。该命令的标准输出(airmon-NG开始WLAN3)在卡利linux是这样的:
PHY Interface Driver Chipset
phy2 wlan3 rt2800usb Ralink Technology, Corp. RT2870/RT3070
(mac80211 monitor mode vif enabled for [phy2]wlan3 on [phy2]wlan3mon)
(mac80211 station mode vif disabled for [phy2]wlan3)
我在我的脚本这个期望的名字“wlan3mon”与此有:
new_interface=$(airmon-ng start $interface | grep monitor | cut -d ']' -f 3)
new_interface=${new_interface:: -1}
输出在回溯Linux的相同的命令(airmon-NG开始WLAN3)是这样的:
Interface Chipset Driver
wlan3 Ralink RT2870/3070 rt2800usb - [phy3]
(monitor mode enabled on mon3)
我从这个输出在我的脚本这样做所需的名称“MON3”:
new_interface=$(airmon-ng start $interface|grep monitor|awk '{print $5}')
new_interface=${new_interface:: -1}
正如你所看到的命令的标准输出是完全不同的。不知道是否有一种“通用”的方式来做到这一点...如果我必须在之前插入一些控制,以便检测哪个发行版正在运行,或者有更好的方法来检测这个比管理命令的标准输出更好。任何建议,我们将受到欢迎。
谢谢大家!干杯。
是的。我注意到在这两个发行版中,airmon都在/ usr/sbin中。正如你所说的是一个bash脚本。没有-v或--version参数,看里面也有很大的不同。我想我会在脚本的开头做一些检查,检查是否使用uname -a或类似的东西,如果有Kali或Backtrack,也许我会限制它只用于在需要时执行不同的命令。 :/ – OscarAkaElvis
因此听起来像是使用相同名称的不同脚本。最终,它可能只是一个包装,它会调用一些较低级别的网络命令,所以也许这就是您需要查看的地方。如果这不明显,编辑您的问题并发布脚本内容(如果它很大,则链接到它)。 –