2016-02-27 30 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披露 - 我是外亂/麻雀的作者。