Configurar HAP+modem USB y HEX S juntos

Hola @diamuxin , pues el hAP (barato y con USB). Gestión de los SMS lo tienes en "Tools" y dentro "SMS". Si tienes alguna duda, ya sabes. Saludos.

PD: Queria poner un modem 4G de netgear que tengo, pero al final resolví los problemas de cobertura de GSM y fallos en la recepción de los SMS, poniendo el hAP en el exterior (caja estanca y bajo cubierta) y, sobretodo, quitando el "Dial On Demand".
 
Hola @diamuxin , pues el hAP (barato y con USB). Gestión de los SMS lo tienes en "Tools" y dentro "SMS". Si tienes alguna duda, ya sabes. Saludos.

PD: Queria poner un modem 4G de netgear que tengo, pero al final resolví los problemas de cobertura de GSM y fallos en la recepción de los SMS, poniendo el hAP en el exterior (caja estanca y bajo cubierta) y, sobretodo, quitando el "Dial On Demand".
Gracias por responder @ectoplasma y feliz navidad.

Pero mi pregunta no iba por el Mikrotik sino por el módem USB 4G/LTE que tienes pinchado en el hAP para manejar los SMS desde la herramienta /tools/SMS... ¿cuál es el modelo?

He pedido uno en Amz, el Huawei E8372 para probar y que tiene una API que permite gestionarlo con python y php. Además desde Mikrotik por "fetch" con un script que circula por ahí.

S@lu2.
 
Gracias por responder @ectoplasma y feliz navidad.

Pero mi pregunta no iba por el Mikrotik sino por el módem USB 4G/LTE que tienes pinchado en el hAP para manejar los SMS desde la herramienta /tools/SMS... ¿cuál es el modelo?

He pedido uno en Amz, el Huawei E8372 para probar y que tiene una API que permite gestionarlo con python y php. Además desde Mikrotik por "fetch" con un script que circula por ahí.

S@lu2.
Disculpa, lo leí rápido y no lo entendí bien. Pues es un Huawei E156G (tiene ya unos años, por si no lo encuentras). En la web de mikrotik creo que tienen una tabla de compatibilidad. Saludos!
 
Gracias por responder @ectoplasma y feliz navidad.

Pero mi pregunta no iba por el Mikrotik sino por el módem USB 4G/LTE que tienes pinchado en el hAP para manejar los SMS desde la herramienta /tools/SMS... ¿cuál es el modelo?

He pedido uno en Amz, el Huawei E8372 para probar y que tiene una API que permite gestionarlo con python y php. Además desde Mikrotik por "fetch" con un script que circula por ahí.

S@lu2.
El Huawei E156G es un modem 3G. En esa época Huawei usaba un protocolo "serial" (a veces se distinguen porque el nombre del modelo tiene una "s" al final) y en Mikrotik se montan como un ppp-client. Como Mikrotik lo trata como un verdadero modem pueden funcionar las herramientas asociadas como tool/sms.

Como inconveniente tienen, aparte de que la red 3G tiene los días contados, que esas conexiones ppp son lentas (me suena haber leído que en Mikrotik dan como máximo sobre unos 25 Mbps).

Yo tengo un Huawei K3772 desbloqueado, de los que venían hace años como línea de backup en los routers ADSL Huawei de Vodafone. En un hEX con RouterOS 6 he llegado a montarlo por ppp y funcionaba, aunque no llegué a probar los SMS. Curiosamente, en un hAP ac2 con RouterOS 7.6 no me lo reconoce.

Los actuales 4G suelen ser de tipo "hilink" (a veces tienen un sufijo "h" al final del nombre), que en realidad son mini-routers que al conectarlos se comportan algo así como un adaptador ethernet por usb, en el sentido de que es un interface de red por el que circula tráfico de red. Traen un pequeño firewall, un servidor dhcp y algunos incluso un pequeño punto de acceso wifi. Me da la impresión de que muchos son derivados del E3372 (que en sus primeras versiones había como modelos "h" y "s", e incluso se podía cambiar entre uno y otro modo con el firmware adecuado).

Yo tengo desde hace poco un Huawei K5161h (versión de hardware CL4E3372HM02) también de origen Vodafone, como conexión de backup. No tiene wifi, pero sí dos conectores para antenas externas que actualmente no uso.

El firmware (personalizado para Vodafone, muy limitado) no da acceso al NAT, pero soporta DMZ, por lo que con una línea Movistar y configurándole el APN movistar.es (que suministra ip pública), puedo abrir puertos en el Mikrotik.

Usando el API desde tool/fetch se puede averiguar la ip del pincho, para p.ej. actualizar un DDNS por http (usando tool/fetch con el parámetro no documentado src-address para elegir el interface por el que sale la petición), y así conservar el del ip/cloud para la conexión principal.

También funciona recibir y enviar sms con los scripts del foro de Mikrotik, aunque como no me interesa especialmente no lo he probado mucho.
 
Última edición:
El Huawei E156G es un modem 3G. En esa época Huawei usaba un protocolo "serial" (a veces se distinguen porque el nombre del modelo tiene una "s" al final) y en Mikrotik se montan como un ppp-client. Como Mikrotik lo trata como un verdadero modem pueden funcionar las herramientas asociadas como tool/sms.

Como inconveniente tienen, aparte de que la red 3G tiene los días contados, que esas conexiones ppp son lentas (me suena haber leído que en Mikrotik dan como máximo sobre unos 25 Mbps).

Yo tengo un Huawei K3772 desbloqueado, de los que venían hace años como línea de backup en los routers ADSL Huawei de Vodafone. En un hEX con RouterOS 6 he llegado a montarlo por ppp y funcionaba, aunque no llegué a probar los SMS. Curiosamente, en un hAP ac2 con RouterOS 7.6 no me lo reconoce.

Los actuales 4G suelen ser de tipo "hilink" (a veces tienen un sufijo "h" al final del nombre), que en realidad son mini-routers que al conectarlos se comportan algo así como un adaptador ethernet por usb, en el sentido de que es un interface de red por el que circula tráfico de red. Traen un pequeño firewall, un servidor dhcp y algunos incluso un pequeño punto de acceso wifi. Me da la impresión de que muchos son derivados del E3372 (que en sus primeras versiones había como modelos "h" y "s", e incluso se podía cambiar entre uno y otro modo con el firmware adecuado).

Yo tengo desde hace poco un Huawei K5661h (versión de hardware CL4E3372HM02) también de origen Vodafone, como conexión de backup. No tiene wifi, pero sí dos conectores para antenas externas que actualmente no uso.

El firmware (personalizado para Vodafone, muy limitado) no da acceso al NAT, pero soporta DMZ, por lo que con una línea Movistar y configurándole el APN movistar.es (que suministra ip pública), puedo abrir puertos en el Mikrotik.

Usando el API desde tool/fetch se puede averiguar la ip del pincho, para p.ej. actualizar un DDNS por http (usando tool/fetch con el parámetro no documentado src-address para elegir el interface por el que sale la petición), y así conservar el del ip/cloud para la conexión principal.

También funciona recibir y enviar sms con los scripts del foro de Mikrotik, aunque como no me interesa especialmente no lo he probado mucho.
Gracias por la info @Pakritik!

Efectivamente, adquirí para pruebas un Huawei E8372h (el hermano mayor del E3372h) que realmente tiene funciones de router (modo Hilink) y cuando lo pinchas en un hAP ac2 lo detecta como una interfaz LTE, te crea un cliente DHCP y crea una ruta con la distancia "n+1". Como línea Failover funciona bastante bien, pero claro, con la limitación de tener doble NAT y no crea ningún puerto en /system/port, cuando intentas activar la funcionalidad de recibir SMS (/tools/sms) te dice que el dispositivo no es compatible.

He probado a activar el modo "Stick" que en los modems USB de Huawei permite usarlo tal y como comentas, como módem exclusivamente pero es una tarea tediosa y sólo es posible hacerlo desde el entorno linux, engañando al módem con una aplicación llamada "usb-modeswitch" que permite pasar de modo CD (Storage mode) al modo "Stick" y ya usarlo con comandos AT.

Lo ideal sería modificar este USB con otro firmware (como sucede con el E3372s) preparado para tal efecto pero por desgracia no existe, ni en los foros rusos.

Probé también a usar un script creado para RouterOS que permite utilizar una API que incorporó Huawei en sus modems/routers USB para poder manejar esos equipos, pero yo no lo he conseguido ya que la autentificación necesaria para entrar en los equipos falla y por tanto no deja ni recibir SMS ni enviarlos.

Esa API sólo funciona a través de scripts python ejecutados desde Linux, pero no me sirve realmente de mucho ya que esas funciones quiero que lo haga desde RouterOS.

Tengo pedido un Huawei E156G de segunda mano (me llega esta semana) para probarlo como módem para la gestión de los SMS (recibir/enviar) que es donde más le veo atractivo al asunto, aunque el failover sea un poquito lento porque solo trabaja con la red UMTS (3G) y como bien dices, están desmantelándolo para reutilizar las frecuencias para el 5G.

@Pakritik, te agradecería si puedes que le hagas alguna prueba de SMS a tu E3372H actual (Vodafone K5661h) y me comentas como lo ves, aunque si está como Hilink seguramente no funcionará desde /tools/SMS. Respecto a lo que comentas de que funcionan los scripts con la API de Huawei, porfa cuelga algún ejemplo por que no he tenido narices de hacerlo funcionar... por ejemplo:

Bash:
:global recvSMS do={

    :local lteIP "192.168.8.1";
    :local getBetween do={

        :local posStart 0;
        :if ([:len $betweenStart] > 0) do={
            :set posStart [:find $inputString $betweenStart]
            :if ([:len $posStart] = 0) do={
                :set posStart 0
            } else={
                :set posStart ($posStart + [:len $betweenStart])
            }
        }

        :local posEnd 9999;
        :if ([:len $betweenEnd] > 0) do={
            :set posEnd [:find $inputString $betweenEnd];
            :if ([:len $posEnd] = 0) do={ :set posEnd 9999 }
        }

        :local result [:pick $inputString $posStart $posEnd];
        :return $result;
    }

    # get SessionID and Token via LTE modem API
    :local urlSesTokInfo "http://$lteIP/api/webserver/SesTokInfo";
    :local api [/tool fetch $urlSesTokInfo output=user as-value];
    :local apiData  ($api->"data");

    # pars SessionID and Token from API session data
    :local apiSessionID [$getBetween inputString=$apiData betweenStart="<SesInfo>" betweenEnd="</SesInfo>"];
    :local apiToken [$getBetween inputString=$apiData betweenStart="<TokInfo>" betweenEnd="</TokInfo>"];

    # header and data config
    :local apiHead "Content-Type:text/xml,Cookie: $apiSessionID,__RequestVerificationToken:$apiToken";
    :local recvData "<?xml version=\"1.0\" encoding=\"UTF-8\"?><request><PageIndex>1</PageIndex><ReadCount>20</ReadCount><BoxType>1</BoxType><SortType>0</SortType><Ascending>0</Ascending><UnreadPreferred>1</UnreadPreferred></request>";

    # recv SMS via LTE modem API with fetch
    /tool fetch  http-method=post output=user http-header-field=$apiHead url="http://$lteIP/api/sms/sms-list" http-data=$recvData;
}

:local arrData [ :toarray $recvSMS ];
:local varData ( $arrData->"data" );
:put [ $varData ];

S@lu2.
 
Última edición:
Hola, gracias por todos los comentarios. ¿No será más práctico, el dia que apaguen el 3g, pillar un router 4g mikrotik para los sms y la conexión de backup?

Saludos
 
Hola, gracias por todos los comentarios. ¿No será más práctico, el dia que apaguen el 3g, pillar un router 4g mikrotik para los sms y la conexión de backup?

Saludos
Yo tengo muchas ganas de ver los modelos nuevos con 5G. Este año deben presentar toda una gama nueva de chismes con esos módems. Serán caros, pero, con el tiempo, una muy buena alternativa/complemento a la fibra (si bien pienso que no la van a reemplazar ni de coña).

Saludos!
 
Hola, gracias por todos los comentarios. ¿No será más práctico, el dia que apaguen el 3g, pillar un router 4g mikrotik para los sms y la conexión de backup?

Saludos
Para mi son muy caros y para uso doméstico no me compensa.

P.ej., el hAP ac3 LTE6 kit cuesta casi el doble que el hAP ac3 normal (unos 207€ contra 114€ en getic), y eso que el LTE es más un hAP ac2 con carcasa grande que un hAP ac3 con LTE: sin antenas externas, sin PoE-in ni PoE-out, y con sólo 16 MB de almacenamiento contra 128 MB, con lo que no soporta WifiWave2.
 
@Pakritik, te agradecería si puedes que le hagas alguna prueba de SMS a tu E3372H actual (Vodafone K5661h) y me comentas como lo ves, aunque si está como Hilink seguramente no funcionará desde /tools/SMS. Respecto a lo que comentas de que funcionan los scripts con la API de Huawei, porfa cuelga algún ejemplo por que no he tenido narices de hacerlo funcionar...
Desde /tools/sms no me funciona, da error "Modem unsupported (6)". Este tipo de interface lte que monta es muy limitado, similar al que monta con tethering usb con un móvil android.

A mi ese script que pones me funciona tal cual (sólo tengo que cambiarle la ip a 192.168.9.1 que es la que usa mi modem):
Bash:
[admin@MikroTik] > $recvSMS

      status: finished
  downloaded: 0KiBC-z pause]
        data: <?xml version="1.0" encoding="UTF-8"?> <response> <Count>1</Count> <Messages>
              <Message> <Smstat>1</Smstat> <Index>40000</Index> <Phone>Movistar</Phone>
              <Content>Buenas noticias. Desde el 11&#x2F;01&#x2F;23, navegar  s sin l  mites con
              tu m  vil. Al agotar los datos incluidos, navegar  s a 2 Mb sin l  mite ni coste
              adicional &#40;en Roaming UE, l  mite 50 GB&#x2F;mes&#41;. Esperamos que lo
              disfrutes. Condiciones: https:&#x2F;&#x2F;www.movistar.es&#x2F;contratos</Content>
              <Date>2022-12-22 17:23:43</Date> <Sca></Sca> <SaveType>0</SaveType>
              <Priority>0</Priority> <SmsType>2</SmsType> </Message> </Messages> </response>

Algo que he observado estos días haciendo pruebas y que te puede servir de pista, es que creo que la petición que hacen esos scripts están pasando la cookie con el token de sesión con una sintaxis incorrecta. Si no me equivoco las cookies en la cabecera http van en el formato nombre=valor, pero los scripts sólo pasan el valor. Tal vez los firmware antiguos erán más tolerantes y eso ya no funciona.

Por ejemplo, capturando el tráfico con las herramientas de desarrolador del Edge (el firmware de mi modem no se lleva bien con Chrome, aunque con el Edge-Chromium sí), esta es la petición que hace la interface web para mostrar los sms:
Bash:
curl "http://192.168.9.1/api/sms/sms-list-contact" ^
  -H "Accept: */*" ^
  -H "Accept-Language: es,es-ES;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6" ^
  -H "Connection: keep-alive" ^
  -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8;" ^
  -H "Cookie: SessionID=j6ZESsEfeFxaV4WCELRicEPV3gEpejV0gZgk2UereNfX0Cbvzrk5d24edl6p00EpFoM7peSqkxSHfhPEPqsmArI8ZWv89P0dZ2m4s813ifb8KxuFQ01zKtuGRJtjlpyG" ^
  -H "Origin: http://192.168.9.1" ^
  -H "Referer: http://192.168.9.1/html/content.html" ^
  -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54" ^
  -H "X-Requested-With: XMLHttpRequest" ^
  -H "_ResponseSource: Broswer" ^
  -H "__RequestVerificationToken: OU4HpHG1Fe35yqsJNUnaeubDJgW0BAYX" ^
  --data-raw "^<?xml version=^\^"1.0^\^" encoding=^\^"UTF-8^\^"?^>^<request^>^<pageindex^>1^</pageindex^>^<readcount^>20^</readcount^>^<nonce^>9018f79a3bcd5e9d66ae75c4bf11a24ff0dfe779e9521a91e96a7f8f4384da4df1d04637315cd5d12185dcb93c21a5a592a7508016d869d7bad1d052c5fdd994fecaecaa822a5fde86826f33d25704d24ffb846f6c09ad372656fb7be6aaa239fb64e8cc6c39ebf3c98870a31a84890c6311ce329310e81198977ce97294974ae655864ee11bd76858a77514791326ef9aece31c0af2204af1498395b5d78070f1e52eafa086ffd245c42f02276242a642b7eb1c1d8939bd9ec1d65cbf442ff9f9c40ebb8f2c5263f317bdcdd36f31ed7cb4949a525af9454c574972b5b50cec29d3a2438c70701d07f0cc83a512871283014d6012e541de30d7074714cf2cd7^</nonce^>^</request^>" ^
  --compressed ^
  --insecure

Para arreglar eso, la línea
Bash:
    :local apiHead "Content-Type:text/xml,Cookie: $apiSessionID,__RequestVerificationToken:$apiToken";
debería ser algo así como
Bash:
    :local apiHead "Content-Type:text/xml,Cookie: SessionID=$apiSessionID,__RequestVerificationToken:$apiToken";
 
Desde /tools/sms no me funciona, da error "Modem unsupported (6)". Este tipo de interface lte que monta es muy limitado, similar al que monta con tethering usb con un móvil android.

A mi ese script que pones me funciona tal cual (sólo tengo que cambiarle la ip a 192.168.9.1 que es la que usa mi modem):
Bash:
[admin@MikroTik] > $recvSMS

      status: finished
  downloaded: 0KiBC-z pause]
        data: <?xml version="1.0" encoding="UTF-8"?> <response> <Count>1</Count> <Messages>
              <Message> <Smstat>1</Smstat> <Index>40000</Index> <Phone>Movistar</Phone>
              <Content>Buenas noticias. Desde el 11&#x2F;01&#x2F;23, navegar  s sin l  mites con
              tu m  vil. Al agotar los datos incluidos, navegar  s a 2 Mb sin l  mite ni coste
              adicional &#40;en Roaming UE, l  mite 50 GB&#x2F;mes&#41;. Esperamos que lo
              disfrutes. Condiciones: https:&#x2F;&#x2F;www.movistar.es&#x2F;contratos</Content>
              <Date>2022-12-22 17:23:43</Date> <Sca></Sca> <SaveType>0</SaveType>
              <Priority>0</Priority> <SmsType>2</SmsType> </Message> </Messages> </response>

Algo que he observado estos días haciendo pruebas y que te puede servir de pista, es que creo que la petición que hacen esos scripts están pasando la cookie con el token de sesión con una sintaxis incorrecta. Si no me equivoco las cookies en la cabecera http van en el formato nombre=valor, pero los scripts sólo pasan el valor. Tal vez los firmware antiguos erán más tolerantes y eso ya no funciona.

Por ejemplo, capturando el tráfico con las herramientas de desarrolador del Edge (el firmware de mi modem no se lleva bien con Chrome, aunque con el Edge-Chromium sí), esta es la petición que hace la interface web para mostrar los sms:
Bash:
curl "http://192.168.9.1/api/sms/sms-list-contact" ^
  -H "Accept: */*" ^
  -H "Accept-Language: es,es-ES;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6" ^
  -H "Connection: keep-alive" ^
  -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8;" ^
  -H "Cookie: SessionID=j6ZESsEfeFxaV4WCELRicEPV3gEpejV0gZgk2UereNfX0Cbvzrk5d24edl6p00EpFoM7peSqkxSHfhPEPqsmArI8ZWv89P0dZ2m4s813ifb8KxuFQ01zKtuGRJtjlpyG" ^
  -H "Origin: http://192.168.9.1" ^
  -H "Referer: http://192.168.9.1/html/content.html" ^
  -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54" ^
  -H "X-Requested-With: XMLHttpRequest" ^
  -H "_ResponseSource: Broswer" ^
  -H "__RequestVerificationToken: OU4HpHG1Fe35yqsJNUnaeubDJgW0BAYX" ^
  --data-raw "^<?xml version=^\^"1.0^\^" encoding=^\^"UTF-8^\^"?^>^<request^>^<pageindex^>1^</pageindex^>^<readcount^>20^</readcount^>^<nonce^>9018f79a3bcd5e9d66ae75c4bf11a24ff0dfe779e9521a91e96a7f8f4384da4df1d04637315cd5d12185dcb93c21a5a592a7508016d869d7bad1d052c5fdd994fecaecaa822a5fde86826f33d25704d24ffb846f6c09ad372656fb7be6aaa239fb64e8cc6c39ebf3c98870a31a84890c6311ce329310e81198977ce97294974ae655864ee11bd76858a77514791326ef9aece31c0af2204af1498395b5d78070f1e52eafa086ffd245c42f02276242a642b7eb1c1d8939bd9ec1d65cbf442ff9f9c40ebb8f2c5263f317bdcdd36f31ed7cb4949a525af9454c574972b5b50cec29d3a2438c70701d07f0cc83a512871283014d6012e541de30d7074714cf2cd7^</nonce^>^</request^>" ^
  --compressed ^
  --insecure

Para arreglar eso, la línea
Bash:
    :local apiHead "Content-Type:text/xml,Cookie: $apiSessionID,__RequestVerificationToken:$apiToken";
debería ser algo así como
Bash:
    :local apiHead "Content-Type:text/xml,Cookie: SessionID=$apiSessionID,__RequestVerificationToken:$apiToken";
Gracias por la respuesta, pero con este código modificando la cabecera http sigo teniendo el mismo error.

Código:
[admin@MikroTik] > $recvSMS
      status: finished
  downloaded: 0KiBC-z pause]
        data: <?xml version="1.0" encoding="UTF-8"?> <error>
              <code>100003</code> <message/> </error>

Según la tabla de errores:
100003: unauthorized

Este es el código que he vuelto a meter en el script:

Bash:
:global recvSMS do={

    :local lteIP "192.168.8.1";
    :local getBetween do={

        :local posStart 0;
        :if ([:len $betweenStart] > 0) do={
            :set posStart [:find $inputString $betweenStart]
            :if ([:len $posStart] = 0) do={
                :set posStart 0
            } else={
                :set posStart ($posStart + [:len $betweenStart])
            }
        }

        :local posEnd 9999;
        :if ([:len $betweenEnd] > 0) do={
            :set posEnd [:find $inputString $betweenEnd];
            :if ([:len $posEnd] = 0) do={ :set posEnd 9999 }
        }

        :local result [:pick $inputString $posStart $posEnd];
        :return $result;
    }

    # get SessionID and Token via LTE modem API
    :local urlSesTokInfo "http://$lteIP/api/webserver/SesTokInfo";
    :local api [/tool fetch $urlSesTokInfo output=user as-value];
    :local apiData  ($api->"data");

    # pars SessionID and Token from API session data
    :local apiSessionID [$getBetween inputString=$apiData betweenStart="<SesInfo>" betweenEnd="</SesInfo>"];
    :local apiToken [$getBetween inputString=$apiData betweenStart="<TokInfo>" betweenEnd="</TokInfo>"];

    # header and data config
    :local apiHead "Content-Type:text/xml,Cookie: SessionID=$apiSessionID,__RequestVerificationToken:$apiToken";
    :local recvData "<?xml version=\"1.0\" encoding=\"UTF-8\"?><request><PageIndex>1</PageIndex><ReadCount>20</ReadCount><BoxType>1</BoxType><SortType>0</SortType><Ascending>0</Ascending><UnreadPreferred>1</UnreadPreferred></request>";

    # recv SMS via LTE modem API with fetch
    /tool fetch  http-method=post output=user http-header-field=$apiHead url="http://$lteIP/api/sms/sms-list" http-data=$recvData;
}

:local arrData [ :toarray $recvSMS ];
:local varData ( $arrData->"data" );
:put [ $varData ];

He probado también estas variaciones del "Head", sin éxito.

Código:
:local apiHead "Content-Type:application/x-www-form-urlencoded,Cookie: SessionID=$apiSessionID,__RequestVerificationToken:$apiToken";

:local apiHead "Content-Type:application/x-www-form-urlencoded,Cookie: SessionID=$apiSessionID,__RequestVerificationToken:$apiToken,X-Requested-With: XMLHttpRequest";

He probado también por similitud con tu respuesta a cambiar la ruta de los sms por:
http://$lteIP/api/sms/sms-list-contact

Código:
# recv SMS via LTE modem API with fetch
    /tool fetch  http-method=post output=user http-header-field=$apiHead url="http://$lteIP/api/sms/sms-list-contact" http-data=$recvData;
}

Algún consejo?
Gracias.
 
Última edición:
Como nota al anterior post, cuando ejecuto esta parte del script:

Código:
{

:local getBetween do={
    # This is a basic parser, can be used for XML
    # It takes three parameters:
    # inputString - The main string
    # betweenStart - Text AFTER this point will be returned
    # betweenEnd - Text BEFORE this point will be returned
    :local posStart 0;
    :if ([:len $betweenStart] > 0) do={
    :set posStart [:find $inputString $betweenStart]
        :if ([:len $posStart] = 0) do={
            :set posStart 0
        } else={
            :set posStart ($posStart + [:len $betweenStart])
        }
    }

    :local posEnd 9999;
    :if ([:len $betweenEnd] > 0) do={
    :set posEnd [:find $inputString $betweenEnd];
    :if ([:len $posEnd] = 0) do={ :set posEnd 9999 }
    }

    :local result [:pick $inputString $posStart $posEnd];
    :return $result;
}

:local lteIP "192.168.8.1";

# get SessionID and Token via LTE modem API
:local urlSesTokInfo "http://$lteIP/api/webserver/SesTokInfo";
:local api [/tool fetch $urlSesTokInfo output=user as-value];
:local apiData  ($api->"data");

:put $apiData

Obtengo lo siguiente:

Código:
<?xml version="1.0" encoding="UTF-8"?><response><TokInfo>mSWpifhLgeKaRH09Y0004DLRNrFkL7nK</TokInfo><SesInfo>hpXXA2K6KZvted9vmzQaoIqqDXWfgV03erPTXYMg0mryICNjF6ORRMhDhkJ3kzKV0QaOYKvWOPJQEB8BmVxiQ0gduQ7e0KRN7K1XL3DmtzESoyg5AzSkxTWogB4WMczJ</SesInfo></response>

No se si tendrá que ver con lo de "SessionID=" que no me aparece en ese resultado.

S@lu2.
 
A mi la versión con SessionID= también me funciona, no así si pongo otro nombre.

La respuesta de /api/webserver/SesTokInfo en mi caso es similar a la tuya, así que el nombre de los tags xml no creo que sea el problema.

Con sms-list-contact me da error 100005, que creo que significa que la petición está mal formada, probablemente porque el xml de la petición tiene una sintaxis distinta. En esta página vienen muchos de los códigos de error.

De todas formas, creo que ya se donde está el problema. Los E8372h parece ser que necesitan obtener un segundo token usando usuario y contraseña para ciertas llamadas al api. En este post y los algunos de los siguientes del hilo hablan sobre eso (hay mezclados otros posts con scripts para E3372h).

Por lo que veo, hay que hacer una llamada más a /api/user/login pasándole un xml con una petición que contiene el usuario, la contraseña codificada y el tipo de contraseña. Esa petición se hace de la forma habitual, con la cookie SessionID y la cabecera __RequestVerificationToken.

Aparentemente hay dos tipos de contraseña (si no han aparecido más con el tiempo):

El tipo 3, que lleva la contraseña en base64 (en el ejemplo del post al que enlazo, es YWRtaW4=, que es admin en base64).

El tipo 4, que si no lo he interpretado mal es algo así como base64encode(hex(SHA256(user + base64encode(hex(SHA256(pass))) + token))).

O sea, que a la contraseña se le hace un sha256, se convierte a hex y luego a base64.
Luego a eso se le concatena por delante el usuario, por detrás el token, y al resultado se le vuelve a hacer un sha256, conversión a hex y luego a base64.

Todo eso habría que calcularlo por fuera y pegar el resultado en el script de RouterOS.

A partir de ahí se usaría un nuevo SessionID y un nuevo token que retorna /api/user/login.

Más o menos. o_O
 
Última edición:
Jeje, se me acaba de quedar la cara como una galleta campurriana :eek::eek:

Entiendo lo que dices, que las últimas versiones de los modems USB de Huawei utilizan otra forma de autenticarse para poder operar con ellos, de hecho, algunos programadores han conseguido conectar con la API de Huawei a través de scripts en python. Sin ir más lejos desde una máquina Debian sí he conseguido enviar SMS tomando como base este proyecto que enlazo, pero claro, lo ideal sería hacerlo con RouterOS y sacarle el máximo partido

Aparte del E8372h-155 (que ya voy a devolver), en este momento estoy probando un router 4G Huawei B311s-220 (me ha salido gratis) y que funciona igual y responde también a la API Huawei pero me reporta los mismos errores de autenticación (error 100003) desde RouterOS.

Mi nivel de programación es muy básico (veo que tu controlas bastante más jeje), voy a intentar entender como funcionan los scripts python y la herramienta "curl" pero lo veo bastante complicado.

Gracias de nuevo por tu interés y a ver si lo conseguimos ;)

S@lu2.
 
Disculpa, lo leí rápido y no lo entendí bien. Pues es un Huawei E156G (tiene ya unos años, por si no lo encuentras). En la web de mikrotik creo que tienen una tabla de compatibilidad. Saludos!
Hola @ectoplasma,

Ya me ha llegado el Huawei E156G, en principio parece que lo reconoce:

1672821552522.png


Código:
/system/resource/usb>  print detail
2   device="1-1" vendor="HUAWEI Technology" name="HUAWEI Mobile" vendor-id="0x12d1" device-id="0x1003" speed="480" usb-version=" 2.00"

Sin embargo, no aparece ninguna interfaz LTE ni tampoco veo el puerto en /system/ports.

¿A ti te lo reconoce plug & play? ¿qué versión de RouterOS tienes instalado en el mikrotik?

EDITO: le he hecho un Reset Configuration y ya lo reconoce como una interfaz ppp.

Gracias.
 
Última edición:
Jeje, se me acaba de quedar la cara como una galleta campurriana :eek::eek:

Entiendo lo que dices, que las últimas versiones de los modems USB de Huawei utilizan otra forma de autenticarse para poder operar con ellos, de hecho, algunos programadores han conseguido conectar con la API de Huawei a través de scripts en python. Sin ir más lejos desde una máquina Debian sí he conseguido enviar SMS tomando como base este proyecto que enlazo, pero claro, lo ideal sería hacerlo con RouterOS y sacarle el máximo partido

Aparte del E8372h-155 (que ya voy a devolver), en este momento estoy probando un router 4G Huawei B311s-220 (me ha salido gratis) y que funciona igual y responde también a la API Huawei pero me reporta los mismos errores de autenticación (error 100003) desde RouterOS.

Mi nivel de programación es muy básico (veo que tu controlas bastante más jeje), voy a intentar entender como funcionan los scripts python y la herramienta "curl" pero lo veo bastante complicado.

Gracias de nuevo por tu interés y a ver si lo conseguimos ;)

S@lu2.
En algunos huecos libres que he tenido estos días le he dedicado algo más de tiempo y tengo malas noticias.

Hay dos detalles en los que no me había fijado:

1. La contraseña tipo 4 no sólo usa sha256, sino que ese churro encriptado además depende del token y este va cambiando de cada vez, lo que impide que lo pudiéramos tener precalculado para un usuario y contraseña concreto. La solución sería implementar sha256 en un script en RouterOS (no parece imposible dado que alguien lo ha conseguido con md5, pero sería una auténtica tortura).

2. El obstáculo definitivo. Independiente del tipo de contraseña que haya que usar, la llamada /api/webserver/SesTokInfo que se usa en los modelos más antiguos (y como primer paso en los modernos) retorna los tokens en un xml como datos de respuesta de la petición http, lo que permite obtenerlos sin problema, pero /api/user/login los retorna en la cabecera de la respuesta http, y /tool/fetch no la expone, lo que ya es irresoluble.

Con lo que, hoy por hoy, una solución directa parece imposible.

Habría la posibilidad de conseguirlo indirectamente, usando una máquina que estuviera siempre disponible en la red local (p.ej. una Raspberry PI o un NAS que permita hospedar un servidor web) e implementar ahí un servicio web (o un servidor TCP) con su propio api y que hiciera de intermediario. Tanto se podría hacer todo a través de ahí, o sólo lo mínimo que no se pudiera hacer de otra forma, como el login, y el resto hacerlo directamente contra el Huawei.

Ni que decir tiene que esta opción desesperada requeriría un cierto esfuerzo, a parte de la infraestructura. :eek:
 
En algunos huecos libres que he tenido estos días le he dedicado algo más de tiempo y tengo malas noticias.

Hay dos detalles en los que no me había fijado:

1. La contraseña tipo 4 no sólo usa sha256, sino que ese churro encriptado además depende del token y este va cambiando de cada vez, lo que impide que lo pudiéramos tener precalculado para un usuario y contraseña concreto. La solución sería implementar sha256 en un script en RouterOS (no parece imposible dado que alguien lo ha conseguido con md5, pero sería una auténtica tortura).

2. El obstáculo definitivo. Independiente del tipo de contraseña que haya que usar, la llamada /api/webserver/SesTokInfo que se usa en los modelos más antiguos (y como primer paso en los modernos) retorna los tokens en un xml como datos de respuesta de la petición http, lo que permite obtenerlos sin problema, pero /api/user/login los retorna en la cabecera de la respuesta http, y /tool/fetch no la expone, lo que ya es irresoluble.

Con lo que, hoy por hoy, una solución directa parece imposible.

Habría la posibilidad de conseguirlo indirectamente, usando una máquina que estuviera siempre disponible en la red local (p.ej. una Raspberry PI o un NAS que permita hospedar un servidor web) e implementar ahí un servicio web (o un servidor TCP) con su propio api y que hiciera de intermediario. Tanto se podría hacer todo a través de ahí, o sólo lo mínimo que no se pudiera hacer de otra forma, como el login, y el resto hacerlo directamente contra el Huawei.

Ni que decir tiene que esta opción desesperada requeriría un cierto esfuerzo, a parte de la infraestructura. :eek:
Pues una pena la verdad.

Tengo un NAS con varios servicios, entre ellos un servidor web que utilizo para unas paginas que tengo para uso propio y también una máquina virtual con ubuntu-server que es la que he utilizado para probar los scripts con python3 con éxito ya que he conseguido enviar algún SMS.

Pero bueno, mis conocimientos para llegar a enlazarlo con RouterOS para la desencriptación del login se quedan bastante limitados, así que nada, toca esperar que algún gurú lo ponga en marcha.

Ahora tengo un modem bastante antiguo 3G (sin wifi) pero que a nivel de GSM/SMS funciona a las mil maravillas y he conseguido automatizarlo con un script para recibir los SMS y reenviarlos por Email ó SMS a los interesados, además de utilizarlo como sistema de notificaciones-backup si algún día se corta la fibra.

Lo jodido del asunto es que no he visto (y mira que he buscado) un módem USB 4G/5G que funcione igual (sin wifi, los pocos que hay llevan un AP incorporado) para utilizarlo también como Failover de mi línea FTTH principal, bueno me tendría que buscar un módem mini-pcie LTE de mikrotik pero ahora mismo está por las nubes.

Gracias de todas formas.
S@lu2.
 
Última edición:
Pues una pena la verdad.

Tengo un NAS con varios servicios, entre ellos un servidor web que utilizo para unas paginas que tengo para uso propio y también una máquina virtual con ubuntu-server que es la que he utilizado para probar los scripts con python3 con éxito ya que he conseguido enviar algún SMS.

Pero bueno, mis conocimientos para llegar a enlazarlo con RouterOS para la desencriptación del login se quedan bastante limitados, así que nada, toca esperar que algún gurú lo ponga en marcha.

Ahora tengo un modem bastante antiguo 3G (sin wifi) pero que a nivel de GSM/SMS funciona a las mil maravillas y he conseguido automatizarlo con un script para recibir los SMS y reenviarlos por Email ó SMS a los interesados, además de utilizarlo como sistema de notificaciones-backup si algún día se corta la fibra.

Lo jodido del asunto es que no he visto (y mira que he buscado) un módem USB 4G/5G que funcione igual (sin wifi, los pocos que hay llevan un AP incorporado) para utilizarlo también como Failover de mi línea FTTH principal, bueno me tendría que buscar un módem mini-pcie LTE de mikrotik pero ahora mismo está por las nubes.

Gracias de todas formas.
S@lu2.
Siempre puedes intentar conseguir un E3372h en Wallapop.

Así conseguí yo el K5161h, que aunque es algo antiguo, está nuevo y me salió por 24€ en total. Es cuestión de apatrullar por allí hasta que aparezca algo interesante.

La ventaja de que sea por USB es que con un extensor lo puedes reorientar con facilidad e incluso ponerlo a una cierta distancia del router.

Hay que tener cuidado con las bandas que soporte, por si es un modelo no europeo. Creo que eso depende del número de sufijo, y que los que sirven para aquí son el E3372h-153 (más antiguo) y el E3372h-320 (más moderno), aunque no estoy 100% seguro.
 
Última edición:
Arriba