Ankündigung

Einklappen
Keine Ankündigung bisher.

Zwei Tabellen Vergleichen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Zwei Tabellen Vergleichen

    Sehr gehrte Damen und Herren,

    ich verzweifle. Ich habe mit Metsploit Tabellen in einer PostgreSQL Datenbank. So weit so gut nun möchte ihc das aus der Tabelle Host die IP Adressen auflisten auch dies ist kein Problehm nun zum Problehm :

    In der Tabelle Services befinden sich ports und Infomationen zu den Ports, diese sind an die IP Adresse gebunden, jedoch nur wenn ich die IP Addrese bei einer SQL Abfrage beifüge heißt:

    Code:
    SELECT hosts.address, services.port,services.name FROM hosts,services ORDER BY address ACS;
    wenn jetz als besipiel in der Tabelle Hosts die IP Addressen 127.0.0.1 und 127.0.0.2 drine sind und je zu 20 ports 10 pro ip dann bekomme ich die Ip Adresse und den Port.
    Das ist der Script:
    HTML-Code:
    <!DOCTYPE html>
    <?php
    require './include/sqlconn.php';
    $resul1 = pg_query($connection, "SELECT hosts.address,services.name,services.port,"
            . "services.state,services.info FROM hosts,services ORDER BY hosts.address");
    $resul2 =pg_query($connection,"SELECT hosts.address, services.port FROM hosts, services ORDER BY port");
    ?>
    <html>
        <head>
            <title>Portliste</title>
            <link rel="stylesheet" href="css/style.css" type="text/css" />
        </head>
        <body>
    
            <?php
            phpinfo();
            /*if (pg_connection_status($connection) == PGSQL_CONNECTION_OK) {
                $result = pg_query($connection, "SELECT * FROM public.hosts ORDER BY address");
    
                while ($qip = pg_fetch_row($result)) {
                    echo '<details class="bt">';
                    echo '<summary>' . $qip[2] . '</summary>';
                    echo '<table class="tg">';
                    echo '<tr>';
                    echo '<th>Link Name</th>';
                    echo '<th>OS Name</th>';
                    echo '<th>OS Arch</th>';
                    echo '<th>OS SP</th>';
                    echo '<th>OS Lang</th>';
                    echo '</tr>';
                    echo '<tr>';
                    echo '<td>' . $qip[5] . "</td>";
                    echo '<td>' . $qip[7] . "</td>";
                    echo '<td>' . $qip[11] . "</td>";
                    echo '<td>' . $qip[9] . "</td>";
                    echo '<td>' . $qip[10] . "</td>";
                    echo '</tr>';
                    echo '</table>';
                    echo '<details class=bi>';
                    echo '<summary>Ports</summary>';
                    echo '<table class="tg">';
                    echo '<tr>';
                    echo '<th>Name</th>';
                    echo '<th>Port</th>';
                    echo '<th>Info</th>';
                    echo '<th>State</th>';
                    echo '</tr>';
    
                    while ($arr = pg_fetch_row($resul1)) {
                        if ($arr[0] == $qip[2] ) {
                            echo '<tr>';
                            echo '<td> ' . $arr[1] . '</td>';
                            echo '<td> ' . $arr[2] . '</td>';
                            echo '<td> ' . $arr[4] . '</td>';
                            if ($arr[3] == "open") {
                                echo '<td style="background: mediumspringgreen">State: ' . $arr[3] . '</td>';
                            } else if ($arr[3] == "closed") {
                                echo '<td style="background: salmon">State: ' . $arr[3] . '</td>';
                            } else {
                                echo '<td style="background: yellow">State: ' . $arr[3] . '</td>';
                            }
                        }
                        echo '</tr>';
                    }
    
                    echo '</table>';
                    echo '</details>';
                    echo '</details>';
                }
            }
            else
            {
                echo '<p style=color red> Es konnte keine Verbindung zur Datenbank hergestellt werden oder es wurden keine daten gefunden.</p>';
            }*/
            ?>
        </body>
    </html>
    Es funcioniert alles nur nicht das ich pro IP Adresse die Ports ausgelesen bekomme. Das Problehm er schreibt die Ports alle zur ersten IP Sddresse. jedoch soll er dies nicht tun. Er soll alle Ports die zu einer IP gehören schreiben und so weiter.

    Ich hoffe ich konnte mein Problehm erklären.

    Vielen dank für die Hilfe im Vorraus

    Mit freundlich Grüßen

    Tommy135

  • #2
    du machst da einen cross join.

    Code:
    test=*# create table hosts(id serial primary key, ip inet);
    CREATE TABLE
    test=*# insert into hosts(ip) values ('127.0.0.1');
    INSERT 0 1
    test=*# insert into hosts(ip) values ('192.168.1.1');
    INSERT 0 1
    test=*# insert into hosts(ip) values ('10.10.10.10');
    INSERT 0 1
    test=*# create table services(ip inet, port int);
    CREATE TABLE
    test=*# insert into services values ('192.168.1.1',22);
    INSERT 0 1
    test=*# insert into services values ('192.168.1.1',25);
    INSERT 0 1
    test=*# insert into services values ('10.10.10.10',5432);
    INSERT 0 1
    test=*# insert into services values ('10.10.10.10',3306);
    INSERT 0 1
    
    test=*# select hosts.ip, array_agg(services.port) from hosts left join services on hosts.ip=services.ip group by hosts.ip;
         ip      |  array_agg  
    -------------+-------------
     10.10.10.10 | {5432,3306}
     127.0.0.1   | {NULL}
     192.168.1.1 | {22,25}
    (3 rows)
    
    test=*# select hosts.ip, services.port from hosts left join services on hosts.ip=services.ip ;
         ip      | port
    -------------+------
     10.10.10.10 | 5432
     10.10.10.10 | 3306
     127.0.0.1   |     
     192.168.1.1 |   22
     192.168.1.1 |   25
    (5 rows)
    
    test=*#
    hilft das?
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      Teilweise da die Datenbank Dynamisch geladen wird und die einträge durch Metasploit erstellt werden. Jedoch fand ich den ARRAY Teil sehr Interesant ich werdes damit versuchen. Aber Danke Trotzdem.

      Kommentar


      • #4
        gut, noch zum spielen:

        Code:
        test=*# select hosts.ip, array_agg(services.port order by port) from hosts left join services on hosts.ip=services.ip group by hosts.ip;
             ip      |  array_agg  
        -------------+-------------
         10.10.10.10 | {3306,5432}
         127.0.0.1   | {NULL}
         192.168.1.1 | {22,25}
        (3 rows)
        
        test=*# select hosts.ip, array_to_string(array_agg(services.port order by port),', ') from hosts left join services on hosts.ip=services.ip group by hosts.ip;
             ip      | array_to_string
        -------------+-----------------
         10.10.10.10 | 3306, 5432
         127.0.0.1   |
         192.168.1.1 | 22, 25
        (3 rows)
        
        test=*#
        sortiert die Ports und stellt sie als Textliste da.
        PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

        Kommentar


        • #5
          Ok ich versuch es mal. Danke für die Hilfe.

          Kommentar

          Lädt...
          X