JasonX
2013-03-15, 02:05:46
Hi,
möchte gerne die Konfiguration der "iptables" von meinem Ubuntuserver übersichtlich in einer Tabelle anzeigen lassen via PHP.
Soweit habe ich meinen Server dazu bekommen das mein Apache nun die Befehle ausführen kann.
Das setzen von iptables, das löschen von selbigen usw klappt wunderbar.
Auch die Ausgabe von iptables -L --list-numbers funktioniert auch.
Ich möchte jedoch, das mir die Ausgabe von iptables -L --list-numbers in einer html Tabelle dargestellt wird.
Das Problem ist, das shell_exec mir einen String ausgibt.
Jetzt habe ich den String schon mittels str_replace/preg_replace/explode und unset soweit hinbekommen das mir nur noch die Werte in einem Array übrig bleiben.
Das Problem ist ich weiß nicht wie ich die Werte jetzt vernünftig in eine Schleife bekomme um sie korrekt in einer Tabelle darzustellen.
<?php
$tmp = shell_exec("iptables -L INPUT --line-numbers");
echo nl2br($tmp) .'<br /><br /><br /><br />';
$tmp = str_replace("Chain INPUT (policy ACCEPT)","",$tmp);
$tmp = str_replace("num","",$tmp);
$tmp = str_replace("target","",$tmp);
$tmp = str_replace("prot","",$tmp);
$tmp = str_replace("opt","",$tmp);
$tmp = str_replace("source","",$tmp);
$tmp = str_replace("destination","",$tmp);
$tmp = str_replace('*/','',$tmp);
$tmp = str_replace('/*','',$tmp);
$tmp = preg_replace('/(?:[ \t]*(?:\n|\r\n?)){2,}/'," ",$tmp);
$tmp = preg_replace('/\s\s+/', ' ', $tmp);
$rulearray = explode(" ",$tmp);
$max = count($rulearray);
for ($i = 0; $i <= count($rulearray); $i++){
if($rulearray[$i] == ""){
unset($rulearray[$i]);
}
$rulearray = array_merge($rulearray);
}
$rulearray = array_merge($rulearray);
print_r($rulearray);
echo '<br /><br /><br />';
?>
<table border="1" cellpadding="2" cellspacing="0" summary="" style="font-size: 10px;">
<tr>
<th style="text-center;">Regelnummer</th>
<th style="text-center;">Verhalten</th>
<th style="text-center;">Protokoll</th>
<th style="text-center;"></th>
<th style="text-center;">Quell-Adresse</th>
<th style="text-center;">Ziel-Adresse</th>
<th style="text-center;">Quellport</th>
<th style="text-center;">Zielport</th>
<th style="text-center;">Kommentar</th>
</tr>
<?php
for ($i=0;$i < count($rulearray);$i+=9){
?>
<tr>
<td style="text-center;"><?php echo $rulearray[$i] ?></td>
<td style="text-center;"><?php echo $rulearray[$i+1] ?></td>
<td style="text-center;"><?php echo $rulearray[$i+2] ?></td>
<td style="text-center;"><?php echo $rulearray[$i+3] ?></td>
<td style="text-center;"><?php echo $rulearray[$i+4] ?></td>
<td style="text-center;"><?php echo $rulearray[$i+5] ?></td>
<td style="text-center;"><?php echo $rulearray[$i+6] ?></td>
<td style="text-center;"><?php echo $rulearray[$i+7] ?></td>
<td style="text-center;"><?php echo $rulearray[$i+8] ?></td>
</tr>
<?php
}
echo '</table>';
?>
Und hier das Problem
http://puu.sh/2hR7q
Ganz oben ist der String der mir zurückgegeben wird.
In der mitte das Array
Unten die Tabelle
Ich komme einfach nicht auf den Trichter wie ich den Fehler ausbügeln könnte.
Ich weiß, das ist nicht der tollste Code. Er grenzt schon an Bastardcode.
Vielleicht hab ich schon von grund auf den falschen ansatz gehabt, keine Ahnung,
MfG
Jason
möchte gerne die Konfiguration der "iptables" von meinem Ubuntuserver übersichtlich in einer Tabelle anzeigen lassen via PHP.
Soweit habe ich meinen Server dazu bekommen das mein Apache nun die Befehle ausführen kann.
Das setzen von iptables, das löschen von selbigen usw klappt wunderbar.
Auch die Ausgabe von iptables -L --list-numbers funktioniert auch.
Ich möchte jedoch, das mir die Ausgabe von iptables -L --list-numbers in einer html Tabelle dargestellt wird.
Das Problem ist, das shell_exec mir einen String ausgibt.
Jetzt habe ich den String schon mittels str_replace/preg_replace/explode und unset soweit hinbekommen das mir nur noch die Werte in einem Array übrig bleiben.
Das Problem ist ich weiß nicht wie ich die Werte jetzt vernünftig in eine Schleife bekomme um sie korrekt in einer Tabelle darzustellen.
<?php
$tmp = shell_exec("iptables -L INPUT --line-numbers");
echo nl2br($tmp) .'<br /><br /><br /><br />';
$tmp = str_replace("Chain INPUT (policy ACCEPT)","",$tmp);
$tmp = str_replace("num","",$tmp);
$tmp = str_replace("target","",$tmp);
$tmp = str_replace("prot","",$tmp);
$tmp = str_replace("opt","",$tmp);
$tmp = str_replace("source","",$tmp);
$tmp = str_replace("destination","",$tmp);
$tmp = str_replace('*/','',$tmp);
$tmp = str_replace('/*','',$tmp);
$tmp = preg_replace('/(?:[ \t]*(?:\n|\r\n?)){2,}/'," ",$tmp);
$tmp = preg_replace('/\s\s+/', ' ', $tmp);
$rulearray = explode(" ",$tmp);
$max = count($rulearray);
for ($i = 0; $i <= count($rulearray); $i++){
if($rulearray[$i] == ""){
unset($rulearray[$i]);
}
$rulearray = array_merge($rulearray);
}
$rulearray = array_merge($rulearray);
print_r($rulearray);
echo '<br /><br /><br />';
?>
<table border="1" cellpadding="2" cellspacing="0" summary="" style="font-size: 10px;">
<tr>
<th style="text-center;">Regelnummer</th>
<th style="text-center;">Verhalten</th>
<th style="text-center;">Protokoll</th>
<th style="text-center;"></th>
<th style="text-center;">Quell-Adresse</th>
<th style="text-center;">Ziel-Adresse</th>
<th style="text-center;">Quellport</th>
<th style="text-center;">Zielport</th>
<th style="text-center;">Kommentar</th>
</tr>
<?php
for ($i=0;$i < count($rulearray);$i+=9){
?>
<tr>
<td style="text-center;"><?php echo $rulearray[$i] ?></td>
<td style="text-center;"><?php echo $rulearray[$i+1] ?></td>
<td style="text-center;"><?php echo $rulearray[$i+2] ?></td>
<td style="text-center;"><?php echo $rulearray[$i+3] ?></td>
<td style="text-center;"><?php echo $rulearray[$i+4] ?></td>
<td style="text-center;"><?php echo $rulearray[$i+5] ?></td>
<td style="text-center;"><?php echo $rulearray[$i+6] ?></td>
<td style="text-center;"><?php echo $rulearray[$i+7] ?></td>
<td style="text-center;"><?php echo $rulearray[$i+8] ?></td>
</tr>
<?php
}
echo '</table>';
?>
Und hier das Problem
http://puu.sh/2hR7q
Ganz oben ist der String der mir zurückgegeben wird.
In der mitte das Array
Unten die Tabelle
Ich komme einfach nicht auf den Trichter wie ich den Fehler ausbügeln könnte.
Ich weiß, das ist nicht der tollste Code. Er grenzt schon an Bastardcode.
Vielleicht hab ich schon von grund auf den falschen ansatz gehabt, keine Ahnung,
MfG
Jason