Merhaba. Bir süredir üzerinde çalıştığım projeyi hem toplulukla beraber daha iyi hale getirebilmek için hem de başkalarına kod örneği açısından yardımcı olabilmek için bir kaç bug ile beraber paylaşmak istiyorum.
Bu kodlar ne yapıyor?
- Bilgisaya takılan USB’ye bilgisayardan bir dosya atılınca atılan dosyanın adını logluyor. (log.txt)
- Dosyanın USB’ye atılma tarihini logluyor.
- Dosyanın kullanıcı tarafından silinme riskine karşın bir kopyasını tekrar diskte oluşturuyor. (C:\Users\{Kullanıcı Adı}\AppData\Local\USB)
Bilinen Bug’lar
- USB ilk takıldığında içindeki tüm veri sanki bilgisayardan kopyalanmış gibi loglama işlemine tabi tutuluyor.
- Blgisayardan USB’ye kopyalama işlemi bitmeden loglama yapılırsa ‘Permission Denied’ hatası veriyor. (time.sleep(5))
- Birden fazla USB takıldığında sadece son takılan için bu işlemler uygulanıyor.
import os
import time
import socket
import shutil
import win32api
import win32file
from sys import exit
from getpass import getuser
from datetime import datetime
drivesList = []
b = ''
files = []
user = getuser()
USBLoc = 'C:\\Users\\{0}\\AppData\\Local\\USB'.format(user)
try:
os.mkdir(USBLoc)
except OSError:
print('Dizin zaten mevcut %s' % USBLoc)
print('Devam ediliyor...\n')
else:
print ("Dizin başarıyla oluşturuldu: %s" % USBLoc)
def listDir(disk):
for r, d, f in os.walk(disk):
[files1.append(os.path.join(r, file)) for file in f]
with open('./cache2.tmp', 'w') as cache:
for i in files1:
cache.write(i + '\n')
def readCache(loc):
for r, d, f in os.walk(loc):
[files2.append(os.path.join(r, file)) for file in f]
with open('./cache.tmp', 'w') as cache:
for i in files2:
cache.write(i + '\n')
with open('./cache.tmp', 'r') as reader:
for line in reader.readlines():
readedFile1.append(line)
with open('./cache2.tmp', 'r') as reader:
for line in reader.readlines():
readedFile2.append(line)
def Diff(li1, li2):
return list(set(li1) - set(li2))
def checkDrives():
drives = win32api.GetLogicalDriveStrings()
drives = drives.split('\000')[:-1]
return [i for i in drives if win32file.GetDriveType(i) == win32file.DRIVE_REMOVABLE]
while True:
try:
a = ', '.join(checkDrives())
if not ':' in a:
pass
else:
files1 = []
files2 = []
readedFile1 = []
readedFile2 = []
listDir('E:\\')
time.sleep(5)
readCache('E:\\')
getDiff = Diff(readedFile1, readedFile2)
b = a
if b != a or len(getDiff) > 0:
now = datetime.now()
current_time = now.strftime("%H:%M")
listDir(a)
with open('log.txt', 'a+') as log:
log.write(socket.gethostname() + '-' + current_time + '-' + a)
log.write('--' + str(getDiff) + '\n\n')
for i in getDiff:
a = i[::-1]
b = a[1:]
c = b[::-1]
shutil.copy(c, USBLoc)
print(c)
except KeyboardInterrupt:
exit()
Eklenecek Özellikler
- USB’ye atılan dosyalar her türlü kötü amaçlı kişiye karşın diskte farklı bir dizine daha kendini kaydediyor. Bu kaydedilen dosyalar bir süre sonra büyük boyutlara ulaşabilir. Bu yüzden kaydedilen dosyaların belli bir süre sonra otomatik silinmesi eklenecek.
- Sadece istenilen formattaki dosyaların loglarının tutulması eklenecek. (Ör: sadece .txt dosyaları kopyalanırsa kodlar işlensin)