- Serial over Ethernet (SoE) – zdalny dostęp do portów szeregowych przez sieć TCP/IP
- Do czego służy Serial over Ethernet?
- Architektura systemu
- SoE Server – udostępnianie portu szeregowego w sieci
- Opcje wiersza poleceń
- Przykłady użycia SoE Server
- SoE Client – terminalowy klient portu szeregowego
- Opcje wiersza poleceń
- Przykłady użycia SoE Client
- SoE Bridge – most między siecią a lokalnym portem
- Opcje wiersza poleceń
- Przykłady użycia SoE Bridge
- Serial Emulator – symulator urządzenia Cisco do testów
- Opcje wiersza poleceń
- Przykłady użycia Serial Emulator
- Szybki start – przepływ działania krok po kroku
- Bezpieczeństwo – SSL/TLS i autoryzacja
- Protokół komunikacyjny SoE
- Pliki konfiguracyjne
- Wymagania i instalacja
- Wersja Python
- Uruchomienie
- Podsumowanie
Serial over Ethernet (SoE) – zdalny dostęp do portów szeregowych przez sieć TCP/IP
Serial over Ethernet (SoE) to zestaw trzech programów napisanych w Pythonie, który umożliwia przezroczyste przenoszenie komunikacji portów szeregowych (COM/TTY) przez sieci TCP/IP. Dzięki SoE możesz podłączyć się do urządzenia z interfejsem RS-232 znajdującego się w innym pomieszczeniu, budynku, a nawet na innym kontynencie – tak, jakby było podłączone bezpośrednio do twojego komputera.
System składa się z trzech części: SoE Server obsługującego fizyczny port szeregowy i udostępniającego go w sieci, SoE Client będącego wbudowanym emulatorem terminala oraz SoE Bridge służącego do przenoszenia ruchu między siecią a lokalnym portem szeregowym lub pipe’em. Dodatkowo dostępny jest Serial Emulator – program symulujący urządzenie Cisco do celów testowych.
GitHub: github.com/IgorBrzezek/soe
Do czego służy Serial over Ethernet?
Tradycyjne porty szeregowe RS-232 pozwalają na połączenie na odległość zaledwie kilkudziesięciu metrów. SoE rozwiązuje ten problem, hermetyzując dane szeregowe w pakiety TCP/IP i przesyłając je przez standardową infrastrukturę sieciową. Znajduje to zastosowanie w wielu scenariuszach:
- Dostęp do urządzeń przemysłowych – sterowniki PLC, panele HMI, maszyny CNC wyposażone w port RS-232 mogą być obsługiwane zdalnie.
- Zarządzanie sprzętem sieciowym – łączysz się do konsol routerów i przełączników Cisco, MikroTik czy Juniper przez sieć LAN/WAN.
- Praca z maszynami wirtualnymi – SoE Bridge z obsługą Named Pipe pozwala na bezpośrednie połączenie z konsolą szeregową VM bez fizycznego portu.
- Centralizacja dostępu – jeden SoE Server może obsługiwać wielu klientów jednocześnie, co ułatwia zarządzanie dostępem do urządzeń w serwerowni.
- Bezpieczny zdalny dostęp – dzięki wbudowanemu szyfrowaniu SSL/TLS i autoryzacji hasłem.
Architektura systemu
System SoE składa się z trzech głównych komponentów współpracujących ze sobą przez sieć TCP/IP:
- SoE Server – działa na maszynie podłączonej fizycznie do urządzenia szeregowego. Nasłuchuje połączeń przychodzących na określonym porcie TCP i mostkuje ruch między siecią a portem COM/TTY lub Named Pipe.
- SoE Client – lekki klient terminalowy, który łączy się do SoE Server i udostępnia wbudowany emulator terminala ANSI. Idealny do bezpośredniej interakcji z urządzeniem.
- SoE Bridge – mostkowanie w drugą stronę: łączy się jako klient do SoE Server i przekazuje ruch do lokalnego portu szeregowego lub Named Pipe na swojej maszynie. Dzięki temu zewnętrzne programy terminalowe (PuTTY, MobaXterm) mogą korzystać z połączenia.
SoE Server – udostępnianie portu szeregowego w sieci
SoE Server (wersja 0.0.53) to program działający jako serwer TCP, który nasłuchuje połączeń przychodzących i mostkuje je do lokalnego portu szeregowego lub Named Pipe w systemie Windows. Obsługuje wielu klientów jednocześnie, ma zaawansowany interfejs TUI z podziałem ekranu oraz pełne wsparcie dla szyfrowania SSL/TLS.
Opcje wiersza poleceń
| Opcja | Opis | Domyślnie |
|---|---|---|
-p, --port |
Port TCP do nasłuchiwania | wymagany |
-a, --address |
Adres interfejsu do bindowania | 0.0.0.0 |
--comport |
Nazwa portu szeregowego (COM1, /dev/ttyUSB0) | – |
--namedpipe |
Nazwa Named Pipe (tylko Windows) | – |
--baud |
Prędkość transmisji (9600, 115200 itd.) | – |
--line |
Parametry linii: bity/parzystość/stop/flow (np. 8N1N) | – |
--pwd |
Hasło autoryzacji klientów | – |
--secauto |
Automatyczne generowanie certyfikatu SSL | wył. |
--sec CERT,KEY |
Własny certyfikat SSL i klucz | – |
--log PLIK[,new] |
Log systemowy (dodaj ,new do rotacji) | – |
--logdata PLIK |
Log surowych danych binarnych | – |
--showtransfer |
Podgląd ruchu: ascii|hex,in|out|all | – |
-b, --batch |
Tryb cichy, brak wyświetlania na konsoli | wył. |
--notui |
Wyłączenie interfejsu TUI (zwykły stdout) | wył. |
--cfgfile PLIK |
Wczytaj konfigurację z pliku | – |
Przykłady użycia SoE Server
# Podstawowe uruchomienie z portem COM1
python serial_server_0.0.53_LinWin.py --port 10001 --comport COM1 --baud 9600
# Serwer z szyfrowaniem SSL i hasłem
python serial_server_0.0.53_LinWin.py --port 8888 --comport /dev/ttyUSB0 --baud 115200 --secauto --pwd tajnehaslo
# Named Pipe dla maszyn wirtualnych (Windows)
python serial_server_0.0.53_LinWin.py --port 10001 --namedpipe MojaRura
# Praca z plikiem konfiguracyjnym
python serial_server_0.0.53_LinWin.py --cfgfile ./mojserwer.conf
SoE Client – terminalowy klient portu szeregowego
SoE Client (wersja 0.0.56) to program, który łączy się do SoE Server i udostępnia wbudowany emulator terminala ANSI. Obsługuje klawisze strzałek, klawisze funkcyjne F1-F12, zachowanie scrollingu oraz tryb pełnoekranowego TUI z paskiem statusu. Idealny do bezpośredniej interakcji z konsolą urządzenia.
Opcje wiersza poleceń
| Opcja | Opis | Domyślnie |
|---|---|---|
-H, --host |
Adres IP lub nazwa hosta serwera | wymagany |
-p, --port |
Port TCP serwera | wymagany |
--cfgfile |
Ścieżka do pliku konfiguracyjnego | – |
--keepalive |
Interwał KeepAlive w sekundach | 60 |
--pwd |
Hasło autoryzacji | – |
--secauto |
Automatyczne SSL/TLS | wył. |
--sec CERT,KEY |
SSL z własnymi certyfikatami | – |
--color |
Kolorowy pasek statusu | wł. |
--notui |
Wyłącz interfejs TUI (pasek statusu) | wył. |
--nohead |
Ukryj górny pasek tytułowy | wył. |
--echo |
Lokalne powtarzanie znaków (local echo) | wył. |
--count |
Licznik przesłanych bajtów | wył. |
--ask |
Tryb zapytania – pobierz info o serwerze i zakończ | – |
Przykłady użycia SoE Client
# Podstawowe połączenie
python serial_client_0.0.56_LinWin.py -H 192.168.1.10 -p 10001
# Połączenie szyfrowane z hasłem
python serial_client_0.0.56_LinWin.py -H 192.168.1.10 -p 10001 --secauto --pwd tajnehaslo
# Użycie pliku konfiguracyjnego
python serial_client_0.0.56_LinWin.py --cfgfile soeclient.conf
# Tryb zapytania o parametry serwera
python serial_client_0.0.56_LinWin.py -H 192.168.1.10 -p 10001 --ask
# Minimalny tryb bez TUI
python serial_client_0.0.56_LinWin.py -H 10.0.0.5 -p 2000 --notui --echo
SoE Bridge – most między siecią a lokalnym portem
SoE Bridge (wersja 0.0.70) to program działający w trybie klienta TCP względem SoE Server, ale zamiast wbudowanego terminala udostępnia lokalny port szeregowy lub Named Pipe. Dzięki niemu zewnętrzne aplikacje terminalowe (PuTTY, MobaXterm, HyperTerminal) mogą korzystać z połączenia, łącząc się do lokalnego portu utworzonego przez Bridge.
Opcje wiersza poleceń
| Opcja | Opis | Domyślnie |
|---|---|---|
-H, --host |
Adres IP serwera SoE | wymagany |
-p, --port |
Port TCP serwera | wymagany |
--comport |
Lokalny port szeregowy | – |
--namedpipe |
Lokalny Named Pipe (Windows) | – |
--baud, --line |
Parametry portu szeregowego | – |
--pwd |
Hasło autoryzacji | – |
--secauto |
Automatyczne SSL/TLS | wył. |
--sec CERT,KEY |
SSL z własnymi certyfikatami | – |
--ask |
Sprawdź stan serwera i zakończ | – |
--log, --logdata |
Ścieżki plików logu | – |
--showtransfer |
Podgląd przesyłanych danych | – |
-b, --batch |
Tryb cichy | wył. |
Przykłady użycia SoE Bridge
# Mostkowanie do lokalnego portu COM
python serial_bridge_0.0.70_LinWin.py -H 192.168.1.10 -p 10001 --comport COM17
# Połączenie z maszyną wirtualną przez Named Pipe
python serial_bridge_0.0.70_LinWin.py -H 192.168.1.50 -p 5000 --namedpipe VMSerial --showtransfer hex,all
# Bezpieczne połączenie przez internet
python serial_bridge_0.0.70_LinWin.py --host mojserwer.pl --port 8888 --comport /dev/ttyS0 --baud 115200 --secauto --pwd tajnehaslo
# Sprawdzenie statusu serwera
python serial_bridge_0.0.70_LinWin.py -H 192.168.1.50 -p 5000 --ask
Serial Emulator – symulator urządzenia Cisco do testów
Serial Emulator (wersja 0.0.7) to program, który symuluje fizyczne urządzenie sieciowe z interfejsem konsoli Cisco IOS. Odtwarza tryby User, Privileged i Config, rozpoznaje polecenia takie jak show version, show running-config, configure terminal, write memory itd. Jest niezastąpiony do testowania konfiguracji SoE bez posiadania fizycznego sprzętu.
Opcje wiersza poleceń
| Opcja | Opis | Domyślnie |
|---|---|---|
--comport PORT |
Fizyczny port szeregowy | – |
--namedpipe NAZWA |
Named Pipe (Windows) | – |
--baud |
Prędkość transmisji | 9600 |
--line |
Ustawienia linii | 8N1N |
--hostname NAZWA |
Symulowana nazwa hosta | device-sim |
--device-model |
Model urządzenia (show version) | IOS XE |
--enable-password |
Hasło do trybu enable | cisco |
--tui / --notui |
Interfejs TUI włącz/wyłącz | wł. |
--mono |
Tryb monochromatyczny | wył. |
--cmdfile PLIK |
Własny plik mapowania komend | emu_commands.txt |
Przykłady użycia Serial Emulator
# Symulacja na Named Pipe z interfejsem TUI
python serial_emu.py --namedpipe device-sim --tui
# Fizyczny port szeregowy z własną nazwą hosta
python serial_emu.py --comport COM3 --baud 115200 --hostname CoreRouter
# Tryb monochromatyczny
python serial_emu.py --namedpipe testpipe --mono
Szybki start – przepływ działania krok po kroku
Aby uruchomić system SoE i połączyć się do urządzenia szeregowego przez sieć, wykonaj następujące kroki:
- Po stronie urządzenia – na maszynie podłączonej do urządzenia szeregowego uruchom SoE Server:
python serial_server_0.0.53_LinWin.py --port 10001 --comport COM1 --secauto --pwd tajnehaslo - Po stronie klienta – na zdalnej maszynie uruchom SoE Client:
python serial_client_0.0.56_LinWin.py -H 192.168.1.10 -p 10001 --secauto --pwd tajnehaslo - Gotowe – widzisz konsolę urządzenia tak, jakbyś był podłączony lokalnie. Możesz wysyłać komendy i odbierać odpowiedzi.
Bezpieczeństwo – SSL/TLS i autoryzacja
SoE oferuje trzy poziomy bezpieczeństwa połączenia:
- RAW (domyślny) – czysty TCP bez szyfrowania. Tylko do użytku w zaufanej sieci lokalnej.
- Protected – autoryzacja hasłem (
--pwd). Hasło jest wymagane do nawiązania połączenia. - SSL/TLS – pełne szyfrowanie z certyfikatami. Możesz użyć
--secautodo automatycznego wygenerowania certyfikatu samopodpisanego lub--sec cert.pem,key.pemz własnymi certyfikatami.
Aby wygenerować własny certyfikat dla środowiska produkcyjnego:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -days 365 -nodes
Następnie użyj go w SoE Server:
python serial_server_0.0.53_LinWin.py --port 10001 --pwd tajnehaslo --sec /etc/ssl/certs/cert.pem,/etc/ssl/private/key.pem
Protokół komunikacyjny SoE
SoE używa własnego protokołu opartego na separatorze __#...#__. Protokół obsługuje wymianę wersji, autoryzację, synchronizację parametrów portu szeregowego oraz mechanizm KeepAlive:
| Komenda | Kierunek | Opis |
|---|---|---|
__#CL_VER_X.X#__ |
Klient -> Serwer | Identyfikacja wersji klienta |
__#BR_VER_X.X#__ |
Bridge -> Serwer | Identyfikacja wersji bridge |
__#SRV_VER_X.X#__ |
Serwer -> Klient | Odpowiedź z wersją serwera |
__#PWD_HASLO#__ |
Klient -> Serwer | Autoryzacja hasłem |
__#BADPWD#__ |
Serwer -> Klient | Odrzucenie hasła |
__#KEEPALIVE#__ |
Obie strony | Heartbeat / KeepAlive |
__#DISCONNECT#__ |
Obie strony | Eleganckie rozłączenie |
Pliki konfiguracyjne
Każdy z programów może korzystać z zewnętrznego pliku konfiguracyjnego w formacie INI. Priorytet ładowania: argumenty CLI (najwyższy) -> plik --cfgfile -> katalog domyślny. Przykładowa konfiguracja serwera (soeserver.conf):
[DEFAULT]
port = 10001
address = 0.0.0.0
comport = COM1
baud = 9600
line = 8N1N
pwd = zaq12wsx
secauto = False
debug = True
color = True
Wymagania i instalacja
Wersja Python
- Python 3.6 lub nowszy
- Biblioteka pyserial (
pip install pyserial) - Biblioteka cryptography (
pip install cryptography) – opcjonalnie, dla SSL - Biblioteka pywin32 (
pip install pywin32) – opcjonalnie, dla Named Pipe na Windows - System operacyjny: Windows lub Linux
Uruchomienie
pip install pyserial cryptography
python serial_server_0.0.53_LinWin.py --port 10001 --comport COM1 --baud 9600
Podsumowanie
Serial over Ethernet to kompletne i dopracowane rozwiązanie do zdalnego dostępu do urządzeń szeregowych przez sieć. Trzy części systemu – Server, Client i Bridge – pokrywają wszystkie potrzeby: od bezpośredniego podłączenia terminalem, przez mostkowanie do zewnętrznych programów, po zaawansowaną konfigurację z szyfrowaniem i autoryzacją. Dodatkowy Serial Emulator pozwala na testowanie całego systemu bez fizycznego sprzętu, co jest nieocenione podczas nauki i debugowania.
Dzięki cross-platformowej implementacji w Pythonie SoE działa zarówno na Windows, jak i na Linuxie, a dzięki modułowej architekturze można go łatwo dostosować do własnych potrzeb. Źródła dostępne są na GitHubie na licencji otwartej.
Źródła: github.com/IgorBrzezek/soe
