Logo
Marzo 16, 2010, 05:28:27
 
New PostsTotal Posts: 37343
New PostsTotal Topics: 2439
New PostsTotal Members: 373
New PostsLatest Member: vitto.giova
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Login with username, password and session length
Pagine: 1 [2] 3 4   Go Down
  Print  
Autore Topic: bluespam.py  (Read 2686 times)
Maggio 15, 2009, 12:37:34
gecco
Hero Member
*****
Posts: 643



View Profile WWW
« 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

Code:
#!/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
Hero Member
*****
Posts: 643



View Profile WWW
« Rispondi #16 on: Maggio 16, 2009, 12:22:47 »

adesso fa i log in un database:

Code:
#!/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
Hero Member
*****
Posts: 643



View Profile WWW
« 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:
Code:
sqlite3 bluespam.sql "CREATE TABLE log(id INTEGER PRIMARY KEY ASC, timestamp INT, name TEXT, mac TEXT)"
ed ecco il codice rivisitato:
Code:
#!/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: 1367


parlate sottovoce, potrebbero sentirci!!!!


View Profile
« 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

aiutaci anche tu! Testare non costa nulla! ecco come fare!
http://wiki.telefoninux.org/doku.php?id=nptesting

dialer: funziona
SMS: funzionano da terminale
Maggio 18, 2009, 05:23:56
gecco
Hero Member
*****
Posts: 643



View Profile WWW
« Rispondi #19 on: Maggio 18, 2009, 05:23:56 »

macche'... per cambiare il file basta mettere mano al codice Smiley
e poi non c'e' bisogno di interfaccia
Logged
Maggio 18, 2009, 05:29:10
Meluste
NeoPhysis testing
WebZine Editors
Hero Member
*****
Posts: 1367


parlate sottovoce, potrebbero sentirci!!!!


View Profile
« 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  Grin
Logged

aiutaci anche tu! Testare non costa nulla! ecco come fare!
http://wiki.telefoninux.org/doku.php?id=nptesting

dialer: funziona
SMS: funzionano da terminale
Maggio 19, 2009, 11:03:26
gecco
Hero Member
*****
Posts: 643



View Profile WWW
« 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 Smiley ) 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:
Code:
#!/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
Hero Member
*****
Posts: 592



View Profile
« Rispondi #22 on: Maggio 19, 2009, 01:09:05 »

evvai di spam bluetooth  Grin
Logged

Distro
Flash: 2008.12
SD: QTmoko V19
+++++++[>++++++++++<-]>.<++++++++++[>+++<-]>---.++.++++++++++++++++.
Maggio 22, 2009, 12:42:06
gecco
Hero Member
*****
Posts: 643



View Profile WWW
« 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
Code:
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.py

la 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 Smiley
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
Hero Member
*****
Posts: 643



View Profile WWW
« 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:
Code:
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:
Code:
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.py

inoltre 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):
Code:
#!/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
Hero Member
*****
Posts: 643



View Profile WWW
« 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':
Code:
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
Hero Member
*****
Posts: 592



View Profile
« Rispondi #26 on: Maggio 23, 2009, 02:08:51 »

oggi pomeriggio / sera lo provo e ti faccio sapere ......
 Grin

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
Hero Member
*****
Posts: 501


View Profile
« 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
Hero Member
*****
Posts: 592



View Profile
« Rispondi #28 on: Maggio 26, 2009, 07:07:02 »

oggi pomeriggio / sera lo provo e ti faccio sapere ......
 Grin

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 ...
 Huh
Logged

Distro
Flash: 2008.12
SD: QTmoko V19
+++++++[>++++++++++<-]>.<++++++++++[>+++<-]>---.++.++++++++++++++++.
Maggio 26, 2009, 07:57:09
icp
Hero Member
*****
Posts: 501


View Profile
« 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
Pagine: 1 [2] 3 4   Go Up
  Print  
 
Jump to:  

Powered by SMF 1.1.11 | SMF © 2006-2008, Simple Machines LLC
Oranj By Burak