Datenerfassungsserver mit serieller Schnittstelle MOXA Nport und dergleichen sind derzeit der De-facto-Standard im Bereich der Gebäudesysteme, die Daten über RS-232-, RS-485- und RS-422-Schnittstellen senden oder empfangen.
Elektrizitätszähler, geregelte Ventile und Absperrschieber, Durchflussmesser, Vibrationssensoren, Telemechanikgeräte.
Alles, was Daten erzeugen oder ferngesteuert werden kann und über eine RS-232-, RS-485- und RS-422-Schnittstelle verfügt, funktioniert über diese Konverter.
Der allgemeine Verwendungszweck lautet normalerweise wie folgt: Weiterleiten der RS-232-, RS-485- und RS-422-Schnittstellen über ein vorhandenes lokales Netzwerk, Verbinden eines Geräts oder Geräts mit einer der seriellen Schnittstellen mit einem PC (Server, SCADA) über Ethernet mit dem Gerät eine serielle Schnittstelle über das Internet zur Fernsteuerung usw.
Die Preise für diese Konverter sind nicht sehr hoch, jüngere Modelle können für 100-200 US-Dollar ausgeliehen werden. Wenn man bedenkt, dass Hunderte oder sogar Tausende in jede automatisierte Produktion solcher Geräte eingebaut werden können, droht ein ziemlicher Leckerbissen für einheimische „Importersatzprodukte“.
Ich werde versuchen, ihnen heute zu helfen.
Was machen wir?
Erstens werden wir die Theorie verstehen, wie es im Inneren angeordnet ist.
Zweitens isolieren wir die Mindestfunktionalität, um mit der Arbeit im Real Com-Modus zu beginnen (dh, um den virtuellen COM-Port über Ethernet an das Gerät weiterzuleiten).
Drittens analysieren wir aus Gründen des Interesses das Protokoll für die Suche und Konfiguration des Geräts mit dem Dienstprogramm NPort Administration Suite. Wir erhalten ein umfassendes Verständnis dafür, wie Sie ein Pin-to-Pin-Analogon eines Eisens erstellen, das anstelle des vorhandenen MOXA Nport eingesetzt werden kann, und erhalten dabei die volle Unterstützung der nativen Software und des Treibers.
Und zum Schluss versuchen wir zu berechnen, wie viele Inder den MOXA-Firmware-Code geschrieben haben.
Teil 1. Einführung
Wir haben also ein Testobjekt auf dem Tisch (es gab tatsächlich mehrere davon, wundern Sie sich also nicht, wenn Sie im Artikel unterschiedliche Modell-IDs und unterschiedliche MAC-Adressen sehen).

Es hat einen Ethernet-Port und zwei RS-422 / RS-485-Ports - das ist physikalisch.
Und im Programmplan - auf dem Gerät sind geöffnet:
UDP-Port 4800 - Er ist für das Abfangen von Gerätesuchpaketen verantwortlich und sendet Daten über das Gerät selbst an das Konfigurationsdienstprogramm.
TCP-Port 4900 - Empfängt Gerätekonfigurationsbefehle. Zeit, Name, IP-Adresse, Betriebsmodus, Geschwindigkeit und Porteinstellungen des Geräts sowie andere grundlegende Parameter können über diesen Port konfiguriert werden. Diese können über die Hauptschnittstelle des NPort Administration Suite-Dienstprogramms konfiguriert werden:

TCP-Port 80 - ist für den Betrieb der WEB-Schnittstelle verantwortlich
Die TCP-Ports 966, 967 (und 968, 969 für 4-Port-Geräte) sind Übertragungssteuerungsports. Sie führen Befehle aus, um den entsprechenden COM-Port zu öffnen / schließen, die Port-Geschwindigkeit einzustellen, Daten zu übertragen, den Sende- / Empfangspuffer zu überwachen usw. Port 966 ist jeweils für den Betrieb des ersten Ports verantwortlich.
TCP-Ports (standardmäßig) 950, 951 (und 952, 953 für Geräte mit 4 Ports) sind direkte Datenübertragungsports. Das heißt, was direkt auf dem RS-232/485/422-Port des Geräts angezeigt werden soll, wird an den Datenport übertragen. Nur die Datenflusssteuerung in diesem Port geht an 966, 967, 968 bzw. 969 Ports.
Ich hoffe, dass sich das allgemeine Bild des Verstehens der Funktionsweise des Geräts in meinem Kopf entwickelt hat. Fahren wir mit dem nächsten Teil fort:
Teil 2. MOXA emulieren
Sicherlich ist vielen bereits klar geworden, dass, um sich in der Mindestkonfiguration als MOXA-Nport auszugeben, ein TCP-Server auf seiner eigenen Hardware auf 2 Ports installiert werden muss: 966 für die Übertragungssteuerung und 950 für die direkte Datenübertragung. Natürlich müssen Sie Treiberanforderungen auf Port 966 korrekt beantworten und verarbeiten, aber wie die Wireshark-Analyse zeigt, gibt es nicht so viele Anforderungen und sie sind die einfachsten.
Um den Text des Artikels nicht mit Berechnungen zu überladen, die die Anfragen und Antworten beschreiben, habe ich eine Beschreibung aller analysierten Anfragen, Antworten und übermittelten Parameter in Form einer PDF-Datei erstellt und separat veröffentlicht.
Download: Beschreibung des Protokolls zum Parsen von MOXA.pdfMit diesem Wissen können Sie ein Gerät implementieren, das mit einem nativen Treiber gekoppelt werden kann und Daten als MOXA überträgt. Die Hälfte der Arbeit ist erledigt, aber es gibt einen Punkt - wie kann man die Konfiguration ändern? Für diese Zwecke empfiehlt es sich, das native Dienstprogramm NPort Administration Suite zu verwenden.
Teil 3. Suchen und finden
In den ersten beiden Teilen wurde beschrieben, was zu tun ist, aber es gab kein Wort darüber, wie Daten für die Implementierung der Protokolle abgerufen werden können.
In diesem Teil werden wir etwas tiefer gehen und sehen, wie die Analyse des Austauschs selbst durchgeführt wurde.
Wir wissen, dass der UDP-Port 4800 auf dem Gerät geöffnet ist. Schließen Sie das Gerät an, führen Sie NPort Administration Suite und Wireshark aus und sehen Sie, was bei der Suche nach Geräten mit dem nativen Dienstprogramm geschieht.

Wir schauen uns die versendeten Pakete an:

Wir sehen, dass die NPort Administration Suite einen Broadcast an die Adresse 255.255.255.255 sendet, das heißt, sie hofft, dass das Paket über das Netzwerk fliegt.
Das Payload-Paket enthält Daten:
01 00 00 08 00 00 00 00, : 01 00 – 00 08 – Big Endian. 00 00 00 00 –
Diese Anfrage wird mehrmals gesendet, anscheinend in der Hoffnung, dass mindestens einer von ihnen das Ziel erreicht.
Alle MOXs antworten auf diese Anfrage.

Insbesondere antwortete unser:
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 )
Es scheint, dass alles elementar einfach ist, verwechselt nur den Wert 12 03 00 80 32 03, der für die Interpretation eines bestimmten Gerätemodells verantwortlich ist.
Da dieser Wert jedoch mit einer Referenzreferenz verglichen wird, bedeutet dies, dass er irgendwo gespeichert werden muss.
Nachdem wir uns ein wenig mit dem Softwareverzeichnis befasst haben, stellen wir fest, dass diese Werte in NPort Administrator Suite 1.22 in der Datei C: \ Programme \ NPortAdminSuite \ bin \ dsci.dll gespeichert sind

Nachdem wir mehrere Tage mit Wireshark und dem Gerät zusammen gesessen haben, erhalten wir ein vollständiges Austauschprotokoll und ein Verständnis dafür, welche Funktionscodes darauf reagieren. Der Einfachheit halber wird alles in derselben PDF-Datei beschrieben, auf die im vorherigen Artikel verwiesen wird.
Zum besseren Verständnis des Bildes möchte ich Sie nur daran erinnern, dass UDP 4800 primäre Informationen über das Gerät erhält. Alle Parameter, die eine Konfiguration und Installation erfordern, werden über Anforderungen für TCP-Port 4900 konfiguriert.
Nachdem wir alle eingehenden Anforderungen für 4800 und 4900 Ports korrekt verarbeitet haben, können wir uns als Gerät ausgeben, sodass selbst native Software den Haken nicht bemerkt.
Teil 4. Die Indianer zählen
Während der Analyse des Protokolls hatte ich das Gefühl, dass verschiedene Teile des Austauschprotokolls von verschiedenen Personen geschrieben wurden, die Bedeutung der Funktionen und deren Interpretation sind zu unterschiedlich.
Also zum Beispiel:
UDP Port 4800 Funktionscodes beginnen mit:
01 00 .. .. 81 00 .. .. 10 00 .. .. 90 00 .. .. 16 00 .. .. 96 00 .. .. 29 00 .. .. a9 00 .. ..
Funktionscodes für TCP-Port 4900 beginnen mit:
00 01 .. .. 00 01 .. .. 02 01 .. .. 02 01 .. ..
usw
Die Funktionscodes der TCP-Ports 966, 967, 968 und 969 beginnen mit:
10 .. .. 10 4f 4b 11 .. .. 11 4f 4b
usw
Das heißt, ein Einzelbyte-Bezeichner der Funktion wird verwendet und nicht wie zuvor ein Doppelbyte.
Dann kam übrigens ein lustiger Moment heraus. An den Ports 966, 967, 968, 969 besteht die Antwort auf das Einstellen von Parametern immer aus 3 Bytes.
Die erste ist die Funktionsnummer und die verbleibende 2 ist 4f 4b oder gibt es einen Blick in die ASCII-Tabelle - "O" "K"
Na gut mit ihm, mach weiter.
Das zweite Feature ist ein Hash von Big und Little Endian in derselben Antwort.
Beispiel beantworten:
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 –
Die Paketgröße wird auf eine Art und alle numerischen Werte (Jahr, Monat, Tag ...) auf eine andere Art und Weise codiert. Daraus können wir schließen, dass die Bearbeitung des Anwenderteils ab 75 00 04 00 ....... von einem anderen Programmierer geschrieben wurde.
Zusammenfassend: Mindestens 3 verschiedene Personen haben das Austauschprotokoll geschrieben, 1 hat die Verarbeitung des Benutzerteils der Daten geschrieben und mindestens 1 hat den WEB-Schnittstellen-Handler geschrieben. Nach meinen Berechnungen haben ungefähr 5 Programmierer an dem Projekt gearbeitet.
Wie viel hast du gezählt?
* In diesem Fall bezeichnet der Begriff „Hindu“ einen Mitarbeiter, der seine Pflichten für Lebensmittel und Hypotheken erfüllt und von hier aus und vor dem Mittagessen Code eingeben kann, ohne sich wirklich mit den globalen Plänen des Arbeitgeberunternehmens zu befassen.
PS Dieser Artikel wurde über Materialien geschrieben, die im Jahr 2017 in der Entwicklung waren, so dass viele der Daten aus genau diesem Jahr stammen. Die Protokolle wurden im Rahmen eines Arbeitsentwurfs geprüft, aber da der Verstand über das Marketing siegte und die Angelegenheit nicht über die Stufe eines einzelnen Arbeitsprototyps hinausging. Ich veröffentliche alle Entwicklungen zu diesem Projekt öffentlich, da ich glaube, dass diese Informationen für die Entwickler-Community nützlich sein werden.
PPS Originalartikel wie immer auf meinem
persönlichen Blog