PL/SQL Ping

Il PL/SQL e' il linguaggio procedurale del diffuso database relazionale Oracle. In qualche caso si ha l'accesso ad una base dati ma non al sistema che lo ospita e questo limita i controlli possibili. Il PL/SQL e' ricco di funzionalita' per l'accesso ai dati ma sono presenti anche funzioni di rete che possono essere utilizzate per realizzare procedure di controllo sulla raggiungibilita' di sistemi e servizi.

Questa pagina spiega come effettuare il ping ed il controllo delle porte verso un host utilizzando il PL/SQL.

Accedendo via SQL ad una base dati le possibilita' di azione sul sistema ospite sono limitate. Tipicamente l'unica azione che si effettua direttamente sul sistema e' limitata all'uso dei package utl_file e dbms_output. In realta' i package del PL/SQL son

Codice

Il codice PL/SQL necessario e':

CREATE OR REPLACE FUNCTION ck_tcp(pHost VARCHAR2, pPort NUMBER DEFAULT 0) RETURN VARCHAR2 AUTHID DEFINER IS
        Conn utl_tcp.connection;
        lPort NUMBER;
    BEGIN
    IF (pPort = 0) THEN lPort:=1000; ELSE lPort:=pPort; END IF;
    Conn := utl_tcp.open_connection (pHost, lPort);
    utl_tcp.close_connection(Conn);
    dbms_output.put_line ('ck_tcp: Done port connection');
    RETURN 'OK';
    EXCEPTION 
    WHEN UTL_TCP.NETWORK_ERROR THEN
    IF (UPPER(SQLERRM) LIKE '%HOST%') THEN
        dbms_output.put_line ('ck_tcp: Host not reachable');
        RETURN 'ko';    
    ELSIF (UPPER(SQLERRM) LIKE '%LISTENER%') THEN
	IF (pPort = 0) THEN
            dbms_output.put_line ('ck_tcp: Done ping');
            RETURN 'OK';  
        ELSE
            dbms_output.put_line ('ck_tcp: Port not open');
            RETURN 'ko'; 
        END IF;      
    ELSE
        dbms_output.put_line ('ck_tcp: Unknown error');
        RAISE;
    END IF;
   END ck_tcp;
/

Una volta creata la procedura e' possibile utilizzarlo con:

set serveroutput on select ck_tcp('db.xenialab.com', 1521) from dual;

Richiamata senza parametri la funzione effettua con controllo sulla raggiungibilita' dell'host (ping), con un parametro viene invece contattata la porta TCP/IP indicata e consente di controllare la presenza di specifici servizi.
Per quanto riguarda Oracle le porte piu' comunemente utilizzate sono: 1521, 1525 e 1526. Altri servizi utili sono: 21 (FTP), 25 (SMTP), 80 (HTTP), 443 (HTTPS).

Note

Altri documenti di questo tipo su questa pagina. Hack


Titolo: PL/SQL Ping e controllo porte TCP/IP
Livello: Hack (5/5)
Data: 31 Ottobre 2012 - Halloween
Versione: 1.0.0 - 31 Ottobre 2012
Autore: mail [AT] meo.bogliolo.name