Los servidores de recopilación de datos de puerto serie MOXA Nport y similares son actualmente el estándar de facto en el campo de los sistemas de construcción que transmiten o reciben datos a través de interfaces RS-232, RS-485 y RS-422.
Medidores de electricidad, válvulas controladas y válvulas de compuerta, medidores de flujo, sensores de vibración, dispositivos de telemecánica.
Todo lo que puede generar datos o controlarse de forma remota y tiene una interfaz RS-232, RS-485 y RS-422 funciona a través de estos convertidores.
El significado general de su uso suele ser el siguiente: reenviar las interfaces RS-232, RS-485 y RS-422 a través de una red local existente, conectar un dispositivo o dispositivo que tenga una de las interfaces seriales a una PC (servidor, SCADA) a través de Ethernet, conectarse al dispositivo Tener una interfaz en serie a través de Internet para control remoto, etc.
Los precios de estos convertidores no son muy altos, se pueden pedir prestados modelos más jóvenes por $ 100-200. Pero dado que en cualquier producción automatizada de tales dispositivos se pueden instalar cientos o incluso miles, está surgiendo un bonito tidbit para los "sustitutos de importación" nacionales.
Trataré de ayudarlos hoy.
Que haremos
En primer lugar, entenderemos la teoría de cómo está organizado dentro.
En segundo lugar, aislamos la funcionalidad mínima para comenzar a trabajar en modo Real Com (de hecho, para reenviar el puerto COM virtual al dispositivo a través de Ethernet).
En tercer lugar, por interés, analizaremos el protocolo para buscar y configurar el dispositivo a través de la utilidad NPort Administration Suite. Obtendremos una comprensión completa de cómo crear un análogo pin a pin de una pieza de hierro que se puede atascar en lugar del MOXA Nport existente, mientras recibe soporte completo del software y controlador nativos.
Y finalmente, intentemos calcular cuántos indios escribieron el código de firmware MOXA.
Parte 1. Introductoria
Entonces, tenemos un tema de prueba en nuestra mesa (en realidad había varios de ellos, así que no se sorprenda si ve diferentes identificadores de modelo y diferentes direcciones MAC en el artículo)

Tiene un puerto Ethernet y dos puertos RS-422 / RS-485, esto es físicamente.
Y en el plan del programa, en el dispositivo están abiertos:
Puerto UDP 4800: es responsable de capturar los paquetes de búsqueda del dispositivo y envía datos sobre el dispositivo a la utilidad de configuración.
Puerto TCP 4900: recibe comandos de configuración del dispositivo. La hora, el nombre, la dirección IP, el modo de funcionamiento, la configuración de velocidad y puerto del dispositivo y otros parámetros básicos del dispositivo se pueden configurar a través de este puerto, que se puede configurar a través de la interfaz principal de la utilidad NPort Administration Suite:

Puerto TCP 80: es responsable del funcionamiento de la interfaz WEB
Los puertos TCP 966, 967 (y 968, 969 para dispositivos de 4 puertos) son puertos de control de transmisión. Ejecutan comandos para abrir / cerrar el puerto COM correspondiente, establecer la velocidad del puerto, enviar datos, controlar la plenitud del búfer de transmisión / recepción, etc. El puerto 966 es responsable de la operación del primer puerto, respectivamente.
Los puertos TCP (por defecto) 950, 951, (y 952, 953 para dispositivos de 4 puertos) son puertos de transferencia de datos directos. Es decir, lo que debería aparecer directamente en el puerto RS-232/485/422 del dispositivo se transmite al puerto de datos. Solo el control de flujo de datos en este puerto va a los puertos 966, 967, 968, 969, respectivamente.
Espero que se haya desarrollado la imagen general de comprender el funcionamiento del dispositivo en mi cabeza. Pasemos a la siguiente parte:
Parte 2. Emular MOXA
Seguramente para muchos ya ha quedado claro que para pretender ser MOXA Nport en la configuración mínima, es necesario elevar un servidor TCP en su propio hardware en 2 puertos: 966 para el control de transmisión y 950 para la transmisión directa de datos. Naturalmente, tendrá que responder y procesar correctamente las solicitudes de controladores en el puerto 966, pero como lo muestra el análisis de Wirehark, no hay tantas solicitudes y son las más simples.
Para no sobrecargar el texto del artículo con cálculos que describen las solicitudes y respuestas, preparé y publiqué por separado en forma de archivo pdf una descripción de todas las solicitudes analizadas, respuestas y parámetros transmitidos.
Descargar: Descripción del protocolo que analiza MOXA.pdfEs decir, este conjunto de conocimientos le permite implementar un dispositivo que se puede emparejar con un controlador nativo y transmitir datos como MOXA. La mitad del trabajo está hecho, pero hay un punto: ¿cómo cambiar la configuración? Sería genial utilizar la utilidad nativa NPort Administration Suite para estos fines.
Parte 3. Busca y encuentra
Las dos primeras partes describieron lo que hay que hacer, pero no hubo una palabra sobre cómo obtener datos para la implementación de los protocolos.
En esta parte, profundizamos un poco más y vemos cómo se llevó a cabo el análisis del intercambio en sí.
Sabemos que el puerto UDP 4800 está abierto en el dispositivo, conectemos el dispositivo, ejecute NPort Administration Suite, Wireshark y veamos qué sucede al buscar dispositivos con la utilidad nativa.

Nos fijamos en los paquetes enviados:

Vemos que NPort Administration Suite envía una transmisión a la dirección 255.255.255.255, es decir, espera que el paquete vuele a través de la red.
El paquete de carga útil contiene datos:
01 00 00 08 00 00 00 00, : 01 00 – 00 08 – Big Endian. 00 00 00 00 –
Esta solicitud se envía varias veces, aparentemente con la esperanza de que al menos uno de ellos logre el objetivo.
Todos los MOX responden a esta solicitud.

Específicamente, nuestro respondió:
81 00 00 18 00 00 00 00 12 03 00 80 32 03 00 90 e8 26 4a ab c0 a8 7f fe 81 00 – 00 18 – (24) 00 00 00 00 – 12 03 00 80 32 03 – MOXA Nport device, NPort 5232. MOXA Nport device. NPort Administrator. 00 90 e8 26 4a ab – MAC MOXA Nport device c0 a8 7f fe – IP MOXA Nport device ( 192.168.127.254 )
Parece que todo es elemental simple, confunde solo el valor 12 03 00 80 32 03, que es responsable de la interpretación de un modelo de dispositivo específico.
Pero, dado que este valor se compara con alguna referencia de referencia, significa que debe almacenarse en algún lugar.
Después de estudiar un poco el directorio de software, encontramos que en NPort Administrator Suite v1.22 estos valores se almacenan en el archivo C: \ Archivos de programa \ NPortAdminSuite \ bin \ dsci.dll

Después de sentarnos con Wireshark y el dispositivo durante varios días, obtenemos un registro de intercambio completo y una comprensión de los códigos de función que responden. Por conveniencia, todo lo encontrado se describe en el mismo archivo pdf, cuyo enlace se indica en el artículo anterior.
Para una comprensión completa de la imagen, solo le recordaré que UDP 4800 recibe información primaria sobre el dispositivo, todos los parámetros que requieren configuración e instalación se configuran a través de solicitudes para el puerto TCP 4900.
Después de haber procesado correctamente todas las solicitudes entrantes para los puertos 4800 y 4900, podemos pretender completamente ser un dispositivo, por lo que incluso el software nativo no notará la captura.
Parte 4. Contando a los indios *
En el curso del análisis del protocolo, tuve la sensación de que diferentes partes del protocolo de intercambio fueron escritas por diferentes personas, el significado de las funciones y su interpretación son demasiado diferentes.
Entonces, por ejemplo:
Los códigos de función del puerto UDP 4800 comienzan con:
01 00 .. .. 81 00 .. .. 10 00 .. .. 90 00 .. .. 16 00 .. .. 96 00 .. .. 29 00 .. .. a9 00 .. ..
Los códigos de función del puerto TCP 4900 comienzan con:
00 01 .. .. 00 01 .. .. 02 01 .. .. 02 01 .. ..
y así sucesivamente
Los códigos de función de los puertos TCP 966, 967, 968, 969 comienzan con:
10 .. .. 10 4f 4b 11 .. .. 11 4f 4b
y así sucesivamente
Es decir, se utiliza un identificador de un solo byte de la función, y no un byte doble como antes.
Entonces, por cierto, salió un momento divertido. En los puertos 966, 967, 968, 969, la respuesta a los parámetros de configuración siempre consta de 3 bytes.
El primero es el número de función, y el 2 restante es 4f 4b o hay un aspecto en la tabla ASCII - "O" "K"
Bueno, está bien con él, adelante.
La segunda característica vista es un hash de Big and Little Endian dentro de la misma respuesta.
Ejemplo de respuesta:
9a 00 00 24 00 00 00 00 01 52 00 80 9a 52 00 90 e8 3b 89 9c 75 00 04 00 01 00 0f 00 09 00 17 00 36 00 00 00 9a 00 – 00 24 – (36) 00 00 00 00 – 01 52 00 80 9a 52 – MOXA Nport device 00 90 e8 3b 89 9c - MAC MOXA Nport device 75 00 - : 1900 + (1900 + 117 = 2017) 04 00 - : 1 - 01 00 – 0f 00 – (15) 09 00 – (9) 17 00 – (23) 36 00 – (36) 00 00 –
El tamaño del paquete se codifica de una manera, y todos los valores numéricos (año, mes, día ...) en otra. De esto podemos concluir que el procesamiento de la parte del usuario a partir de 75 00 04 00 ....... fue escrito por otro programador.
Para resumir: al menos 3 personas diferentes escribieron el protocolo de intercambio, 1 escribió el procesamiento de la parte de los datos del usuario y al menos 1 escribió el controlador de interfaz WEB. Según mis cálculos, unos 5 programadores trabajaron en el proyecto.
¿Cuánto contabas?
* En este caso, el término "hindú" significa un empleado que cumple con sus deberes para alimentos e hipotecas, que puede codificar desde aquí y antes del almuerzo sin realmente profundizar en los planes globales de la empresa del empleador.
PD: Este artículo fue escrito sobre materiales que se desarrollaron en 2017, por lo que muchos de los datos contienen dataciones precisamente este año. Los protocolos se examinaron en el marco de un borrador de trabajo, pero dado que la mente se impuso al marketing y el asunto no pasó de la etapa de un solo prototipo de trabajo. Publico todos los desarrollos de este proyecto en el dominio público, ya que creo que esta información será útil para la comunidad de desarrolladores.
PPS Artículo original como siempre en mi
blog personal