mirror of https://github.com/n1nj4sec/pupy.git
Merge branch 'zip' of https://github.com/AlessandroZ/pupy into AlessandroZ-zip
This commit is contained in:
commit
26fac251cb
|
@ -0,0 +1,26 @@
|
||||||
|
# -*- coding: UTF8 -*-
|
||||||
|
from pupylib.PupyModule import *
|
||||||
|
from pupylib.utils.rpyc_utils import redirected_stdio
|
||||||
|
|
||||||
|
__class_name__="Zip"
|
||||||
|
|
||||||
|
@config(cat="admin")
|
||||||
|
class Zip(PupyModule):
|
||||||
|
""" zip / unzip file or directory """
|
||||||
|
|
||||||
|
def init_argparse(self):
|
||||||
|
self.arg_parser = PupyArgumentParser(prog="zip", description=self.__doc__)
|
||||||
|
self.arg_parser.add_argument('source', type=str, help='path of the source file or directory to zip')
|
||||||
|
|
||||||
|
self.arg_parser.add_argument('-u', action='store_true', help='unzip file (default: zip file)')
|
||||||
|
self.arg_parser.add_argument('-d', dest='destination', help='path of the destination file (default: current directory)')
|
||||||
|
|
||||||
|
def run(self, args):
|
||||||
|
self.client.load_package("pupyutils.zip")
|
||||||
|
with redirected_stdio(self.client.conn):
|
||||||
|
# zip
|
||||||
|
if not args.u:
|
||||||
|
self.client.conn.modules["pupyutils.zip"].zip(args.source, args.destination)
|
||||||
|
# unzip
|
||||||
|
else:
|
||||||
|
self.client.conn.modules["pupyutils.zip"].unzip(args.source, args.destination)
|
|
@ -0,0 +1,62 @@
|
||||||
|
import os
|
||||||
|
import zipfile
|
||||||
|
|
||||||
|
def zip(src, dst):
|
||||||
|
|
||||||
|
if not os.path.exists(src):
|
||||||
|
print "[-] The file \"%s\" does not exists" % src
|
||||||
|
return
|
||||||
|
|
||||||
|
isDir = False
|
||||||
|
if os.path.isdir(src):
|
||||||
|
isDir = True
|
||||||
|
|
||||||
|
if not dst:
|
||||||
|
if isDir:
|
||||||
|
d = src.split(os.sep)
|
||||||
|
dst = d[len(d)-1] + '.zip'
|
||||||
|
else:
|
||||||
|
dst = src + '.zip'
|
||||||
|
|
||||||
|
# To not overwrite an existing file
|
||||||
|
if os.path.exists(dst):
|
||||||
|
print "[-] The destination file \"%s\" already exists" % dst
|
||||||
|
return
|
||||||
|
|
||||||
|
# Zip process
|
||||||
|
zf = zipfile.ZipFile(dst, "w", zipfile.ZIP_DEFLATED)
|
||||||
|
if isDir:
|
||||||
|
abs_src = os.path.abspath(src)
|
||||||
|
for dirname, subdirs, files in os.walk(src):
|
||||||
|
for filename in files:
|
||||||
|
absname = os.path.abspath(os.path.join(dirname, filename))
|
||||||
|
arcname = absname[len(abs_src) + 1:]
|
||||||
|
zf.write(absname, arcname)
|
||||||
|
else:
|
||||||
|
zf.write(src)
|
||||||
|
|
||||||
|
print "[+] File zipped correctly: \"%s\"" % dst
|
||||||
|
zf.close()
|
||||||
|
|
||||||
|
|
||||||
|
def unzip(src, dst):
|
||||||
|
|
||||||
|
if not os.path.exists(src):
|
||||||
|
print "[-] The file \"%s\" does not exists" % src
|
||||||
|
return
|
||||||
|
|
||||||
|
if not dst:
|
||||||
|
d = src.split(os.sep)
|
||||||
|
dst = d[len(d)-1].replace('.zip', '')
|
||||||
|
|
||||||
|
# To not overwrite an existing file
|
||||||
|
if os.path.exists(dst):
|
||||||
|
print "[-] The destination file \"%s\" already exists" % dst
|
||||||
|
return
|
||||||
|
|
||||||
|
if zipfile.is_zipfile(src):
|
||||||
|
with zipfile.ZipFile(src, "r") as z:
|
||||||
|
z.extractall(dst)
|
||||||
|
print "[+] File unzipped correctly: \"%s\"" % dst
|
||||||
|
else:
|
||||||
|
print '[-] The zipped file does not have a valid zip format: \"%s\"'
|
Loading…
Reference in New Issue