2011-08-05 50 views
1

我只有幾天的時間,並且只做了幾件我從事過的書,所以很簡單:P。我嘗試過在線搜索,並嘗試了不同的方式,但我似乎無法正確地將MAC傳遞給system()。 我想要實現的是讓perl打開一個MAC的.txt文件,每個MAC都在它自己的獨立行上。然後用它讀取每行一個MAC,並將system()作爲參數傳遞,以便aircrack可以通過MAC arg。我已經顯示了MAC被正確讀取的每一行,但我不明白爲什麼aircrack抱怨MAC給出的MAC不是有效的MAC。這是否是由於我不是在閱讀該行?需要幫助我的第一個perl程序

我還沒有嘗試過,因爲這個複雜因素,我最終希望它打印一個找到的密鑰文件如果aircrack說它已經找到一個,或者如果它沒有找到一個移動到下一個BSSID ,直到文件中沒有更多的MAC去嘗試。

互助委員會是一個txt文件,以便

00:00:00:00:00:00 
00:00:00:00:00:00 
00:00:00:00:00:00 

#!/usr/bin/perl 
use strict; 
use warnings; 


my $file = '/kismetLOGS/PcapDumpKismet/WEPMACS.txt'; 
open my $info, $file or die "Could not open $file: $!"; 

while(my $line = <$info>) 
    { 
    print $line; 
    system("/usr/local/bin/aircrack-ng", "-b $line", "*.pcap *.pcapdump"); 
    last if $. == 0; 
    } 

close $info; 
exit; 

感謝您的幫助,提示和指針。不尋找勺子飼料:)並希望我貼適合每個人,如果我在我如何嘗試這個爲我的最終目標的路,請隨時說,任何關於正確的路線嘗試的提示將不勝感激

回答

2

您可以所有的參數組合在一起,就像

system("/usr/local/bin/aircrack-ng -b $line *.pcap *.pcapdump"); 

或分開他們,就像

system("/usr/local/bin/aircrack-ng", "-b","$line", "*.pcap","*.pcapdump"); 

後者通常是更安全,在項目的空間並不需要進行轉義。但是globbing不起作用,因爲參數直接傳遞給系統執行。

如果你想* .pcap工作,你需要去第一個版本。

+0

謝謝你這麼快,似乎通過MAC正確,但現在由於某種原因,它不打開pcap的,說沒有文件或目錄。我認爲調用system()就像在perl腳本運行的位置使用命令行一樣? .pcaps位於同一位置,無法找到它們。我如何讓它正確傳遞? –

+0

您可能需要爲其添加絕對路徑名稱。 – wespiserA

+0

它不是Perl文件的目錄,它在您運行腳本時處於任何目錄中。 (也許他們是一樣的。) –

0

last if $. == 0;,將其更改爲last if $. ~~ 0,它在進行比較時推斷變量的類型。如果要遍歷所有MAC地址,請將其除去,因爲它只會在第一行(第0行)上運行。

1

$行以換行符結束。你應該刪除換行符。

chomp $line;