2017-06-10 7 views
0

私はPythonを使用してスクリプトを書いたが、正常に動作した。私は、私の端末にaddr1,addr2,addr3を取得し、識別し、印刷しました。しかし、これらの結果を辞書形式のCSVファイルに追加しようとすると、いくつかのエラーが発生しました。辞書フォーマットのScapy結果を追加するPython

私は私の結果は、端末で印刷しまったとき、これは以前に私のスクリプトです:

#!/usr/bin/env python3 
from scapy.all import * 
import os 

devices = set() 
interface = "wlan0mon" 
iface = "wlan0mon" 

def sniffmgmnt(p): 
    if p.haslayer(Dot11): 
      devices.add(p.addr1) 
      devices.add(p.addr2) 
      devices.add(p.addr3) 
      print(devices) 

while True: 
    for channel in range(1, 14): 
      os.system("iwconfig" + iface + "channel" + str(channel)) 
      sniff(iface=interface, prn=sniffmgmnt, count=3, timeout=3, store=0) 

私はその後、addr3キーで辞書形式のCSVファイルにそれらの結果を追加しようとしました

#!/usr/bin/env python3 
from scapy.all import * 
from snifferCSV import CSV 
import os 
aps = dict() 
devices = set() 

headers = ['addr3', 'addr2', 'addr1'] 
csvFile = CSV('data.csv', headers) 

interface = "wlan0mon" 
iface = "wlan0mon" 

def sniffmgmnt(p): 
    if p.haslayer(Dot11): 
      source.append(p.addr1); 
      receiving.append(p.addr2); 
      destination.append(p.addr3); 
      csvFile.addToCSV([addr3, addr2, addr1]) 
while True: 
    for channel in range(1, 14): 
      os.system("iwconfig" + iface + "channel" + str(channel)) 
      sniff(iface=interface, prn=sniffmgmnt, count=3, timeout=3, store=0) 

ただし、スクリプトは端末のヘッダーのみを出力し、CSVファイルは空のままです。

 class CSV(object): 
     csvFile = None 
     fileName = data.csv 
     def __init__(self,fileName,headers): 
      self.fileName = fileName 
      self.prepareCSVFile(headers) 
    def prepareCSVFile(self,headers): 
      self.csvFile = open(self.fileName, 'w') 
      headerString = self.prepareValues(headers) 
      self.writeToCSV(headerString) 
    def prepareValues(self,valueList): 
      line = str() 
      for item in valueList[:-1]: 
        line = line + str(item) + ',' 
      line += valueList[-1] 
      return line 
    def addToCSV(self,valueList): 
      valueLine = self.prepareValues(valueList) 
      self.writeToCSV(valueLine) 
    def writeToCSV(self,line): 
      print(line) 
      self.csvFile.write(line) 

私の目標はaddr3が鍵となるCSVファイルに辞書形式の私の結果を追加することです:私は私のCSVクラスsnifferCSV.pyが含まれている下

。しかし、このプロセスに関する私の論理は間違っています。誰かが私を正しい方向に向けることができますか?事前に

おかげ -jj

+0

は '変更しようオープン(self.fileName、 'w') ' - >' open(self.fileName、 'a') ' – coder

答えて

0

私は@coderアドバイスを取り、しかし、唯一の私のヘッダーをCSVファイルに追加されたopen(self.fileName, 'a')open(self.fileName, 'w')を変更しました。

私は私のsnifferCSV.pyクラスを傷つけてしまったし、代わりに私はcsvファイルに自分のデータを追加するためにペアワイズdictのコンストラクタとジップ機能を使用し、私のメインのファイル内の辞書機能を組み込み:

#!/usr/bin/env python3 
from scapy.all import * 
import csv 
import os 

interface = "wlan0mon" 
iface = "wlan0mon" 

def sniffmgmnt(p): 
    if p.haslayer(Dot11): 
      keys = [(p.addr3)] 
      values = [(p.addr1, p.addr2)] 
      my_dict = dict(zip(keys, values)) 
      with open('data.csv','a') as f: 
        w = csv.writer(f) 
        w.writerows(my_dict.items()) 
while True: 
    for channel in range(1, 14): 
      os.system("iwconfig " + iface + " channel " + str(channel)) 
      sniff(iface=interface, prn=sniffmgmnt) 
関連する問題