存档
python nslookup批量查询脚本
我们有时在使用电脑时,需要批量获取某一批域名对应的IP地址,如果一个个分别查询,那就太费时间了。比如我们想要获取Youtube的视频地址,Youtube视频地址域名有很强的规律性,都是类似v*.lscache*.c.youtube.com这样的,使用python编写一个小脚本程序,将会为我们节省很多时间。
在一般情况下,我们可以先把需要查询的地址放在一个文本文件中,通过依次查询,就能获取对应IP地址。以下以查询hosts文件(删去前注后)为例:
from socket import getaddrinfo f=open('data.txt','rb') data=f.read() f.close() data=data.split('\r\n') PORT = 80 for d in data: addr = d.split(' ')[1] print addr, ipaddr = getaddrinfo(addr,PORT) print ipaddr[1][4][0] line = str(ipaddr[1][4][0]) + ' ' + addr + '\n\r' output = open('data1.txt', 'a') output.write(line) output.close()
Python实现字符串全角半角转换
全角字符unicode编码范围65281~65374 (十六进制 0xFF01 ~ 0xFF5E),半角字符unicode编码范围33~126 (十六进制 0x21~ 0x7E)。空格比较特殊,全角为 12288(0x3000),半角为 32 (0x20)
而且除空格外,全角/半角按unicode编码排序在顺序上是对应的所以可以直接通过用+-法来处理非空格数据,对空格单独处理。
全角转半角
def strQ2B(ustring): """把字符串全角转半角""" rstring = "" for uchar in ustring: inside_code=ord(uchar) if inside_code==0x3000: inside_code=0x0020 else: inside_code-=0xfee0 if inside_code<0x0020 or inside_code>0x7e: #转完之后不是半角字符则返回原来的字符 rstring += uchar rstring += unichr(inside_code) return rstring
Datetime--Python的基本日期时间类型
最近在学习Google App Engine日期时间属性时,尝试对Micolog这个基于Google App Engine的Blog后台的评论做了一个简单的修改页面,这样就可以使我们省下了去App Engine的后台去搜寻相关数据库再做修改的时间。编辑代码的过程倒是基本简单,新建一个编辑评论的页面(comment.html),再到admin.py中加入相关代码就可以了。不过,这个过程中倒是遇到一个小问题,python提交时间更新时会抛出一个异常来:
BadValueError: Property date must be a datetime
解决办法倒是很简单,将时间格式化成Datetime类型即可。
比如说:我在模板中对时间格式化为{{comment.date|datetz:"Y-m-d H:i:s"}}
(如:2010-07-05-20:00:12这样的形式),那么在程序代码中可以这样写做:
comment.date=datetime.strptime(commentdate,"%Y-%m-%d %H:%M:%S")
当然其他类型的格式化都是可取的。由于Python中对时间进行格式化的相关字符与Django模板中time过滤器所用的格式字符串略有区别,下面就分别对其进行简单介绍,希望对你有所帮助。
Using Google App Engine DoS Protection Service
经过我近一段时间的观察,发现自己的网站经常有人使用扫描工具进行漏洞检查,一天下来错误日志都好几十次,我实在是看不下某人的这种行为了!好吧,今天就屏蔽掉你的访问,让我在日志中再也看不到你吧!
幸好某人这个漏洞扫描是使用google 二级域名来访问的,这样就让我有机会使用app engine自带的防dos攻击的方法来屏蔽了。
按照Google文档的帮助,直接在应用的根目录下建立dos.yaml文件,在里面填写如下类似的信息即可
blacklist: - subnet: 1.2.3.4 description: a single IP address - subnet: 1.2.3.4/24 description: an IPv4 subnet - subnet: abcd::123:4567 description: an IPv6 address - subnet: abcd::123:4567/48 description: an IPv6 subnet
这种方法还是很有效果的,其中的subnet项可以指定任意合法的IPv4和IPv6地址格式,你既可以使用特定的单IP,也可以指定一个IP段,description项为你在appengine后台管理项看到的内容。
上传方法很简单,你可以使用appcfg.py update
直接上传整个项目,这是dos.yaml也会一同上传更新。或者直接使用appcfg.py update_dos
命令来单独上传这一文件。
下面是某一IP扫描本站的部分日志:
Appstats for Python
前段时间在Google App Engine官方博客上看到app_engine更新了关于“Application profile with python & java appengine and Appstats”的文章 Easy Performance Profiling with Appstats ,目前Google App Engine文档中已有英文原文。
注:Appstats是一个可视化的性能分析工具,是大名鼎鼎的Python作者Guido写的,具体内容请参考Appstats
Python的SDK包含了一套叫做Appstats的用于衡量你的应用程序性能的工具。 Appstats与您的Web应用框架集成以记录事件,并提供一个基于Web的管理界面用于浏览统计.
安装事件记录器(Event Recorder)
为记录Web请求的数据,每个请求句柄必须调用Appstats。这里有两种很容易的方法来将Appstats添加到你的处理程序代码中。
- 一个工作在任何WSGI web应用框架(包括webapp)下的
run_wsgi_app()
函数(在google.appengine.ext.webapp.util
包中)扩展 - 一个Django的Web应用框架的“中间件”类
通过run_wsgi_app()函数使用Appstats
为了在一个WSGI兼容的框架(如webapp
应用),你必须使用run_wsgi_app()
函数来调用您的请求处理程序的脚本应用。举个例子:你可以使用类似于下面代码创建一个Webapp应用的应用实例,并运行它:
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
application = webapp.WSGIApplication([('/', MainPage),
('/newentry', NewEntry),
('/editentry', EditEntry),
('/deleteentry', DeleteEntry),
],
debug=True)
def main():
run_wsgi_app(application)
if __name__ == '__main__':
main()
如果你使用另外一种方法来调用WSGI应用程序,(如wsgiref.handlers.CGIHandler
),你必须修改你的处理程序都使用run_wsgi_app()
来使用Appstats。
Micolog使用Windows Live Writer自定义发布时间
利用Windows Live Writer发表文章时,我们可以在发布栏上看到有自定义发布时间的按钮,但是在一般情况下,我们自定义的时间并不能产生效果,因为这个自定义的时间序列并没有传递。如果我们在RPC传递中增加发布时间的属性,那么自定义发布时间就能成功。这个自定义的时间就会覆盖掉自动生成的当前时间。传递给api_rpc.py的struct里就有一个dateCreated的值,它是这样的格式:YYYYMMDDTHH:mm:ssZ,如20091118T12:44:46Z 。在api_rpc.py里面处理一下这个值并赋值给entry里的date即可。代码如下,有中文注释的即为修改的行,很容易找到在哪里加入:
最新评论