Newsgroup: it.comp.java
Titolo: Sniffer RS232

Salve,
vorrei sapere se e' possibile creare uno sniffer rs232 in java sotto XP ?
Volevo creare un monitor per controllare i programmi che colloquiano con la
seriale.
E' fattibile la cosa ?
Se si... mi date qualche spunto ?
Grazie
xoooox
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/


Io utilizzo un programma chiamato PORTMON per fare lo sniffing su 
RS232, funziona molto bene. Se proprio ti interessa farlo in java 
(magari per effettuare altre operazioni oltre lo sniffing), non so 
quanto possa essere facile...
Java non supporta nativamente il colloquio su RS232, e devi passare 
tramite una DLL scritta in C/C++ con JNI. Fortunatamente la SUN ha 
creato una libreria chiamata Java Communication API, che però per la 
piattaforma Windows ha abbandonato alla versione 2.0, versione che 
purtoppo ha un memory leak di notevoli dimensioni ogni qualvolta apri e 
chiudi una seriale (io ho un'applicazione che devo riavviare una volta 
al mese circa perchè va in OutOfMemoryException...). L'unica soluzione 
che ho trovato è stata scrivermi la mia DLL per colloquiare sulla 
seriale che ho in test intensivo proprio in questi giorni.
Un'altra libreria che trovi su internet, che dovrebbe essere totalmente 
uguale a Java Comm. API si chiama RX/TX, è open source e funziona bene. 
Io purtoppo non ho potuto utilizzarla perchè mi dava problemi con le 
web application sotto tomcat.
Purtoppo le soluzioni di cui sopra aprono la porta seriale d'interesse 
in uso esclusivo, cosicchè nessun altro può utilizzarla. Gli sniffer 
invece funzionano in una modalità chiamata "pass-through", e 
sostanzialmente si piazzano "a metà strada" tra la tua applicazione e 
la seriale, lasciando comunque la possibilità alla tua applicazione di 
utilizzare la seriale senza problemi.
Non saprei dirti quale sia il vero funzionamento che sta dietro ad uno 
sniffer, se utilizza qualche libreria di bassissimo livello dell'OS, 
qualche funzionalità dei chip USART/UART o se funziona tipo "proxy", 
accedendo in modo esclusivo alla seriale, ma "virtualizzandola" a più 
alto livello, in modo che la tua applicazione è convinta di aprire la 
seriale fisica, mentre apre la porta virtuale creata dallo sniffer, che 
poi redirige il traffico sulla seriale e viceversa...
Ad istinto l'ultima soluzione mi sembra la più ragionevole, anche se mi 
lascia dei dubbi sulla sua effettiva realizzabilità, visto che Windows 
ha già una mappatura di COMx da qualche parte e non credo sia possibile 
modificarla a runtime...
Mi spiace di non poterti dare più informazioni, spero però di esserti 
stato un po' utile! :)

 riavviare una volta al mese circa perchè va in OutOfMemoryException...).
Urca, sei sicuro di questa cosa?
Esistono delle "fonti ufficiali" che documentino questo problema?
E la SUN ha abbandonato il prodotto in questo stato? perche' io lo uso :(
Saluti
CarMas

 E la SUN ha abbandonato il prodotto in questo stato? perche' io lo uso :(
boh. io ai tempi (ormai quasi due anni fa) ho dovuto scegliere se
usare la libreria della Sun o RxTx. Dopo qualche smadonnamento ho
optato per RxTx.
Anche perche' se non sbaglio quella della Sun non esiste per Mac,
mentre RxTx e' stata portata su un sacco di piattaforme (cosa sempre
buona e giusta).
Ciao Jack