PfSense y puerto paralelo (LPT)



  • Estimados buenos días, hace un tiempo había consultado como podía hacer para que dependiendo del estado de las gateways me encendiera un led conectado al puerto paralelo de la pc.
    Pues bien he logrado hacer funcionar, el problema que tengo ahora es como hacer para ejecutar este script php como servicio en forma permanente, porque ahora si lo ejecuto desde el navegador funciona, pero no puedo hacer que lo ejecute el mismo pfsense.

    el script que hice es el siguiente (funciona bien desde el navegador):

    
    require_once("guiconfig.inc");
    require_once("pfsense-utils.inc");
    require_once("functions.inc");
    
    $a_gateways = return_gateways_array();
    $gateways_status = array();
    $gateways_status = return_gateways_status(true);
    $wan1 = "WAN_DHCP"; //Nombre de la wan 1
    $wan2 = "WAN2_PPPOE";
    
    //gateway wan2_pppoe arnet
    if ($gateways_status[$wan2]) {
    	if (stristr($gateways_status[$wan2]['status'], "force_down")) {
    		shell_exec("/usr/local/etc/lpt/pr23 3 on");
    		shell_exec("/usr/local/etc/lpt/pr23 2 off");
    	} elseif (stristr($gateways_status[$wan2]['status'], "down")) {
    		shell_exec("/usr/local/etc/lpt/pr23 3 on");
    		shell_exec("/usr/local/etc/lpt/pr23 2 off");
    	} elseif (stristr($gateways_status[$wan2]['status'], "delay")) {
    		shell_exec("/usr/local/etc/lpt/pr23 2 on");
    		shell_exec("/usr/local/etc/lpt/pr23 3 off");
    	} elseif ($gateways_status[$wan2]['status'] == "none") {
    		shell_exec("/usr/local/etc/lpt/pr23 3 off");
    		shell_exec("/usr/local/etc/lpt/pr23 2 off");
    	}
    } else {
    		shell_exec("/usr/local/etc/lpt/pr23 3 on");
    		shell_exec("/usr/local/etc/lpt/pr23 2 on");
    
    }
    
    //gateway wan_dhcp gigared
    if ($gateways_status[$wan1]) {
    	if (stristr($gateways_status[$wan1]['status'], "force_down")) {
    		shell_exec("/usr/local/etc/lpt/pr23 5 on");
    		shell_exec("/usr/local/etc/lpt/pr23 4 off");
    	} elseif (stristr($gateways_status[$wan1]['status'], "down")) {
    		shell_exec("/usr/local/etc/lpt/pr23 5 on");
    		shell_exec("/usr/local/etc/lpt/pr23 4 off");
    	} elseif (stristr($gateways_status[$wan1]['status'], "delay")) {
    		shell_exec("/usr/local/etc/lpt/pr23 4 on");
    		shell_exec("/usr/local/etc/lpt/pr23 5 off");
    	} elseif ($gateways_status[$wan1]['status'] == "none") {
    		shell_exec("/usr/local/etc/lpt/pr23 5 off");
    		shell_exec("/usr/local/etc/lpt/pr23 4 off");
    	}
    } else {
    		shell_exec("/usr/local/etc/lpt/pr23 5 on");
    		shell_exec("/usr/local/etc/lpt/pr23 4 on");
    
    }
    
    

    Como hago para que esta pagina (gw_leds.php) ejecute desde el pfsense.
    probé con Cron Jobs pero no funciona, o no logro hacer funcionar.
    Probé con Curl instalando en pfsense pero tampoco funciona.
    Probé con PHPservice instalando desde paquetes, pero tampoco.

    O puede ser que este haciendo mal algo en esta ultima parte.

    Espero sus comentarios,
    Saludos!!



  • ¡Curiosa aplicación!

    Supongo que se trata de un problema de permisos y/o de entorno, env

    Fíjate que los .inc los supones en un directorio en concreto. Si ejecutas esto desde un cron o desde consola seguramente tu PATH es incompleto.

    env | grep PATH

    ¿Qué arroja en consola el comando?

    php gw_leds.php

    Espero haberme explicado…

    En System: Advanced: Notifications: SMTP E-Mail puedes configurar alertas por e-mail. Cuando cambia el estado de una puerta te envía un correo. Evidentemente si sólo hay una puerta, mal asunto para recibir las notificaciones.



  • Hola, paso a contestar. Desde consola ejecutando php /usr/local/www/gw_leds.php me tira lo siguiente:

    
    [2.2.1-RELEASE][root@pfsense.infoservi.local]/root: php /usr/local/www/gw_leds.php
    Expires: 0
    Last-Modified: Sat, 04 Apr 2015 22:43:02 GMT
    Cache-Control: no-store, no-cache, must-revalidate
    Cache-Control: post-check=0, pre-check=0
    Pragma: no-cache
    X-Frame-Options: SAMEORIGIN
    Content-type: text/html
    
       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
                    <title>501</title>
    
                            [Potential DNS Rebind attack detected, see http://en.wikipedia.org/wiki/DNS_rebinding
    Try accessing the router by IP address instead of by hostname.](/index.php?logout)  [](/index.php?logout) 
    ``` [Si ejecuto env | grep /usr/local/www/gw_leds.php
    no me arroja nada.
    
    Ejecutando desde http://pfsense.infoservi.local/gw_leds.php, ejecuta bien los comandos que esta en el archivo php, o sea encienden los led correctamente.
    
    Saludos!](/index.php?logout)


  • Lo que te dije. Hay problemas con el entorno y/o inclusión de librerías.

    Prueba:

    fetch http://pfsense.infoservi.local/gw_leds.php
    

    o

    wget http://pfsense.infoservi.local/gw_leds.php
    

    fetch es el comando por defecto en FreeBSD. Supongo que estará disponible.

    wget no es el comando por defecto, pero igual está instalado.

    A ver si ejecutando así te funciona.



  • Estimado bellera paso a exponer lo que me devuelve al ejecutar los dos comandos que me indicas.

    el FETCH

    
    [2.2.1-RELEASE][root@pfsense.infoservi.local]/root: fetch http://pfsense.infoservi.local:8100/gw_leds.php
    fetch: http://pfsense.infoservi.local:8100/gw_leds.php: size of remote file is not known
    gw_leds.php                                           6709  B 6221 kBps 00m00s
    
    

    WGET

    
    [2.2.1-RELEASE][root@pfsense.infoservi.local]/root: wget http://pfsense.infoservi.local:8100/gw_leds.php
    --2015-04-06 09:52:41--  http://pfsense.infoservi.local:8100/gw_leds.php
    Resolving pfsense.infoservi.local (pfsense.infoservi.local)... 192.168.99.20
    Connecting to pfsense.infoservi.local (pfsense.infoservi.local)|192.168.99.20|:8100... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: unspecified [text/html]
    Saving to: 'gw_leds.php.1'
    
    gw_leds.php.1                 [ <=>                                 ]   6.55K  --.-KB/s   in 0.001s
    
    2015-04-06 09:52:41 (4.68 MB/s) - 'gw_leds.php.1' saved [6709]
    
    

    Pero no ejecuta lada del script, no encienden los leds.

    Ahora, si ejecuto con el path completo, podria llegar a funcionar? Poniendo el full path en todos los includes.

    Saludos!



  • Pues tendrás que hacer eso, a ver si resulta suficiente.

    Si eso no sirve igual lo mejor es que incluyas tu código dentro de gwib.inc

    https://github.com/pfsense/pfsense/blob/23cb405565539c2fa0c3db9eba052afce343f8a8/etc/inc/gwlb.inc

    En la línia 900 se llena el array gateways_status

    $gateways_status = return_gateways_status(true);
    

    Guarda el original y añade tu código por detrás de la línea 900. Creo que eso debería ser suficiente.

    O modifica la función return_gateways_status justo antes de su return (línea 479), pues se la llama en varios sitios:

    https://github.com/pfsense/pfsense/search?utf8=✓&q=%24gateways_status+%3D+return_gateways_status(true)%3B



  • Voy a hacer eso, después comento los resultados!

    Muchas gracias por toda la ayuda!

    Saludos.


Log in to reply