Python中执行系统命令

0x00 使用模块 在python执行系统命令一般可以通过3个模块来实现,这三个模块是:os、commands、subprocess 0x01 os模块执行系统命令 一般用os模块的system函数来执行一些简单的命令 >>> import os >>> os.system("pwd") /Users/reber 0 0x02 commands模块执行系统命令 commands这个模块在python3中被移除了 >>> import commands >>> commands.getoutput("pwd") '/Users/reber' >>> commands.getstatusoutput("pwd") (0, '/Users/reber') #返回状态码以及结果 0x03 subprocess模块执行系统命令 task.py代码 def aaa(): s = 0 for x in range(3): time.sleep(1) s += x return s print(aaa()) call函数执行命令(会阻塞到任务完成) 函数原型:subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False) >>> from subprocess import call >>> call(["ls","-l"]) #传入一个list total 16 -rw-r--r-- 1 reber staff 80 8 16 16:19 README.


MRQ的使用

0x00 MRQ MRQ是Python基于Redis、Mongo和gevent的分布式任务队列。 MRQ一方面旨在像RQ一样简单,另一方面有接近Celery的性能。 MRQ最初的功能设计是为了满足任务队列的各种任务需求(IO密集&CPU密集,很多小任务&几个大任务)。 0x01 设置mongo和redis 因为mrq依赖于redis和mongo,所以先安装设置下 安装redis $ sudo apt-get install redis-server $ netstat -nlt|grep 6379 $ sudo /etc/init.d/redis-server status $ sudo /etc/init.d/redis-server stop $ sudo vim /etc/redis/redis.conf #bind 127.0.0.1 requirepass reber_redis $ sudo redis-server /etc/redis/redis.conf & $ redis-cli > auth reber_redis 安装mongo 可以参考:https://docs.mongodb.com/master/tutorial/install-mongodb-on-ubuntu/ $ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6 $ echo "deb [ arch=amd64 ] http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.


下载大文件时显示进度条

0x00 作用 在下载大文件时以进度条的形式显示下载进度,如下图所示: 0x01 代码 #!/usr/bin/env python # -*- coding: utf-8 -*- # code by reber <1070018473@qq.com> import requests from tqdm import tqdm def get_vedio(url,name): resp = requests.get(url=url,stream=True) content_size = int(resp.headers['Content-Length'])/1024/1024 with open(name, "wb") as f: print "download file {}, total size: {}M".format(name,content_size) for data in tqdm(iterable=resp.iter_content(1024*1024),total=content_size,unit='M'): f.write(data) def get_content(filename): data = [] with open(filename) as f: lines = f.readlines() for line in lines: data.append(line.strip()) return data if __name__ == '__main__': urls = get_content('urls.


Python的pycurl模块

0x00 关于cURL cURL可以使用URL的语法模拟浏览器来传输数据,它支持FTP、FTPS、HTTP、HTTPS、GOPHER、TELNET、DICT、FILE以及LDAP等多种协议。 利用cURL可以实现:HTTPS认证、HTTP POST方法、HTTP PUT方法、FTP上传、keyberos认证、代理服务器、cookies、用户名/密码认证、下载文件断点续传、上传文件断点续传、http代理服务器管道等等。 0x01 pycurl常见方法 创建curl对象 c = pycurl.Curl() #创建一个curl对象 设置请求 c.setopt(pycurl.URL,"http://www.baidu.com") #指定请求的URL c.setopt(pycurl.CONNECTTIMEOUT, 5) #连接的等待时间,设置为0则不等待 c.setopt(pycurl.TIMEOUT, 5) #请求超时时间 c.setopt(pycurl.USERAGENT,"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:46.0) Gecko/20100101 Firefox/46.0") #配置User-Agent c.setopt(pycurl.NOPROGRESS, 0) #是否屏蔽下载进度条,非0则屏蔽 c.setopt(pycurl.MAXREDIRS, 5) #指定HTTP重定向的最大数 c.setopt(pycurl.FORBID_REUSE, 1) #完成交互后强制断开连接,不重用 c.setopt(pycurl.FRESH_CONNECT,1) #强制获取新的连接,即替代缓存中的连接 c.setopt(pycurl.DNS_CACHE_TIMEOUT,60) #设置保存DNS信息的时间,默认为120秒 c.setopt(pycurl.HEADERFUNCTION, getheader) #将返回的HTTP HEADER定向到回调函数getheader c.setopt(pycurl.WRITEFUNCTION, getbody) #将返回的内容定向到回调函数getbody c.setopt(pycurl.WRITEHEADER, fileobj) #将返回的HTTP HEADER定向到fileobj文件对象 c.setopt(pycurl.WRITEDATA, fileobj) #将返回的HTML内容定向到fileobj文件对象 部分返回信息 c.getinfo(pycurl.HTTP_CODE) #返回的HTTP状态码 c.


使用Python的openpyxl模块读写xlsx文件

0x00 openpyxl模块 这个模块可以让你读写excel文件 0x01 读取数据 代码如下: #!/usr/bin/env python # -*- coding: utf-8 -*- from openpyxl import load_workbook #设置data_only=True,否则如果文件中有计算公式的话读出来的是公式不是数值 wb = load_workbook(filename='aa.xlsx',data_only=True) sheetnames = wb.get_sheet_names() #获得所有表名 print u"存在表:%s" % sheetnames ws = wb.get_sheet_by_name(sheetnames[0]) print u"第一张表表名为:%s" % ws.title #Sheet1 rows = ws.max_row #行数 columns = ws.max_column #列数 print "表%s有%d行%d列" % (ws.title,rows,columns) #10 2 共10行2列 print print u"取部分数据:" print ws['A1'].value,ws['B1'].value print ws['A2'].value,ws['B2'].value print ws.cell(row=1, column=2).value print u"\n输出表%s的所有数据:" % ws.title for x in range(1,rows+1): for y in range(1,columns+1): print ws.


Python的模块

0x00 Python的模块 在python中,任何一个python文件都可以看作一个模块 不同包下有相同模块名并不会冲突,且包下必须有文件__init__.py from lib import * 意思是从包lib中导入所有模块(若lib为模块名则为导入模块的所有函数) from lib.module1 import test 意思是从lib这个包下的module1模块中导入函数test import导入模块时会从sys.path输出的结果路径中查找模块然后导入 sys.path.append('D:/xx/xx/xx/code')可以添加搜索路径 使用if __name__ == '__main__': 0x01 实例 文件结构如下 测试文件test.py #!/usr/bin/env python # -*- coding: utf-8 -*- from package1 import * #导入包package1下的所有模块 import package2.module3 #导入包package2下的module3模块 import package2.module4 as s #导入包package2下的module4模块并重命名为s a = module1.Class1() #创建一个对象 a.test() #调用类中的方法 b = module2.Class2() b.test() c = package2.module3.Class3() c.test() d = s.Class4() d.test() 包package1


Python的optparse模块

0x00 关于optparse模块 python2.3之后添加的模块optparse是专门用来处理命令行选项的 import optparse parser = optparse.OptionParser(usage='Usage: %prog [options] domaion', version='%prog 1.2') parser.add_option('-b', '--bug', dest='isbug', default=False, action='store_true', help='Whether open the debug mode, default is false') parser.add_option('-u', '--url', dest='url', default=None, action='store', type='string', help='target url') parser.add_option('-n','--number', dest='num', default=10, type='int', help='the number, default is 10') (options, args) = parser.parse_args() print options print args print options.url # parser.print_help() # show help message 0x01 说明 在输出帮助信息时%prog会被脚本名代替 -b和--bug作用一样,一个是短标签一个是长标签 dest:它是存储变量值的变量名 default:默认的值 type:值的类型,默认为string,可以不用写 action:有3种类型 默认action='store',可以不用写 action='store_true'使用参数时将布尔值true存储到dest指定的变量中 action='store_false'使用参数时将布尔值false存储到dest指定的变量中


Python的scapy模块简单使用

0x00 简单尝试 0x01 生成一组数据包 0x02 发送数据包 send发送数据包 sr1发送数据包 sr发送数据包 0x03 发送SYN数据包 0x04 得到TCP内容 0x05 SYN Scans


Python的paramiko模块

0x00 安装 直接pip install paramiko安装 或者去http://www.paramiko.org/ 下载 0x01 执行一条远程命令 #!/usr/bin/env python #-*- coding:utf-8 -*- import paramiko #远程执行命令 ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect("192.168.188.134",22,"reber","123456") ssh_session = ssh.get_transport().open_session() stdin,stdout,stderr = ssh.exec_command("ls -l") print stdin print stdout.readlines() #返回执行结果 print stderr.readlines() #有错误信息就返回错误信息,没有就返回空 ssh.close() 0x02 上传与下载文件 #!/usr/bin/env python #-*- coding:utf-8 -*- import paramiko ftp = paramiko.Transport(("192.168.188.134",22)) ftp.connect(username="reber",password="123456") sftp = paramiko.SFTPClient.from_transport(ftp) #将本地的文件上传到服务端的/tmp/a.txt remotepath='/tmp/a.txt' localpath='C:\\Users\\WYB_9\\Desktop\\a.txt' sftp.put(localpath, remotepath) #将服务端的文件下载到C:\\Users\\WYB_9\\Desktop\\system.log remotepath='/tmp/a.txt' localpath='C:\\Users\\WYB_9\\Desktop\\system.log' sftp.get(remotepath, localpath) ftp.close()


Python的cmd模块

0x00 关于cmd模块 使用cmd模块创建的命令行解释器可以循环读取输入的所有行并且解析它们 0x01 cmd模块的一些常用方法: cmdloop():类似与Tkinter的mainloop,运行Cmd解析器 onecmd(str):读取输入,并进行处理,通常不需要重载该函数,而是使用更加具体的do_command来执行特定的命名 emptyline():当输入空行时调用该方法 default(line):当无法识别输入的command时调用该方法 completedefault(text,line,begidx,endidx):如果不存在针对的complete_*()方法,那么会调用该函数 precmd(line):命令line解析之前被调用该方法 postcmd(stop,line):命令line解析之后被调用该方法 preloop():cmdloop()运行之前调用该方法 postloop():cmdloop()退出之后调用该方法 0x02 用cmd模块简单实现shell命令 #!/usr/bin/env python #-*- coding:utf-8 -*- import sys import os import socket from cmd import Cmd class ClassShell(Cmd): """docstring for ClassShell""" def __init__(self): Cmd.__init__(self) os.chdir("C:/Users/WYB_9/Desktop") hostName = socket.gethostname() self.prompt = "reber@" + hostName + " " + os.path.abspath('.') + "\n$ " def help_dir(self): print "dir [path]" def do_dir(self, arg): if not arg: print "\n".



可以返回顶部