Newsgroup: it.comp.programmare
Titolo: un piccolo aiuto.

Salve.
Premetto che sono a digiuno di comunicazioni tra periferiche.
Ma non e' un problema, non si nasce imparati.
Vorrei fare un programmino per mettere in comunicazione un pc ed un
terminale orologio, di quelli usati dai dipendenti per rilevare le
presenze.
Strisciano con un badge a banda magnetica e il terminale memorizza
l'orario.
Il pc ed il terminale sono collegati in rete locale e posono comunicare
attraverso tcp/ip.
Vorrei potermi collegare a lterinale orologio per scaricare e registrare
in un file le timbrature dei dipendenti.
Dove posso trovare della documentazione per iniziare a fare una cosa del
genere?
Grazie.

presenze.
Be', ti serve la documentazione della ditta che fa quel terminale.
Volendo andare di hacking, fai un portscan sul terminale; ci sta che
abbia aperta la porta 23 o la 79 o la 80 (o, magari, la 443). A quel
punto ti ci colleghi in telnet e provi un po' a casaccio :-)
Leonardo
-- 
".signature": bad command or file name

 
Le porte di comunicazione sono la 2251 e la 2252.
Come faccio a collegarmi in telnet col terminale orologio?
Il terminale non ha un servizio del genere.


wrote:

Perche' due porte?
Prova comunque con:
	TELNET ip_del_terminale 2251
e a vedere che succede.


 	TELNET ip_del_terminale 2251
Gia' fatto, mi dice unable to connect connessione rifiutata.

 Gia' fatto, mi dice unable to connect connessione rifiutata.
   Forse non gli "piace" l'indirizzo ip dal quale ti connetti?
Probabilmente ha una lista di indirizzi consentiti che si
configura direttamente dal lettore con qualche procedura
particolare.
--
Totuccio.

 attraverso tcp/ip.
Questo come lo sai? C'è nella documentazione dell'apparecchiatura oppure hai
già
un programma che ci comunica? (e penso sia così, altrimenti come avresti
fatto a
scoprire le porte di trasmissione?)
Nel caso 2, potresti usare uno sniffer e cercare di capire il protocollo
("reverse protocolling" ? ;PP)
Spynet Sniffer, Essential NetTools, Comm View sono esempi di prg che
potrebbero tornarti utili.
Ciao! Davide DG.

 potrebbero tornarti utili.
Conosci qualcosa per linux?
Ciao

 
Ho provato anche dalla macchina sulla quale gira il software che si
occupa della connessione.
In telnet il terminale orologio non risponde.


wrote:


Uhm. Allora, se c'e' gia' un software che opera, si puo' tentare con
un packet sniffer (libpcap + tcpdump per Windows).


Conosci qualcosa per linux?
tcpdump! Probabilmente ce l'hai anche gia' installato.


 192.168.2.252.2251: . 277:323(46) ack 246 win 5840 13:10:05.052572
192.168.2.252.2251 > 192.168.2.171.2251: . ack 323 win 8438
(DF)13:10:05.371011 192.168.2.252.2251 > 192.168.2.171.2251: P 246:295(49)
ack 323 win 8438 (DF) 13:10:05.595022 192.168.2.171.2251 >
192.168.2.252.2251: . ack 295 win 5791

genere:
Allora, puoi fare in tre modi. Un sistema piuttosto vile e' cambiare
temporaneamente l'IP del PC che si occupa della connessione e dirgli
che il terminale ha come IP quello vecchio.
Poi dai a Linux l'IP vecchio. A questo punto, il PC si connettera' a
Linux credendo di collegarsi al terminale vecchio.
Il comando
	netcat -l -p 2251 -o /var/log/traffic-2251.log $CLKIP 2251 &
	netcat -l -p 2252 -o /var/log/traffic-2252.log $CLKIP 2252 &
oppure in /etc/inetd.conf
2251 stream tcp nowait root /usr/bin/netcat -o/var/log/x $CLKIP 2251
2252 stream tcp nowait root /usr/bin/netcat -o/var/log/y $CLKIP 2252
(killall -HUP inetd per far caricare i nuovi servizi)
crea due files in /var/log con il dump esadecimale del traffico.
Usando tcpdump:
tcpdump -s 1500 -nlx -i eth0 "port 2251 or port 2252" > /var/log/z
	-s 1500 = snarfa 1500 bytes a volta
	-n      = non converte i nomi, tanto frega assai
	-l      = line buffering, se no il ">" non funge
	-x      = dump hex
	-i eth0 = interfaccia da monitorare
Poi ti servira' uno script (so che c'e'), che converta /var/log/z in
qualcosa di piu' vmanamente leggibile :-)


 il terminale ha come IP quello vecchio.
Scusa non ho capito bene.
Dovrei dare temporaneamente al pc linux l'indirizzo ip di uno dei
terminali orologio ai quali il server si collega?


wrote:


No; gli dai l'indirizzo del PC che si occupa della connessione. Cosi',
il terminale non fara' obiezioni quando vedra' connessioni dall'IP che
vede di solito.
Al PC Windows (con un nuovo IP) dici che il terminale orologio ha come
IP il vecchio IP di quel PC. Cosi' il PC Windows mandera' i comandi al
PC Linux.
Esempio:
		Terminale	PC	Linux
Prima		.1		.2	.3
Config. PC	"Il terminale ha IP=.1"
Dopo		.1		.3	.2
Config. PC	"Il terminale ha IP=.2"
Quindi, se il PC Linux (.2) facesse da puro relay, funzionerebbe tutto
come prima; il PC Windows spedisce i dati a un certo IP, quel certo IP
risponde come fosse un orologio...
Solo che, oltre al puro relay, il PC salva tutto su un log :-)


 
Allora, il file risultante e' questo: 10:46:14.076728 192.168.2.171.2251 >
192.168.2.252.2251: . ack 213123 win 5840
                         4500 0028 2240 0000 4006 d198 c0a8 02ab c0a8 02fc
                         08cb 08cb 000e bf1f 0003 4083 5010 16d0 00c3 0000
                         3000 0000 0000
10:46:14.088546 192.168.2.171.2251 > 192.168.2.252.2251: . 0:46(46) ack 1
win 5840
                         4500 0056 2241 0000 4006 d169 c0a8 02ab c0a8 02fc
                         08cb 08cb 000e bf1f 0003 4083 5010 16d0 2f4b 0000
                         3000 0000 0000 0000 4c42 5832 3736 3300 0000 0000
                         4a4f 484f 0000 0000 0000 0000 0000 0000 0000 0000
                         0000 0000 0000
10:46:14.282908 192.168.2.252.2251 > 192.168.2.171.2251: . ack 46 win 7656
(DF)
                         4500 0028 3255 4000 8006 4183 c0a8 02fc c0a8 02ab
                         08cb 08cb 0003 4083 000e bf4d 5010 1de8 f97c 0000
                         0000 0000 0000
10:46:14.601329 192.168.2.252.2251 > 192.168.2.171.2251: P 1:50(49) ack 46
win 7656 (DF)
                         4500 0059 3355 4000 8006 4052 c0a8 02fc c0a8 02ab
                         08cb 08cb 0003 4083 000e bf4d 5018 1de8 a761 0000
                         3300 0000 0000 0000 0000 0000 0000 0000 0000 0000
                         4a4f 484f 0000 0000 0000 0000 0000 0000 0000 0000
a questo punto?
non ci capisco niente.

a questo punto?
Uhm. A questo punto si dovrebbe tentare di interpretare i dati a seconda di
cosa fanno i terminali. Speravo che il protocollo fosse ASCII ma non lo e':
192.168.2.252.2251: . ack 213123 win 5840
E..("@..@.......
..........@.P...
0.....
10:46:14.088546 192.168.2.171.2251 > 192.168.2.252.2251: . 0:46(46) ack 1
win 5840
E..V"A..@..i....
..........@.P...
0.......LBX2763.
JOHO............
......
10:46:14.282908 192.168.2.252.2251 > 192.168.2.171.2251: . ack 46 win 7656
(DF)
E..(2U@...A.....
......@....MP...
......
10:46:14.601329 192.168.2.252.2251 > 192.168.2.171.2251: P 1:50(49) ack 46
win 7656 (DF)
E..Y3U@...@R....
......@....MP...
3...............
JOHO............
...tranne quel LBX2763 e la sigla "JOHO", non saprei cavarne testa o croce.
Leonardo perplesso



LBX2763 e' la sigla che indica il modello del terminale orologio.
Accidenti, quindi non e' possibile comunicare con questi terminali?
Ciao.

Accidenti, quindi non e' possibile comunicare con questi terminali?
Diciamo che il reverse engineering non appare semplice.
Pero', limitandoci al payload TCP, vediamo passare poca roba:
171->252: 3000 0000 0000
171->252: 3000 0000 0000 0000 L B  X 2  7 6  3 00 0000 
	  0000 J O  H O  0000 0000 0000 0000 0000 0000
          0000 0000 0000 0000 0000
252->171: 0000 0000 0000 
252->171: 3300 0000 0000 0000 0000 0000 0000 0000 0000
          0000 J O  H O  0000 0000 0000 0000 0000 0000
          0000 0000
...dal che sembra che la sigla "JOHO" sia presente sempre nello stesso
punto del pacchetto. Il primo pacchetto, 171->252, potrebbe essere per
esempio il clock che s'annuncia.
Il primo byte e' un numero (30 hex = "0"). Quindi potremmo leggere:
	0, LBX2736, JOHO	= "Ciao, sono l'orologio".
	3, JOHO			= "Ti ho sentito".
...ora si tratta di vedere cosa passa da quei terminali quando avviene
una timbratura. Inoltre, servirebbe il dump DALL'INIZIO, non da quando
parte tcpdump.
Per esempio, si puo' spegnere orologio e terminale, lanciare tcpdump e
riaccendere orologio e terminale, e cosi' vedere cosa si dicono.
Leonardo


Scusa posso scriverti in privato?
L'indirizzo 
ser...@tin.it
 mi da qualche problema.
Ho ripetuto l'operzione spegnendo il pc che si occupa della connessione
ai terminali orologio prima di lanciare tcpdump.
Cosi' posso inviarti in allegato il file risultante.
Ciao.

L'indirizzo 
ser...@tin.it
 mi da qualche problema.
Si', ho visto. A quanto pare, TIN mi ha sospeso l'account.
Pazienta un paio di giorni, domani vedo di risolvere la questione.
Leonardo "dunque, la mannaia..."
