Problema con scrittura su file

Stato
Discussione chiusa ad ulteriori risposte.

Eijin

Utente Silver
17 Luglio 2008
18
2
0
61
Salve a tutti, stamattina stavo provando a fare un rudimentale sniffer per poi analizzare leggendoli ad uno ad uno i pacchetti che mi arrivavano, quindi ho pensato che una volta presi i pacchetti potevo salvarne il contenuto in un file, ed ecco il codice:
Codice:
import socket, io

# the public network interface
HOST = socket.gethostbyname(socket.gethostname())



# create a raw socket and bind it to the public interface
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
s.bind((HOST, 0))

# Include IP headers
s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)

# receive all packages
a=range(4)
while 0==0:
    
    s.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)
    # receive a package
    print s.recvfrom(65565)
    a=s.recvfrom(65565)
    with open('log.txt', 'w') as file:
        file.write(a[0])
    file.close()

   

# disabled promiscuous mode
s.ioctl(socket.SIO_RCVALL, socket.RCVALL_OFF)

Il codice funziona, ma nel file log.txt non scrive nulla il file resta vuoto come prima, come risolvo?

P.S. esiste una funzione simile a RAW_SOCKET che però funzioni per linux? Grazie mille in anticipo
 
hai provato a usare file.append?
a me una volta con write non scriveva nulla e con append tutto perfetto invece
 
A parte il fatto che riapri inutilemente il file ad ogni ciclo, e che al posto di True hai messo 0==0, quel file, lo apri in 'w' che sovrascrive il contenuto.
 
Ok, grazie mille :) chiarissimi appena posso mi metto a studiare anche le Pycap, tuttavia però non ho risolto il mio problema, il codice ora è questo, ma non funge ancora(p.s. non funge nemmeno con append)
Codice:
import socket, io

# the public network interface
HOST = socket.gethostbyname(socket.gethostname())

file=open('log.txt','a')

# create a raw socket and bind it to the public interface
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
s.bind((HOST, 0))

# Include IP headers
s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)

# receive all packages
a=range(4)
while 0==0:
    
    s.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)
    # receive a package
    print s.recvfrom(65565)
    a=s.recvfrom(65565)
    file.write(a[0])
    

   

# disabled promiscuous mode
s.ioctl(socket.SIO_RCVALL, socket.RCVALL_OFF)
 
Ora hai dimenticato un file.close(), e comunque dovresti verificare che il pacchetto arrivi, inoltre facendo due recvfrom uno ogni due te li perdi. In succo ti consiglio di lasciar perdere e studiare meglio il Python (e la programmazione in generale) a priori, dopo di che usare le pcap che sono fatte apposta.
 
Mhm, ok, comunque programmazione la studio da autodidatta da un bel pò^^, python solo da un mese
 
complimenti,
molto bella l'idea,ma cosi crei solo uno sniffer locale,che ne dici di un
Codice:
l'uomo con il python nel mezzo
xD
Usando le arp e minchiate varie...^^
 
Effettivamente quello che volevo creare era proprio uno sniffer locale, non conoscevo nemmeno l'esistenza delle arp(dopo aver letto la tua risposta ho cercato su internet), appena posso però, vedo innanzitutto di risolvere il problema di i/o con i file, e poi di studiarmi le arp. Chiedo scusa per l'ignoranza però è da poco che studio python :)
 
dunque hai risolto il problema? attualmente nn saprei come aiutarti perché nn ho ancora studiato il funzionamento del with..........
 
Stato
Discussione chiusa ad ulteriori risposte.