Navigation

    Netgate Discussion Forum
    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search

    PfSense y puerto paralelo (LPT)

    Español
    2
    7
    734
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • I
      infoservi last edited by

      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!!

      1 Reply Last reply Reply Quote 0
      • bellera
        bellera last edited by

        ¡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.

        1 Reply Last reply Reply Quote 0
        • I
          infoservi last edited by

          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)
          1 Reply Last reply Reply Quote 0
          • bellera
            bellera last edited by

            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.

            1 Reply Last reply Reply Quote 0
            • I
              infoservi last edited by

              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!

              1 Reply Last reply Reply Quote 0
              • bellera
                bellera last edited by

                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=%E2%9C%93&q=%24gateways_status+%3D+return_gateways_status%28true%29%3B

                1 Reply Last reply Reply Quote 0
                • I
                  infoservi last edited by

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

                  Muchas gracias por toda la ayuda!

                  Saludos.

                  1 Reply Last reply Reply Quote 0
                  • First post
                    Last post