Raspberry Pi mit Kontroll-GUI

closeDieser Beitrag gehört zu der Artikelserie Hacking in a Box

Um meinen Raspberry Pi möglichst klein und mobil zu halten, kann ich natürlich nicht stehts ein Bildschirm mit mir rumtragen und jedesmal mit dem Handy via SSH auf den Pi zu verbinden und dann von da aus alles zu steuern würde zwar auch funktionieren, doch ist mir irgendwie noch zu umständlich. Denn auch wenn ich möglichst viel automatisch starten lasse mit dem System, so gibt es doch hier und da kleinere Aktionen, welche doch noch eine Interaktion erfordern und die sollen schnell und einfach über ein Webinterface erledigt werden.

In einem früheren Beitrag der Serie hab ich bereits beschrieben, wie ich Shell-Kommandos via PHP ausführen kann und somit hab ich die volle Kontrolle auch über das Webinterface – nur halt schöner und einfacher. Da die Kommandos aber immer länger und komplexer wurden, hab ich mich für ein Wrapper-Script in Bash entschieden. Dies nimmt mit 1-2 Argumenten einen Befehl entgegen und übersetzt diesen in die langen und teils etwas komplexeren Befehlen, mit welchen der Pi dann arbeiten kann. Somit zuerst mal mein Script unter /bin/hackpi:

#!/bin/bash
case "$1" in
        get_wlan_name) echo `iwconfig wlan0 |grep ESSID |cut -d'"' -f2`
        ;;

        get_wlan_mac) echo `ifconfig wlan0 |grep HWaddr |cut -d'r' -f3 |cut -d' ' -f2`
        ;;

        get_wlan_ip) echo `ifconfig wlan0 |grep inet |cut -d':' -f2 |cut -d' ' -f1`
        ;;

        get_lan_ip) echo `ifconfig $2 |grep inet |cut -d':' -f2 |cut -d' ' -f1`
        ;;

        get_lan_mac) echo `ifconfig $2 |grep HWaddr |cut -d'r' -f3 |cut -d' ' -f2`
        ;;

        get_status_forward) echo `cat /proc/sys/net/ipv4/ip_forward`
        ;;

        get_connected_clients) rm /tmp/ip; touch /tmp/ip; for ip in `cat /var/lib/dhcp/dhcpd.leases |grep 192.168.66 |cut -d' ' -f2 |sort |uniq`; do status=`nmap -sn $ip |grep Host |cut -d' ' -f3`; if [ $status = 'up' ]; then echo $ip >> /tmp/ip; fi; done
        cat /tmp/ip |sort |uniq |wc -l
        ;;

        set_forward) echo $2 > /proc/sys/net/ipv4/ip_forward
        ;;

        set_wlan_name) echo "interface=wlan0" > /etc/hostapd/hostapd.conf
        echo "driver=rtl871xdrv" >> /etc/hostapd/hostapd.conf
        echo "ssid=$2" >> /etc/hostapd/hostapd.conf
        echo "hw_mode=g" >> /etc/hostapd/hostapd.conf
        echo "channel=6" >> /etc/hostapd/hostapd.conf
        echo "macaddr_acl=0" >> /etc/hostapd/hostapd.conf
        echo "ignore_broadcast_ssid=0" >> /etc/hostapd/hostapd.conf
        /etc/init.d/hostapd restart > /dev/null
        ;;
esac

Also kann ich nun Aktionen ausführen oder eine Status abfragen über z.B. hackpi get_lan_ip. Dies verpacken wir nun in ein simples PHP-Script:

<html>
  <head>
    <meta http-equiv="refresh" content="10">
    <META http-equiv="refresh" content="10; URL=index.php">

    <style type="text/css">
      table {
        border-width: 1px;
        border-spacing: 0px;
        border-style: none;
        border-color: gray;
        border-collapse: collapse;
        background-color: white;
        border-radius: 5px;
        xborder-collapse: collapse;
      }
      table td {
        border-width: 1px;
        padding: 10px;
        border-style: solid;
        border-color: gray;
        background-color: white;
      }
    </style>
  </head>

  <body style="padding:10px;">
    <?php
      $connected_clients = exec('sudo /bin/hackpi get_connected_clients');
      $forward = exec('sudo /bin/hackpi get_status_forward');
      $wlan_name = exec('sudo /bin/hackpi get_wlan_name');
      $wlan_mac = exec('sudo /bin/hackpi get_wlan_mac');
      $wlan_ip = exec('sudo /bin/hackpi get_wlan_ip');
      $lan_ip = exec('sudo /bin/hackpi get_lan_ip eth0');
      $lan_mac = exec('sudo /bin/hackpi get_lan_mac eth0');
      $lan_ip_eth1 = exec('sudo /bin/hackpi get_lan_ip eth1');
      $lan_mac_eth1 = exec('sudo /bin/hackpi get_lan_mac eth1');

      switch ($_GET['action']) {
        case forward_on:
          exec('sudo /bin/hackpi set_forward 1');
          break;
        case forward_off:
          exec('sudo /bin/hackpi set_forward 0');
          break;
        case shutdown:
          exec('sudo shutdown -h now');
          break;
      }

      if (isset($_GET['wlan_name'])) {
        exec('sudo /bin/hackpi set_wlan_name '.$_GET['wlan_name'].'');
      }
    ?>

    <p>
      <?php
        echo "<table>";
          echo "<tr>";
            echo "<td colspan=\"2\"><center><b>WLAN</b></center></td>";
          echo "</tr>";
          echo "<tr>";
          echo "<form>";
              echo "<td style=\"width:60px\">WLAN</td>";
              echo "<td style=\"width:180px\"><input type=\"text\" name=\"wlan_name\" value=\"$wlan_name\"> <input type=\"submit\" value=\"GO\"> </td>";
          echo "</tr>";
          echo "<tr>";
            echo "<td style=\"width:60px\">IP</td>";
            echo "<td style=\"width:180px\">$wlan_ip </td>";
          echo "</tr>";
          echo "<tr>";
            echo "<td style=\"width:60px\">MAC</td>";
            echo "<td style=\"width:180px\">$wlan_mac </td>";
          echo "</form>";
          echo "</tr>";
          echo "<tr>";
            echo "<td style=\"width:60px\">Clients</td>";
            echo "<td style=\"width:180px\">$connected_clients </td>";
          echo "</tr>";
        echo "</table>";

        echo "<br />";

        echo "<table>";
          echo "<tr>";
            echo "<td colspan=\"2\"><center><b>LAN (eth0)</b></center></td>";
          echo "</tr>";
          echo "<tr>";
            echo "<td style=\"width:60px\">IP</td>";
            echo "<td style=\"width:180px\">$lan_ip</td>";
          echo "</tr>";
          echo "<tr>";
            echo "<td style=\"width:60px\">MAC</td>";
            echo "<td style=\"width:180px\">$lan_mac</td>";
          echo "</tr>";
        echo "</table>";

        echo "<br />";

        echo "<table>";
          echo "<tr>";
            echo "<td colspan=\"2\"><center><b>LAN (eth1)</b></center></td>";
          echo "</tr>";
          echo "<tr>";
            echo "<td style=\"width:60px\">IP</td>";
            echo "<td style=\"width:180px\">$lan_ip_eth1</td>";
          echo "</tr>";
          echo "<tr>";
            echo "<td style=\"width:60px\">MAC</td>";
            echo "<td style=\"width:180px\">$lan_mac_eth1</td>";
          echo "</tr>";
        echo "</table>";

        echo "<br />";

        echo "<table>";
          echo "<tr>";
            echo "<td colspan=\"2\"><center><b>ATTACKS<b></center></td>";
          echo "</tr>";
          echo "<tr>";
            echo "<td style=\"width:60px\">Forward</td>";
              if ($forward == 0) {
                echo "<td style=\"width:180px; text-align:Center;\"><a href=\"index.php?action=forward_on\"><img src=\"./off.png\"></a></td>";
              } else {
                echo "<td style=\"width:180px; text-align:Center;\"><a href=\"index.php?action=forward_off\"><img src=\"./on.png\"></a></td>";
              }
            echo "</tr>";
          echo "</table>";

          echo "<br />";

          echo "<table>";
            echo "<tr>";
              echo "<td colspan=\"2\"><center><b>SYSTEM</b></center></td>";
            echo "</tr>";
            echo "<tr>";
              echo "<td style=\"width:60px\">Status</td>";
              echo "<td style=\"width:180px; text-align:center;\"><a href=\"index.php?action=shutdown\"><img src=\"./on.png\"></a></td>";
            echo "</tr>";
          echo "</table>";
        ?>
      </p>
    </body>
</html>

Damit alles schön aussieht, braucht es noch einen ON– und einen OFF-Button. Dies kommt wiederum alles in den /var/www-Ordner und schon kann man seinen Pi über ein Webinterface steuern:

hackpi_1_0

Ein Kommentar bei „Raspberry Pi mit Kontroll-GUI

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.