| Maggio 15, 2009, 12:37:34 |
|
gecco
|
 |
« Rispondi #15 on: Maggio 15, 2009, 12:37:34 » |
|
ho aggiunto la funzione per i log cosi' crea un file di log con dentro l'ora, il mac address e il nome a cui ha spammato #!/usr/bin/python
import os import string import time
start_bluetooth="echo 1 > /sys/bus/platform/devices/neo1973-pm-bt.0/power_on; echo 0 > /sys/bus/platform/devices/neo1973-pm-bt.0/reset; /etc/init.d/bluetooth start" os.system(start_bluetooth)
while 1>0: dev_scan = "hcitool scan" list_dev=os.popen(dev_scan) tot= list_dev.read() tot= tot.split("\n") tot.pop(0) tot.reverse() tot.pop(0) for dev in tot: dev=dev.split("\t") get_channel = "sdptool search --bdaddr " + dev[1] + " OPUSH | sed 's/ //g' | grep Channel | cut -d: -f 2" channel_scan=os.popen(get_channel) channel=channel_scan.read() print dev[1] + " " + channel[:-1] + " " + dev[2] if channel != "": send_file="obextool push file.txt " + dev[1] + " " + channel date=time.strftime("%Y/%m/%d-%H:%M:%S", gmtime()) log="echo \"" + date + " " + dev[1] + " " + dev[2] + "\" >> bluespam.log" print "sending file to \"" + dev[2] + "\"" print send_file send=os.system(send_file) os.system(log) time.sleep(80)
|
|
|
|
|
Logged
|
|
|
|
| Maggio 16, 2009, 12:22:47 |
|
gecco
|
 |
« Rispondi #16 on: Maggio 16, 2009, 12:22:47 » |
|
adesso fa i log in un database: #!/usr/bin/python import os import string import time import sqlite3 start_bluetooth="echo 1 > /sys/bus/platform/devices/neo1973-pm-bt.0/power_on; echo 0 > /sys/bus/platform/devices/neo1973-pm-bt os.system(start_bluetooth) con = sqlite3.connect("./bluespam.sql") while 1>0: dev_scan = "hcitool scan" list_dev=os.popen(dev_scan) tot= list_dev.read() tot= tot.split("\n") tot.pop(0) tot.reverse() tot.pop(0) for dev in tot: dev=dev.split("\t") get_channel = "sdptool search --bdaddr " + dev[1] + " OPUSH | sed 's/ //g' | grep Channel | cut -d: -f 2" channel_scan=os.popen(get_channel) channel=channel_scan.read() print dev[1] + " " + channel[:-1] + " " + dev[2] if channel != "": send_file="obextool push file.txt " + dev[1] + " " + channel cur = con.cursor() query = "INSERT INTO dev VALUES(NULL, CURRENT_TIMESTAMP, '" + dev[2] + "', '" + dev[1] + "');" cur.execute(query) con.commit() date=time.strftime("%Y/%m/%d-%H:%M:%S") log="echo \"" + date + " " + dev[1] + " " + dev[2] + "\" >> bluespam.log" print "sending file to \"" + dev[2] + "\"" send=os.system(send_file) os.system(log) time.sleep(120)
|
|
|
|
|
Logged
|
|
|
|
| Maggio 18, 2009, 12:19:14 |
|
gecco
|
 |
« Rispondi #17 on: Maggio 18, 2009, 12:19:14 » |
|
ho aggiunto la funzione per non mandare lo stesso file di continuo allo stesso dispositivo, ho fatto in modo che se il file e' stato inviato meno di mezz'ora fa, allora non lo manda. fa sempre uso del database, ho cambiato il formato del database della versione precedente, e anche il nome della tabella. per creare la tabella giusta basta fare: sqlite3 bluespam.sql "CREATE TABLE log(id INTEGER PRIMARY KEY ASC, timestamp INT, name TEXT, mac TEXT)" ed ecco il codice rivisitato: #!/usr/bin/python
import os import string import time import sqlite3
start_bluetooth="echo 1 > /sys/bus/platform/devices/neo1973-pm-bt.0/power_on; echo 0 > /sys/bus/platform/devices/neo1973-pm-bt.0/reset; /etc/init.d/bluetooth start" os.system(start_bluetooth) con = sqlite3.connect("./bluespam.sql")
while 1>0: dev_scan = "hcitool scan" list_dev=os.popen(dev_scan) tot= list_dev.read() tot= tot.split("\n") tot.pop(0) tot.reverse() tot.pop(0) for dev in tot: dev=dev.split("\t") get_channel = "sdptool search --bdaddr " + dev[1] + " OPUSH | sed 's/ //g' | grep Channel | cut -d: -f 2" channel_scan=os.popen(get_channel) channel=channel_scan.read() print dev[1] + " " + channel[:-1] + " " + dev[2] if channel != "": date=time.strftime("%s") send_file="obextool push file.txt " + dev[1] + " " + channel cur = con.cursor() query="SELECT COUNT(*) FROM log WHERE timestamp<" + str(date) + " AND timestamp>" + str(int(date)-1800) row=cur.execute(query) row = cur.fetchone() con.commit() print row[0] if row[0] == 0: cur = con.cursor() query = "INSERT INTO log VALUES(NULL, '" + date + "', '" + dev[2] + "', '" + dev[1] + "');" cur.execute(query) con.commit() print "sending file to \"" + dev[2] + "\"" send=os.system(send_file) time.sleep(120)
|
|
|
|
|
Logged
|
|
|
|
| Maggio 18, 2009, 05:18:41 |
Meluste
NeoPhysis testing
WebZine Editors
Hero Member
    
Posts: 1628
parlate sottovoce, potrebbero sentirci!!!!
|
 |
« Rispondi #18 on: Maggio 18, 2009, 05:18:41 » |
|
ora manca (come al solito) una bella interfaccina grafica scema e la possibilita di scegliere il file da mandare, poi il pacchetto e via!!!
|
|
|
|
|
Logged
|
io non reagisco alle provocazioni 
|
|
|
| Maggio 18, 2009, 05:23:56 |
|
gecco
|
 |
« Rispondi #19 on: Maggio 18, 2009, 05:23:56 » |
|
macche'... per cambiare il file basta mettere mano al codice  e poi non c'e' bisogno di interfaccia
|
|
|
|
|
Logged
|
|
|
|
| Maggio 18, 2009, 05:29:10 |
Meluste
NeoPhysis testing
WebZine Editors
Hero Member
    
Posts: 1628
parlate sottovoce, potrebbero sentirci!!!!
|
 |
« Rispondi #20 on: Maggio 18, 2009, 05:29:10 » |
|
era per fare il solito commento... quando mi servira fare dello spam, stai sicuro che mettero' mano al codice 
|
|
|
|
|
Logged
|
io non reagisco alle provocazioni 
|
|
|
| Maggio 19, 2009, 11:03:26 |
|
gecco
|
 |
« Rispondi #21 on: Maggio 19, 2009, 11:03:26 » |
|
allora, dopo alcuni test col mio vecchio nokia 6600 ho scoperto che macosx ha un'implementazione stramba di obex, il protocollo per trasferire i file. se ad esempio invio il file al nokia, se il nokia accetta il file, obexpush mi risponde con un "Sending file..." mentre se non rifiuta dice "reject" e qualcos'altro, oppure va in timeout. macosx non fa questa cosa, non va in timeout e se rifiuti il file risulta comunque come inviato. finora avevo effettuato test solo col mac, per comodita', mentre ora ho provato col nokia e ho scoperto queste robe. dunque ho modificato di nuovo il sorgente, e ora scrive il log del database se ha inviato effettivamente il file altrimenti non ci scrive nulla (il controllo con macosx fallisce ma non diciamolo a nessuno  ) e poi ho aggiunto delle variabili all'inizio del sorgente per specificare il file, il tempo tra le scansioni e il tempo di permanenza nel database (che io ho chiamato offset ma non sapevo come chiamarlo, e' quel tempo che ti dice "se hai inviato meno di tot tempo fa il file a quel device, allora non mandarglielo") inoltre adesso in output da dei messaggi piu' chiari e con il timestamp davanti (questo per avere, in futuro, dei log piu' dettagliati) il database in fondo lo usa solo per fare il controllo che il file sia stato inviato o meno in un lasso di tempo noto ecco il codice: #!/usr/bin/python
import os import string import time import sqlite3
cfg_file="file.txt" cfg_looptime=120 cfg_offset=300
start_bluetooth="echo 1 > /sys/bus/platform/devices/neo1973-pm-bt.0/power_on; echo 0 > /sys/bus/platform/devices/neo1973-pm-bt.0/reset; /etc/init.d/bluetooth start" os.system(start_bluetooth) con = sqlite3.connect("./bluespam.sql")
while 1>0: dev_scan = "hcitool scan" print time.ctime() + " scanning for device..." list_dev=os.popen(dev_scan) tot= list_dev.read() tot= tot.split("\n") tot.pop(0) tot.reverse() tot.pop(0) for dev in tot: dev=dev.split("\t") get_channel = "sdptool search --bdaddr " + dev[1] + " OPUSH | sed 's/ //g' | grep Channel | cut -d: -f 2" channel_scan=os.popen(get_channel) channel=channel_scan.read() print time.ctime() + " Found: \"" + dev[2] + "\"", if channel != "": date=time.strftime("%s") send_file="obextool push " + cfg_file + " " + dev[1] + " " + channel cur = con.cursor() query="SELECT COUNT(*) FROM log WHERE timestamp<" + str(date) + " AND timestamp>" + str(int(date)-cfg_offset) row=cur.execute(query) row = cur.fetchone() con.commit() if row[0] == 0: print "not present in database. try to send " + cfg_file elif row[0] > 0: print "present in database. not sending file" if row[0] == 0: send=os.popen(send_file) send_output=send.read() if send_output[:-1] == "Sending object ...": cur = con.cursor() query = "INSERT INTO log VALUES(NULL, '" + date + "', '" + dev[2] + "', '" + dev[1] + "');" cur.execute(query) con.commit() print time.ctime() + " " + cfg_file + " sent to \"" + dev[2] + "\"" else: print time.ctime() + " \"" + dev[2] + "\" reject " + cfg_file time.sleep(cfg_looptime)
|
|
|
|
|
Logged
|
|
|
|
| Maggio 19, 2009, 01:09:05 |
|
facs
|
 |
« Rispondi #22 on: Maggio 19, 2009, 01:09:05 » |
|
evvai di spam bluetooth 
|
|
|
|
|
Logged
|
Distro Flash: 2008.12 SD: QTmoko V19 +++++++[>++++++++++<-]>.<++++++++++[>+++<-]>---.++.++++++++++++++++.
|
|
|
| Maggio 22, 2009, 12:42:06 |
|
gecco
|
 |
« Rispondi #23 on: Maggio 22, 2009, 12:42:06 » |
|
grandi evoluzioni ora ho aggiunto la possibilita' di specificare il nome del file da inviare tramite una varabile da passare allo script, per lanciarlo quindi va usato tipo python bluespam.py file.txt questa mia genialata', di una semplicita' indicibile, mi ha portato diversi vantaggi, diverse feature che non sapevo come implementare. inoltre ho aggiunto un secondo di pausa dopo il coso che lancia il demone e accende l'antenna perche' a volte non faceva in tempo e quindi ritornava un errore, cosi' nonlo fa piu' inanzitutto il codice puo' essere scaricato da http://minucci.net/file/bluespam.pyla feature che voleva era la possibilita' di mandare due file diversi nello stesso tempo (o quasi) ma anche fare il solito controllo che il file non sia stato inviato allo stesso dispositivo bluetooth prima di un tot di tempo le novita' introdotte nel codice e' che lui crea, dentro il database, una nuova tabella per ogni file, tipo se lancio ./bluetooth.py file.txt lui crea una tabella chiamata file_txt (il . infastidisce le query) con dentro i soliti log, e fa la stessa cosa se lo faccio con un altro file e' semplicissima come soluzione  il resto e' sempre uguale l'altro problema e' che un solo processo puo' impegnare il bluetooth questo ostacolo viene arginato facendo uso di un po' di fortuna e lanciando i due processi (o piu' processi) in momenti diversi per cui, se hai culo, non agiranno contemporaneamente sul device bluetooth adesso e' da testare cosa succede se capita la sfiga di impegnarli contemporaneamente (non vorrei che magari da errore ed esce dallo script python)
|
|
|
|
|
Logged
|
|
|
|
| Maggio 23, 2009, 08:33:36 |
|
gecco
|
 |
« Rispondi #24 on: Maggio 23, 2009, 08:33:36 » |
|
allora quando due processi tentano di accedere contemporaneamente, o quasi, al device bluetooth, uno dei due processi, l'ultimo arrivato ovviamente, dice: Inquiry failed: No such device e pero' non si ferma, ci riprova al loop successivo inoltre ho cambiato la query della creazione della tabella in: query="CREATE TABLE IF NOT EXISTS " + table_name + "(id INTEGER PRIMARY KEY ASC, timestamp INT, name TEXT, mac TEXT)" cosi' la crea solo se non esiste gia', altrimenti dava errore e usciva dallo script (cosa che voglio evitare) tutto il file e' possibile sempre scaricarlo da http://www.minucci.net/file/bluespam.pyinoltre ho fatto in modo che rimuove, nella tabella del database, i - visto che poi si impallano le query inolto ho scritto un primo visualizzatore di log rudimentale (in futuro voglio implementarlo in qualche altra maniera... boh): #!/usr/bin/python
import string import time import sqlite3
con = sqlite3.connect("./bluespam.sql")
cur = con.cursor() query="SELECT name FROM sqlite_master WHERE type = 'table'" cur.execute(query) tables=cur.fetchall()
for table_name in tables: query="SELECT * FROM " + str(table_name[0]) + " ORDER BY timestamp" cur.execute(query) data=cur.fetchall() print "file " + str(table_name[0]) for stuff in data: print time.ctime(int(stuff[1])) + " - sent to \"" + str(stuff[2]) + "\""
|
|
|
|
« Last Edit: Maggio 23, 2009, 09:12:11 by gecco »
|
Logged
|
|
|
|
| Maggio 23, 2009, 09:48:00 |
|
gecco
|
 |
« Rispondi #25 on: Maggio 23, 2009, 09:48:00 » |
|
ho dovuto modificare di nuovo una query, quella che fa il controllo se il device "vittima" c'e' gia' nell'elenco o no. nel caso in cui il programma trova due o piu' device, lui fa il controllo solo sulla prima e, nel caso sia gia' nel database, non invia neanche agli altri device. la query ora e' cosi': query="SELECT COUNT(*) FROM " + table_name + " WHERE timestamp<" + str(date) + " AND timestamp>" + str(int(date)-cfg_offset) + " AND mac = \"" + dev[1] + "\"" il sorgente aggiornato è sempre al solito posto http://minucci.net/file/bluespam.py
|
|
|
|
|
Logged
|
|
|
|
| Maggio 23, 2009, 02:08:51 |
|
facs
|
 |
« Rispondi #26 on: Maggio 23, 2009, 02:08:51 » |
|
oggi pomeriggio / sera lo provo e ti faccio sapere ......  Ciao
|
|
|
|
« Last Edit: Maggio 23, 2009, 08:30:51 by facs »
|
Logged
|
Distro Flash: 2008.12 SD: QTmoko V19 +++++++[>++++++++++<-]>.<++++++++++[>+++<-]>---.++.++++++++++++++++.
|
|
|
| Maggio 26, 2009, 03:41:43 |
|
icp
|
 |
« Rispondi #27 on: Maggio 26, 2009, 03:41:43 » |
|
Perfetto mi sa che più tardi vado a fare un giretto all'ipercoop... MUHAHAHAHAHHAHAHAHAHHAAHAAHH!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
|
Logged
|
|
|
|
| Maggio 26, 2009, 07:07:02 |
|
facs
|
 |
« Rispondi #28 on: Maggio 26, 2009, 07:07:02 » |
|
oggi pomeriggio / sera lo provo e ti faccio sapere ......  Ciao Mi sa che c'è un limite max di caratteri che il cell accetta. Ho fatto la prova con un nokia, vede il file come nota e ho provato a fare lo sborone mandando un file da 130 KB, l'applicazione mi ha detto che il file è stato inviato mentre il cell non l'ha ricevuto, non è neanche venuto fuori l'avviso di una nota in arrivo ... 
|
|
|
|
|
Logged
|
Distro Flash: 2008.12 SD: QTmoko V19 +++++++[>++++++++++<-]>.<++++++++++[>+++<-]>---.++.++++++++++++++++.
|
|
|
| Maggio 26, 2009, 07:57:09 |
|
icp
|
 |
« Rispondi #29 on: Maggio 26, 2009, 07:57:09 » |
|
Bello Bello funziona davvero bene!!! Gecco dimmi una cosa ogni quanto il db viene azzerato?
|
|
|
|
|
Logged
|
|
|
|
|