Vývoj ve Windows: sériový port přes SSH

Vývoj ve Windows: sériový port přes SSH
« kdy: 24. 11. 2020, 22:11:59 »
Ahoj, prosim o pomoc s vyvojem programu ve Windows (v linuxu to umim) aneb vim co chci, ale nevim jak na to. Program by mel umet nebo neumet nasledujici...

1. vytvorit virtualni seriovy port
2. pripojit se pres SSH jako client k definovanemu serveru pres uzivatelske jmeno a heslo
3. otevrit SSH kanal a preposilat pres nej data z virtualniho serioveho portu
4. nemusi mit GUI

Mel by nekdo nejaky napad jak na to?
Me osobne napadlo pouzit com0com jako emulaci serioveho portu a toho SSH klienta napsat v pythonu. Duvodem je to, ze s com0com uz jsem se v minulosti setkal a v pythonu pisu vsechno co chci aby bezelo na Windows. Prijde mi to ale jako dost kostrbaty reseni, protoze me by se nejvic libilo, kdybych pustil program. Vyskocilo by na me okno kam bych zadal uzivatelske jmeno, heslo, portu a dal OK. Dokud bych program nezavrel, tak by to fungovalo a mohl bych ho pustit i opakovane. Snad nechi tak moc ne? :)
Dik.
« Poslední změna: 24. 11. 2020, 22:22:33 od Petr Krčmář »


Vykook

  • ***
  • 126
    • Zobrazit profil
    • homepage
    • E-mail
Re:Vývoj ve Windows: sériový port přes SSH
« Odpověď #1 kdy: 25. 11. 2020, 17:06:19 »
Ja osobně bych to bral jako příležitost se podívat na .NET... předpokládám, že na to všechno tam budou nějaký knihovny.

Jose D

  • *****
  • 612
    • Zobrazit profil
Re:Vývoj ve Windows: sériový port přes SSH
« Odpověď #2 kdy: 25. 11. 2020, 18:25:33 »
Python3 a

Kód: [Vybrat]
import serial
import paramiko

?

EDIT: přehlídnul jsem, že jde o úplně virtuální seriový port. Nějak jsem očekával spíš něco jako serial port emulovaný FTDI. Takže nevím.
« Poslední změna: 25. 11. 2020, 18:27:42 od Jose D »

Re:Vývoj ve Windows: sériový port přes SSH
« Odpověď #3 kdy: 25. 11. 2020, 19:15:39 »
A co použít com0com a ssh jen pro vytvoření toho tcp tunelu?

Re:Vývoj ve Windows: sériový port přes SSH
« Odpověď #4 kdy: 25. 11. 2020, 19:51:11 »
Řešení se dá asi vygooglovat. zkuste:

  • serial port over ssh
  • serial port forwarding
  • serial port forwarding over TCP/IP
  • ...

Zdá se, že stačí použít socat + ssh + netcat anebo použít specializované nástroje jako remserial apod.

Mírná komplikace je, aby to běželo na Windows.

Netestováno  :)


Re:Vývoj ve Windows: sériový port přes SSH
« Odpověď #5 kdy: 25. 11. 2020, 21:23:38 »
Asi dost záleží na tom, jak moc si chcete zaprogramovat a případně vyhrát s Windows API, asynchronními operacemi a tak (overlapped I/O).

Můžete tunelovat určitý port přes SSH (pro SSH bude asi nejjednodušší spustit nějakou instanci SSH klienta, klidně i toho, co je ve Windows 10 nativně) a pak mezi tímto portem a portem sériovým ručně přeposílat data. Bohužel, Windows neumožňují použít volání poll() na cokoliv jiného než sockety (protože sockety v jejich podání nejsou přímo souborová handle). Asynchronní zápis/čtení (overlapped I/O) je pravděpodobně to, co hledáte. Je možné, že API kolem sériového portu bude umožňovat rozumným způsobem zjistit, zda-li v něm jsou nějaká data atd., takhle z hlavy se mi nic nevybavuje.

Trochu nechápu virtualitu toho sériového portu. Chcete jej mít virtuální pouze na testování, nebo i "v produkci"? Jaké zařízení bude zastupovat, resp. co se bude nacházet za ním?

RDa

  • *****
  • 1 152
    • Zobrazit profil
    • E-mail
Re:Vývoj ve Windows: sériový port přes SSH
« Odpověď #6 kdy: 25. 11. 2020, 23:12:23 »
Ty virtualni seriove proty se sitovym koncem existuji - napr. pro takovou HW krabicku, ktera pak tuneluje ten port do fyzickeho seriaku. Takze mozna bych sel cestou pouzit tyto drivery, vnutit jim se pripojit na localhost, tam vytvorit vlastni server a pak uz je to otazka predavani dat z/do ssh spojeni.

Re:Vývoj ve Windows: sériový port přes SSH
« Odpověď #7 kdy: 26. 11. 2020, 07:35:44 »
Ahoj a díky za názory. Asi se do toho pouštět sám nebudu a pokusím se sehnat programátora. Vysvětlení proč něco takového potřebuju je to, že používám pravěký program na komunikaci s průmyslovejma řídícíma jednotkama, který používaj z dnešního pohledu dost nestandartní komunikační protokol (kombinace IrLan a modbus). Aby se dalo k těmto jednotkám přistupovat odkudkoliv, pokud jsou připojeny k síti, mám napsaný SSH server, který umožňuje přetunelovat ten pravěkej program. Tohle funguje naprosto dokonale pro jednoho uživatele. Jenže ejhle, tenhle můj virtuální port funguje a uživatelů přibývá, nyní už to přesahuje rámec mých programátorských zkušeností.

Re:Vývoj ve Windows: sériový port přes SSH
« Odpověď #8 kdy: 26. 11. 2020, 11:06:05 »
Pro tenhle usecase by mohlo být docela vhodné Go. Je jednoduché, čte se to snadno jako Python, multiplatformní, takže to v tomhle případě klidně napíšete a odladíte v Linuxu a přeložíte pro Windows a mělo by to jet. Pokud nepožadujete UI a stačí vám parametry, je to program do 100 řádků. SSH client je součástí rozšířené standardní knihovny a k tomu použít knihovnu go-serial.

Taky jsem úplně nepochopil to založení virtuálního COM portu, očekával bych, že tam už prostě je a jenom se k němu připojí.

Re:Vývoj ve Windows: sériový port přes SSH
« Odpověď #9 kdy: 26. 11. 2020, 11:12:34 »
Mohl by jsi prozradit o co se vlastne jedna? Treba by to podstatne zjednodusilo situaci..

Re:Vývoj ve Windows: sériový port přes SSH
« Odpověď #10 kdy: 26. 11. 2020, 12:11:34 »
To založení virtuálního portu je proto, že ten pravěkej program může otevřít pouze COM1 - COM15. Je to fakt pravěk psanej v ještě starším Visual Basicu a v podstatě se s tím nedá už nic dělat.
Vývoj jde ale dál a tak jsem nechal napsat aplikaci v javě (kvůli portování na mobilní zařízení), která tento program supluje a ta používá pro připojení právě SSH. Jenže k ladění a vývoji je pořád ten pravěk lepší, protože ten je domyšlenej úplně do datailu, zatímco ta náhrada umí jen část. Ta appka s SSH ale umožňuje k jakýmukoliv zařízení v tom systému přistupovat odkukdoliv, protože přes username a heslo se vždy spojí se svým přiřazeným zařízením. Zkrátka každá ta věc se hodí na něco jinýho. Já jednoduše potřebuji využít možnosti toho dokonalého ladícího nástroje na vzdáleném zařízení s SSH. Hlavně bych chtěl současně pracovat s více zařízeníma, to je vlastně největší motivace tohoto vlákna.

Snad to jako vysvětlení stačí...
« Poslední změna: 26. 11. 2020, 12:14:01 od hazardrok »

Re:Vývoj ve Windows: sériový port přes SSH
« Odpověď #11 kdy: 26. 11. 2020, 12:18:15 »
Ahoj, možno by pomohla krabička sériový port na ethernet: napríklad Moxa NPort 5100 Series.