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

  • Tommy135
    hat ein Thema erstellt Zwei Tabellen Vergleichen.

    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

  • Tommy135
    antwortet
    Ok ich versuch es mal. Danke für die Hilfe.

    Einen Kommentar schreiben:


  • akretschmer
    antwortet
    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.

    Einen Kommentar schreiben:


  • Tommy135
    antwortet
    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.

    Einen Kommentar schreiben:


  • akretschmer
    antwortet
    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?

    Einen Kommentar schreiben:

Lädt...
X