2016-02-27 73 views
1

我正在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} 

正如你所看到的命令的标准输出是完全不同的。不知道是否有一种“通用”的方式来做到这一点...如果我必须在之前插入一些控制,以便检测哪个发行版正在运行,或者有更好的方法来检测这个比管理命令的标准输出更好。任何建议,我们将受到欢迎。

谢谢大家!干杯。

回答

0

不同的输出可能是由于airmon-ng可执行文件的不同版本,也可能是由于Linux发行版的不同调用引起的。

这是一个猜测,但我认为airmon-ng start实际上是启动服务的脚本的输出。它可能是/etc/init.d中的脚本,或者可能是初始化网络服务时调用的脚本。通常,这些脚本只是对底层调用真实可执行软件的shell脚本。

所以,如果你可以找到...并且它可能airmon-ng很可能它有一些其他选项可能会更一致地显示输出。尝试airmon-ng -hman airmon-ng以查看是否有帮助或手册页。它也可能是版本差异 - 请尝试airmon-ng -v(或者-V--version)。其实,只是看着谷歌和通过查看脚本(使用which airmon-ng找到它的路径)找到了这个网页http://linux.die.net/man/1/airmon-ng表示,它是一个脚本,并指出了一些配置选项/etc/kismet/kismet.conf

开始,然后检查脚本本身看看它做了什么。有可能会有线索知道如何从不同的方式获取您正在寻找的信息。

+0

是的。我注意到在这两个发行版中,airmon都在/ usr/sbin中。正如你所说的是一个bash脚本。没有-v或--version参数,看里面也有很大的不同。我想我会在脚本的开头做一些检查,检查是否使用uname -a或类似的东西,如果有Kali或Backtrack,也许我会限制它只用于在需要时执行不同的命令。 :/ – OscarAkaElvis

+0

因此听起来像是使用相同名称的不同脚本。最终,它可能只是一个包装,它会调用一些较低级别的网络命令,所以也许这就是您需要查看的地方。如果这不明显,编辑您的问题并发布脚本内容(如果它很大,则链接到它)。 –

0

Regexes to the rescue!

尝试

new_interface=$(airmon-ng start $interface | sed -n 's/.*monitor.*enabled.*\W\(\w*\))/\1/p') 

此管道输出到sed的运行在正则表达式,其在该线的闭括号之前搜索字母数字字符。然后它会打印这些字符,并只打印那些因为-n标志。希望有所帮助!

0

看看outthentic - 多用途脚本框架,它可能写一个跨平台bash脚本在那里。下面是例子片段:

shopt -s nocasematch; 

if [[ $os =~ "debian" ]]; then 
    # some code here 
elif [[ "$os" =~ "ubuntu" ]]; then 
    # some code here 
elif [[ "$os" =~ "centos" ]]; then 
    # some code here 
else 
    echo "unknown os: $os" 
    exit 1 
fi 

一旦你的脚本完成,你可以在你的服务器与sparrow的帮助,会非常方便分发。

如果您需要将Kali和Blacktrack linux添加到可识别的os列表中 - 请告诉我。

PS披露 - 我是外乱/麻雀的作者。