我試圖在我的Debian服務器中整齊地列出數據庫中的當前IPTables規則。將IPTables輸出分割爲數據庫的多維數組
要做到這一點,我寫了幾個步驟。
首先,我們得到IPTables輸出的行號。 (INPUT鏈爲例)
的iptables -L INPUT -nvx --line
我得到一個整潔的輸出,我想在我的數據庫來獲取完全相同的方式。例如, ;
Number, Chain, Protocol, Port, in, out
等等。
爲了使這個輸出與導入到數據庫兼容,我需要把它變成一個多維數組。這是我卡住的地方。這需要是這樣的;
[0] (entry of rule)
[number],[chain],[protocol]...
[1]
[number],[chain],[protocol]
我該如何以最有效的方式做到這一點?
- 更新的代碼 -
function getIPTables() {
$processHandle = popen('/usr/bin/sudo /sbin/iptables -L INPUT -nvx --line-numbers | tail -n +3', 'r');
$content = '';
while (!feof($processHandle)) {
$content .= fread($processHandle, 4096);
}
pclose($processHandle);
// break out all new lines into an array
$lines = explode("\n", $content);
foreach ($lines as $line) {
$commands = array();
$segments = explode(" ", $line);
$newEntry = array(
'Number' => $segments[0],
'Chain' => $segments[1],
'Protocol' => $segments[2],
'Port' => $segments[3],
'in' => $segments[4],
'out' => $segments[5]
);
array_push($commands, $newEntry);
print_r($commands);
}
}
- 輸出 -
[email protected]:/home/michael/Documents/PHPCLIFILES# php getAllRules
Local DB rules from users loaded in array
PHP Notice: Undefined offset: 1 in /home/michael/Documents/PHPCLIFILES/getAllRules on line 47
PHP Notice: Undefined offset: 2 in /home/michael/Documents/PHPCLIFILES/getAllRules on line 48
PHP Notice: Undefined offset: 3 in /home/michael/Documents/PHPCLIFILES/getAllRules on line 49
PHP Notice: Undefined offset: 4 in /home/michael/Documents/PHPCLIFILES/getAllRules on line 50
PHP Notice: Undefined offset: 5 in /home/michael/Documents/PHPCLIFILES/getAllRules on line 51
你說什麼是;我現在正在推動整個規則的制定,當它結束時,我會創建一個新的行。但是,我可以像-A那樣停止每一個條帶並將它推入新的堆棧? 你能幫我一個例子嗎?我是PHP的初學者,所以這對我來說有點高級。 – MichaelP
編輯我的答案,我希望它更有意義。 – Viridis
現在看看它,並嘗試一些事情。我瞭解你的方法概念,我非常感謝! – MichaelP