2007年09月 存档

解决Vista下访问system32文件夹缓慢的问题

2007年09月30日,星期日

点击一下 名称 那个column即可 :-)

system32

python socket scanner

2007年09月30日,星期日

今天对电子科技大学清水河校区的宿舍网络突然有了兴趣,写了个小工具来扫描各个router的信息。以后有时间再深入一点,研究出个拓扑图之类的东西出来。


import socket, sys, time


for x in range(1,254): s = socket.socket(2, 1) s.settimeout(0.5) ip="222.197."+str(x)+".1" try: s.connect((ip, 23)) print ip time.sleep(0.2) d=s.recv(1024) print d except: pass finally: s.close()

得到结果:

222.197.176.1
uestc-benke-10D2#-3750-24TS-1>
222.197.177.1
uestc-shuoshi-1D-3750-24TS-1>
222.197.178.1
uestc-shuoshi-3D-3750-24TS-1>
222.197.179.1
uestc-shuoshi-4D-3750-24TS-1>
222.197.180.1
uestc-shuoshi-6D-3750-24TS-1>
222.197.181.1
uestc-shuoshi-7D-3750-24TS-1>
222.197.182.1
uestc-benke-2D-3750-24TS-1>

发现python的socket对象有点问题,如果出错了,错误状态不能清除,即使重新开一个python shell也无济于事。

清水河校区宿舍网络的router都没有加密码,电信的网管真不负责 -_-!

[极品程序推荐]闹钟提醒小工具[49K]

2007年09月29日,星期六

今天在DRL上看到一个帖子推荐了罗云彬大牛写的闹钟程序

软件特点:

  • 全部用汇编编写,文件小巧,执行文件仅为几十K,不需其他任何库文件的支持(如VC库、VB库等)
  • 使用图形界面,形状随图形改变,外形活泼可爱
  • 可以使用外部 BMP 图形文件做背景或字形,你可以自己制作喜爱的图片,同时在作者主页上也提供多种外观图形下载
  • 提供多种运行选项,如保持在最前面、开机自动运行、以任务栏图标方式运行等,方便使用
  • 可以自行添加闹铃项目,数量没有限制
  • 提供快速提醒功能,方便临时需要闹钟的提醒
  • 闹铃时间可以是每天同一时间、每周同一时间、每月同一时间、每年同一时间
  • 闹铃方式可以设定为声音、文字、执行程序、关机、重新启动计算机等方式
  • 提供万年历功能,可以查询任何一天的星期以及到今天的天数,同样可以查询今天的指定天数后是什么日期
  • 提供1901年到2050年的农历阳历互相转换功能

值得一提的是,该程序只有49KB大,而且内嵌了一个29.9KB的 clock.chm 帮助文件,释放在 C:\Windows\clock.chm

下载

罗云彬是国内汇编界的著名超级黑客,也是当年的文曲星高手。著有 《Windows 环境下32位汇编语言程序设计(第2版)》

各个流行播放器HTTP请求头一览

2007年09月28日,星期五

最近为DormForce Music和Media研发anti-leeching, viewing only机制,顺便抓包了几个支持media streaming的流行播放器HTTP headers,记下备用

Windows Media Player

GET /1.avi HTTP/1.1
Accept: */*
User-Agent: Windows-Media-Player/11.0.6000.6336
UA-CPU: x86
Accept-Encoding: gzip, deflate
Host: 222.197.188.x
Connection: Keep-Alive
Cookie: __utma=78507287.1103584299.1187456764.1189668525.1190966298.6; __utmz=78507287.1187456764.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none)

可以说Windows Media Player是最没有特色的一个播放器了,HTTP请求头一点特征都没有。

Media Player Classic

MPC是著名的开源播放器,它会尝试2次HTTP请求

GET /1.rmvb HTTP/1.0
User-Agent: Media Player Classic
Host: 222.197.188.x
Accept: */*

第二次

GET /1.rmvb HTTP/1.1
Accept: */*
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.590; .NET CLR 3.5.20706)
Host: 222.197.188.x
Connection: Keep-Alive
Cookie: __utma=78507287.1103584299.1187456764.1189668525.1190966298.6; __utmz=78507287.1187456764.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none)

RealPlayer

RealPlayer是著名的播放器,广告暴多。

GET /1.rmvb HTTP/1.1
Accept: */*
User-Agent: RMA/1.0 (compatible; RealMedia)
Icy-MetaData: 1
Bandwidth: 393216
ClientID: WinNT_5.1_6.0.12.1741_RealPlayer_R31CND_zh-CN_686
Cookie: __utma=78507287.1103584299.1187456764.1189668525.1190966298.6; __utmz=78507287.1187456764.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none)
GUID: 00000000-0000-0000-0000-000000000000
Language: zh-CN, zh, *
PlayerCookie: ASP.NET_SessionId
RegionData: 0
SupportsMaximumASMBandwidth: 1
Connection: Keep-Alive
Host: 222.197.188.x
Accept-Language: zh-CN, zh, *
Accept-Encoding: gzip

KMPlayer


KMPlayer是传说中的全能播放器,会多次尝试多个HTTP请求 首先是User-Agent: http_parser
GET /1.rmvb HTTP/1.1
User-Agent: http_parser
Host: 222.197.188.x
Cookie: __utma=78507287.1103584299.1187456764.1189668525.1190966298.6; __utmz=78507287.1187456764.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none)


然后添加了个Icy-MetaData:1,用于解析metaData
GET /1.rmvb HTTP/1.0
Icy-MetaData:1
User-Agent: shoutcastsource
Host: 222.197.188.x
Accept: */*
Connection: Keep-Alive


没有User-Agent
GET /1.rmvb HTTP/1.0
Icy-MetaData:1
Host: 222.197.188.x
Accept: */*
Connection: Keep-Alive


尝试解析HTML
GET /1.rmvb HTTP/1.1
Content-Type: text/html
Host: 222.197.188.x
Accept: text/html, */*
User-Agent: Mozilla/3.0 (compatible; Indy Library)
Range: bytes=0-9


模仿RealPlayer
GET /1.rmvb HTTP/1.1
Accept: */*
User-Agent: RMA/1.0 (compatible; RealMedia)
Icy-MetaData: 1
Bandwidth: 524300
ClientID: WinNT_6.0_10.0.0.0_play32_RN01_EN_686
Cookie: __utma=78507287.1103584299.1187456764.1189668525.1190966298.6; __utmz=78507287.1187456764.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none)
GUID: 00000000-0000-0000-0000-000000000000
Language: zh-CN
RegionData: 0
SupportsMaximumASMBandwidth: 1
Connection: Keep-Alive
Host: 222.197.188.x
Accept-Language: zh-CN
Accept-Encoding: gzip


所以我们可以根据Icy-MetaData: 1这个请求头来限制某些静态HTTP资源只允许播放器打开,让下载工具和浏览器都不能leech服务器上的资源。(Orbit Downloader可以突破这些限制)

获得python文件自身绝对路径

2007年09月28日,星期五

以前写vbs的时候获得本身.vbs的绝对路径很简单 WScript.Echo(WScript.ScriptFullName),在python下想实现相同的功能,没有找到对应的object和属性。原因是:Python可以直接在shell下执行,所以不一定是以文件的形式运行的。最后找到了一个属性 __file__,写成完整的代码就是


import os
print os.path.abspath(os.path.join(os.getcwd(), __file__))

abspath()是为了避免 ///// ../ 等不严格路径的出现
在Vista Ultimate+Python 2.5和debian+Python 2.4上测试过,工作的很好。

好久没写blog了,最近超级忙,coding的时间比较少。

[django]AttributeError: 'str' object has no attribute '_meta'

2007年09月20日,星期四

A very common error among django learner is like this:
From django.db import models
From django.contrib.auth.models import User

# Create your models here.

class DLUser(models.Model):
xxxx = models.xxxxField()
user = models.OneToOneField('CustomUser', User)
...

When execute python manage.py validate you'll get
Traceback (most recent call last):
File "manage.py", line 13, in
execute_manager(settings)
File "C:\Python25\Lib\site-packages\django\core\management.py", line 1672, in
execute_manager
execute_from_command_line(action_mapping, argv)
File "C:\Python25\Lib\site-packages\django\core\management.py", line 1569, in
execute_from_command_line
action_mapping[action]()
File "C:\Python25\Lib\site-packages\django\core\management.py", line 1152, in
validate
num_errors = get_validation_errors(outfile)
File "C:\Python25\Lib\site-packages\django\core\management.py", line 1018, in
get_validation_errors
for r in rel_opts.get_all_related_objects():
File "C:\Python25\Lib\site-packages\django\db\models\options.py", line 125, in
get_all_related_objects
if f.rel and self == f.rel.to._meta:
AttributeError: 'str' object has no attribute '_meta'

The error message is misleading. Infact you just made a mistake here

user = models.OneToOneField('CustomUser', User)

Correct that to

user = models.OneToOneField(User, 'CustomUser')

Or, according to official defination of verbose-field-names, ForeignKey, ManyToManyField and OneToOneField require the first argument to be a model class, so use the verbose_name keyword argument:

user = models.OneToOneField(User, verbose_name='CustomUser')

And the problem is solved.

debian下部署pyxmpp

2007年09月20日,星期四

想做个GTalkBot玩玩,于是在Debian etch上部署PyXMPP
官网写得很清楚:

For PyXMPP you will need:

  • Python. PyXMPP was designed for Python 2.4, 2.3 should work too.
  • libxml2. Recent release (>=2.6.11) with python bindings is required. Additionally, all development files for libxml2 (usually in separate libxml2-devel package) are recommended for compilation of PyXMPP for best performance. PyXMPP 1.0 was tested with libxml2-2.6.21.
  • dnspython. PyXMPP 1.0 was tested with version 1.3.4.
  • M2Crypto for TLS support. Tested with M2Crypto-0.13/swig-1.3.21.

所以部署pyxmpp就相当简单而方便了

su
apt-get install python-dev
apt-get install libxml2
apt-get install libxml2-dev
apt-get install python-libxml2
apt-get install dnspython
apt-get install m2crypto
apt-get install m2crypto-dev
apt-get install python-m2crypto

接下来下载pyxmpp-1.0.0.tar.gz,解包并且

python setup.py build
python setup.py install

安装完毕。甩出python的shell:

Python 2.4.4 (#2, Apr 5 2007, 20:11:1 8)
[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyxmpp
>>> print pyxmpp

>>>

部署完毕。
恩,apt-get真是个好东西。

test

2007年09月18日,星期二

WLW test

Update: yo2.cn终于解封了

继续Blogging。

3年过后,重新开始用Firefox

2007年09月15日,星期六

由于IE下没有很好的xHTML/DOM/JS调试工具,所以不得不安装了一个Firefox 2.0.0.6。记得最第一次用Firefox的时候,Firefox还叫Pheonix Browser,跟Opera一个级别的。后来慢慢地发现Firefox1.0 兼容性问题太多,于是弃之不用。加上重装系统后Firefox的配置文档就丢了,很不爽,后来一直用Maxthon,目前用的是TheWorld2。

其实安装完毕Firefox后不要立即启动Firefox,先打开cmd,跳到Firefox的安装目录,运行这个命令:
D:\浏览器及工具\Firefox>firefox.exe -p
或者这个命令:
21.jpg
D:\浏览器及工具\Firefox>firefox.exe -profilemanager
这里可以设定你的 Firefox profile 放到非系统分区
firefox profile manager
这样可以重装系统,甚至跨Windows/Linux共用一个Firefox配置文档。

第二部是安装Flash插件,我把这个xpi的地址嗅探出来了,用迅雷下载比Firefox速度快得多。

接下来是tweak一下Firefox的UI,打开Firefox配置文件路径/chrome/userChrome.CSS
比如我的是D:\浏览器及工具\Firefox\est_profile\chrome\userChrome.CSS
写入:


#helpMenu{
    display: none;
}


#edit-menu{ display: none; }


#file-menu{ display: none; }

这样可以隐藏 文件、编辑、帮助 三个鸡肋菜单,然后把工具条全部弄到第一行去,大大的节省了浏览的空间,哈哈。

网上的教程都是通过插件实现的,没有这个来得简洁和直接。其实用户可以去编辑Firefox安装路径\chrome\browser.jar\content\browser\browser.xul把多个菜单合并成一个。

然后装了一些插件,不在多在于精。多了Firefox会非常非常的慢!
14.jpg
3年过去了,Firefox改进了很多,越来越人性化了,但是基于XUL、XPCOM、XML的程序必定很占用内存,速度很慢,还是native binary的IE快点,呵呵。

yahoo.cn全能搜索,很好很强大

2007年09月14日,星期五

13.jpg

这是搜索 丁磊中国雅虎给出的人物关系图。