2015-09-08 3 views
-1

Я пытаюсь написать «данные» из Scapy нюхать к CSV непосредственно, когда питон скрипт для нюхать бежит, но я получил следующее сообщение об ошибке во время выполнения скрипта:IndentationError: запись данных в формате CSV

py_compile.PyCompileError : Sorry: IndentationError: неожиданный отступ (prog.py, строка 33)

Что здесь не так?

Вот мой код:

from scapy.all import * 
import datetime 
import csv 
import sys 

PROBE_REQUEST_TYPE=0 
PROBE_REQUEST_SUBTYPE=4 

STAMP = datetime.datetime.now().isoformat() 

WHITELIST = ['00:00:00:00:00:00',] # Replace this with your phone's MAC address 


def PacketHandler(pkt): 
if pkt.haslayer(Dot11): 
    if pkt.type==PROBE_REQUEST_TYPE and pkt.subtype == PROBE_REQUEST_SUBTYPE and (pkt.addr2.lower() not in WHITELIST or pkt.addr2.upper() not in WHITELIST): 
     PrintPacket(pkt) 

def PrintPacket(pkt): 
print "Probe Request Captured:" 
try: 
    extra = pkt.notdecoded 
except: 
    extra = None 
if extra!=None: 
    signal_strength = -(256-ord(extra[-4:-3])) 
else: 
    signal_strength = -100 
    print "No signal strength found"  
print "Target: %s Source: %s SSID: %s RSSi: %d"%(pkt.addr3,pkt.addr2,pkt.getlayer(Dot11ProbeReq).info,signal_strength) 
f = open('/mtn/sda1/logger.csv', 'w') 
filename = 'logger.csv'.format(STAMP) 
    open(filename, 'a') as f: 
      f.write('Target: %s Source: %s SSID: %s RSSi: %d"%(pkt.addr3,pkt.addr2,pkt.getlayer(Dot11ProbeReq).info,signal_strength)'.format(STAMP)) 
f.close() 

def main(): 
from datetime import datetime 
print "[%s] Starting scan"%datetime.now() 
print "Scanning ..." 
print "\n" 
sniff(iface=sys.argv[1],prn=PacketHandler,store=0) 

if __name__=="__main__": 
main() 
+0

У вас много ошибок в отпечатке в этом опубликованном коде. –

+2

У Python есть [значительные пробелы] (https://stackoverflow.com/questions/13884499/what-is-is-python-whitespace-and-how-does-it-work). –

ответ

1

вы пропустили with ключевое слово:

filename = 'logger.csv'.format(STAMP) 
    open(filename, 'a') as f: 
      f.write('Target: %s Source: %s SSID: %s RSSi: %d"%(pkt.addr3,pkt.addr2,pkt.getlayer(Dot11ProbeReq).info,signal_strength)'.format(STAMP)) 
f.close() # unnecessary 

также, если вы используете with ключевое слово, вам не нужно, чтобы закрыть файл вручную.

+0

Спасибо, у меня все еще есть проблема. Я положил в нее «с» и удалил «f.close()», но теперь я получаю следующее сообщение: Файл «sas.py», строка 33 f.write («Цель:% s Источник:% s SSID:% s RSSI:% d"% (pkt.addr3, pkt.addr2, pkt.getlayer (Dot11ProbeReq) .info, signal_strength) '. Format (STAMP)) ^ IndentationError: ожидается отложенный блок ЛЮБЫЕ ИДЕИ, что не так с моим кодом? – Chrisvr

+0

@Chrisvr http://www.diveintopython.net/getting_to_know_python/indenting_code.html – yurib

Смежные вопросы