tar cizvf backup.tar.gz /var/cache/apt/archives --exclude=/var/cache/apt/archives/partial/* --exclude=/var/cache/apt/archives/lock 重装系统,设置好源列表后,导入已备份的软件包即可,操作方法:sudo apt-get update && sudo tar xzvf backup.tar.gz -C / 清理 sudo apt-get clean rm -rf ~/.thumbnails/fail/gnome-thumbnail-factory/*
Dec 24, 2008
Ubuntu 软件备份与清理
Dec 15, 2008
django 生成 下载 csv 文件
import csv
download(request, qstr):
response = HttpResponse(mimetype='text/csv')
response['Content-Disposition'] = 'attachment;filename=%s.csv' %qstr
writer = csv.writer(response)
csvtitle = [u'姓名'.encode('GBK'), u'手机号'.encode('GBK'), u'商品名称'.encode('GBK'), u'售出数量'.encode('GBK'), u'单价(RMB)'.encode('GBK'), u'日期'.encode('GBK')]
writer.writerow(csvtitle)
return response
pyExcelerator django 创建可供下载的 excel
pyExcelerator 创建excel的代码大概如下:
from pyExcelerator import *
wb = Workbook()
ws = w.add_sheet('Sheet1')
ws.set_show_headers = 0
header = ['姓名', '手机号码', '商品名称', '售出数量', '单价(RMB)', '日期']
header = [x.decode('utf8') for x in header]
for i in range(len(header)):
ws.write(0, i, header[i])
wb.save()
在django中提供下载:
from pyExcelerator import *
xlsname = 'test.xls'
w = Workbook()
ws = w.add_sheet('Sheet1')
ws.set_show_headers = 0
header = ['姓名', '手机号码', '商品名称', '售出数量', '单价(RMB)', '日期']
header = [x.decode('utf8') for x in header]
for i in range(len(header)):
ws.write(0, i, header[i])
w.save(xlsname)
response = HttpResponse(mimetype='application/vnd.ms-excel')
response['Content-Disposition'] = 'attachment;filename=%s' %xlsname
response.write(w.savestream())
return response
注意,Workbook类中是没有savestream方法的,参考http://blog.csdn.net/kernelspirit/archive/2008/10/26/3147888.aspx
修改pyExcelerator代码
Workbook的savestream方法:
def savestream(self):
import CompoundDoc
doc = CompoundDoc.XlsDoc()
return doc.savestream(self.get_biff_data())
CompoundDoc.XlsDoc的savestream方法:
def savestream(self, stream):
# 1. Align stream on 0x1000 boundary (and therefore on sector boundary)
padding = '\x00' * (0x1000 - (len(stream) % 0x1000))
self.book_stream_len = len(stream) + len(padding)
self.__build_directory()
self.__build_sat()
self.__build_header()
s = ""
s = s + str(self.header)
s = s + str(self.packed_MSAT_1st)
s = s + str(stream)
s = s + str(padding)
s = s + str(self.packed_MSAT_2nd)
s = s + str(self.packed_SAT)
s = s + str(self.dir_stream)
return s
Mysql 批量删除数据表
#coding: utf-8
import MySQLdb
def droptables(tablename):
remainTable = []
db = MySQLdb.connect(host = 'localhost',
user = 'test',
passwd = 'test',
db = 'test')
cursor = db.cursor()
while True:
cursor.execute('show tables like "%s%%"' % tablename)
tables = cursor.fetchall()
if len(tables) == 0:
break
for x in tables:
try:
cursor.execute('drop table %s' %x)
db.commit()
except:
#print x
continue
cursor.close()
db.close()
if __name__ == '__main__':
tablename = 'droptest_'
droptables(tablename)
Dec 4, 2008
Windows下的Apache Php Mysql 环境搭建
Apache、Php、Mysql
配置:
1. Apache:
编辑httpd.conf
DocumentRoot "E:/Program Files/Apache Group/web"
# < 和 字母之间没有空格
< Directory "E:/Program Files/Apache Group/web" >
LoadModule php5_module "E:/Program Files/Apache Group/PHP/php5apache2.dll"
DirectoryIndex index.html index.html.var index.htm index.php
AddDefaultCharset GB2312
AddType application/x-httpd-php .php .phtml .php3 .php4
2. Php:
把Php目录下的 php.ini-dist 重命名为 php.ini,然后拷贝到 %systemRoot% 下
复制Php目录下的 php5ts.dll,libmysql.dll 到 %systemRoot%\system32下
extension_dir = "E:\Program Files\Apache Group\PHP\ext"
extension=php_dba.dll
extension=php_dbase.dll
extension=php_gd2.dll
extension=php_imap.dll
extension=php_mysql.dll
extension=php_mysqli.dll
C# 操作 Excel
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;";
strConn += "Extended Properties='Excel 8.0;HDR=No; IMEX=1;';";
strConn += "data source=" + xlsPath;
// 查询语句
string cmdText = "SELECT * FROM [Sheet1$]";
OleDbConnection connDB = new OleDbConnection(strConn);
OleDbCommand cmdDB = new OleDbCommand(cmdText, connDB);
OleDbDataReader drdr;
// 打开Excel表格
connDB.Open();
// 执行 sql语句
drdr = cmdDB.ExecuteReader();
if(drdr.Read())
{
..............
drdr.GetValue(i)
...............
}
把文本文件中的数据导入 MS SQL Server 2005
use NumberLocation;
BULK INSERT Fixed From 'E:\code\DB\fixedbook-sort.txt' With
(FIELDTERMINATOR = ',', ROWTERMINATOR = '\n')
其中 use 是先进入 数据库 NumberLocation
*.txt 是要导入的文本文件
FIELDTERMINATOR 是字段分隔符
ROWTERMINATOR 行分隔符
MS SQL Server 函数及运算
=, AS
SELECT 'database' = db_name();
SELECT id AS UserId FROM student;
2. 增加一列
SELECT au_fname, au_lname, 'Identification Number: ', au_id FROM
authors;
3. 算术运算 (+、-、*、/、%)
%只能用于 INT, SMALLINT, TINYINT
SELECT title, price, 'price -3' = price -3
4. 数学函数 (ABS, SIN, COS, TAN, PI(), RAND(), SIGN(), SQRT(), SQUARE(),
CEILING(38/3), EXP(2.0), LOG(10) ...)
SELECT LOG(10)
SELECT 69/8
5. 字符串函数
SELECT ascii('abc')
SELECT 'SQL' + 'Server' + '2005'
SELECT char(36)
SELECT charindex('Server', 'SQL Server 2005')
SELECT lower('ABC')
SELECT upper('cde')
SELECT replicate('MSSQL-', 10)
SELECT substring('1234567890', 5, 3)
SELECT len('hello world')
SELECT stuff('1234567890', 3, 2, '-abcdefghigk-')
6. 日期和时间函数 (GETDATE(), DATEADD())
SELECT GETDATE()
7. 系统函数 (DB_NAME(), USER_NAME(), SUSER_NAME(), ISNUMERIC(), ISDATE(), )
ISNUMERIC(title_id):如果是数字类型,返回1;如果是日期、字符串或者
其他数据类型,返回0
8. 数据类型强制转换
SELECT SUBSTRING(title, 1, 30) AS Title, ytd_sales FROM titles
WHERE CONVERT(char(20), ytd_sales) LIKE '3%'
C# 从Web网站下载文件
// 从服务器下载文件
// 成功返回 true,否则返回false
// using System.Net;
private bool DownloadFile(string url, string strfile)
{
HttpWebRequest hwr = null;
Stream ns = null;
FileStream fs = new FileStream(strfile, FileMode.Create);
int nReadSize = 0;
byte[] abytes = new byte[1025];
try
{
hwr = (HttpWebRequest)WebRequest.Create(url);
ns = hwr.GetResponse().GetResponseStream();
nReadSize = ns.Read(abytes, 0, 1024);
while (nReadSize > 0)
{
fs.Write(abytes, 0, nReadSize);
nReadSize = ns.Read(abytes, 0, 1024);
}
fs.Close();
ns.Close();
}
catch (Exception eer)
{
MessageBox.Show(eer.Message);
fs.Close();
File.Delete(strfile);
return false;
}
return true;
}
Error: The INF file contains Unicode characters that could not be converted correctly to ANSI
Error: The INF file contains Unicode characters that could not be
converted correctly to ANSI
解决方法:
1、在部署的安装包项目的属性中,一定要把"manufacturer"(制造商)项填写成
英文或数字,不能为中文。此时的"属性"不是选中项目后右键中的属性,而中选中
项目后,按F4键出现的发生窗口。
把其中的manufacturer项的值改为非中文。
2、因为制作的安装包程序有"快捷方式",所以在"文件系统"窗口中把"快捷方式"
的名称也要改为非中文。
3、注意将程序生成的EXE的文件名也要改成英文的
文件被数字签名策略拒绝(File was rejected by digital signature policy)
名策略拒绝(File was rejected by digital signature policy) "
这个错误产生的原因据说是:"当运行安装程序时,Windows Installer 会验证程序
包的数字签名以确保程序包没有被篡改。这时整个程序包被加载到内存中,计算机
必须拥有程序包大小所需的足够连续内存。如果计算机没有足够的连续内存,则会
出现错误。由于出现错误,Windows Installer 将无法验证是否对该程序包正确地
进行了签名。"
解决:
修改
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\Safer\CodeIdentifiers
注册表项下面的 PolicyScope 的注册表值,将值从0 改为 1
VS 2005 没有找到MFC80UD.DLL,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题
的问题。
解决方法:
通过修改项目属性->清单工具->输入输出,把"嵌入清单"选"否",.然后编译、链
接、运行即可
Ubuntu 8.04 LAMP 搭建
sudo apt-get install apache2 php5 libapache2-mod-php5 mysql-server
libapache2-mod-auth-mysql libapache2-mod-auth-mysql
设置域名,编辑/etc/apache2/httpd.conf 添加
ServerName ox0spy.org
匹配ip地址的python正则表达式
'^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$'
Python 文件操作
常用于文件读写操作
常用方法: file, open, read, readline(), readlines(),write(),
writelines(), seek(), tell(),flush(), close()
属性:name, mode, isatty, closed
2. 获取文件信息:os, stat, time
os.stat()
os.lstat()
stat模块获取详细文件信息
fileStats = os.stat(filename)
fileInfo = {
'Size' : fileStats [ stat.ST_SIZE ],
'LastModified' : time.ctime ( fileStats [ stat.ST_MTIME ] ),
'LastAccessed' : time.ctime ( fileStats [ stat.ST_ATIME ] ),
'CreationTime' : time.ctime ( fileStats [ stat.ST_CTIME ] ),
'Mode' : fileStats [ stat.ST_MODE ]
}
3. 通过os.path获取一些文件信息
文件是否存在、是否是一个目录、...
获取文件大小、创建、访问、修改时间
4. 目录操作
os.listdir(dir)
os.mkdir(dir)
os.rmdir(dir)
os.mkdirs(dirs) # mkdir -p
os.rmdirs(dirs) # rm -r
5. 对不同类型的文件进行操作:fnmatch
import os, fnmatch
for filename in os.listdir('.'):
if fnmatch.fnmatch(filename, '*.py'):
print open(filename).read()
elif fnmatch.fnmatch(filename, '*.sh'):
print filename
elif fnmatch.fnmatch(filename, '?.txt'):
print 'Text file :', filename
*代表匹配所有字符,?匹配一个任意字符
在"fnmatch"模块,我们可以创建正则表达式来应用,只要通过 "re" 模块:
import fnmatch
import os
import re
filePattern = fnmatch.translate ( '*.txt' )
for fileName in os.listdir ( '/' ):
if re.match ( filePattern, fileName ):
print 'Text file.'
如果想从一个目录下搜索一种类型的所有文件,使用glob:
glob(pathname)
Return a list of paths matching a pathname pattern.
#!/usr/bin/env python
import glob
for filename in glob.glob('[0-9].txt'):print filename
6. 序列化数据
pickle, cpickle
#!/usr/bin/env python
import pickle
fileHandle = open('pickleFile.txt', 'w')
thisList = ['This', 2, 'is', 1, 'a', 'test']
pickle.dump(thisList, fileHandle)
fileHandle.close()
解序列
#!/usr/bin/env python
import pickle
fileHandle = open('pickleFile.txt', 'r')
thisList = pickle.load(fileHandle)
fileHandle.close()
7. 内存文件:StringIO, cStringIO
a small tip : print >> f, a_string 等价于 f.write(a_string + '\n')
Django manage.py 能做什么
django-admin startproject projectName
在创建的项目下有:__init__.py, manage.py, settings.py, urls.py
下面主要看看manage.py 的用途:
manage.py 提供一些简单的管理功能,有:
1) 创建应用
./manage.py startapp appName
2) 验证models.py 书写是否正确
./manage.py validate
3) 根据models.py打印用于创建表的sql 语句
./manage.py sqlall dbName
4) 根据models.py创建表
./manage.py syncdb
5) ./manage.py shell 类似于 执行 python
6) ./manager.py dbshell 类似于 mysql -u username -p (其中username 是
settings.py 中设置的)
调用Django 日期控件
<script type="text/javascript" src="/media/js/core.js"></script>
<script type="text/javascript" src="/media/js/calendar.js"></script>
<script type="text/javascript"
src="/media/js/admin/DateTimeShortcuts.js"></script>
<input name="date" value="{%now "Y-m-d"%}" class="vDateField" type="text"
id="query_date" size="10" />
Dec 3, 2008
校内网 相册 批量 下载
python 练手
环境ubuntu 8.04
windows 用户应该会产生乱码,可以自己在程序中几个关键位置加上
.decode('UTF-8').encode('GBK')
功能:
1. 下载校内指定用户的全部相册
2. 下载指定用户的某一个指定相册
============== 很傻,很天真的分割线 ================
代码:
http://ox0spy.googlepages.com/xiaonei.py
Dec 2, 2008
苏格拉底与失恋者的对话
苏格拉底:"哦,这很正常。如果失恋了没有悲伤,恋爱大概也就没有什么味道
了。可是,年轻人,我怎么发现你对失恋的投入甚至比你对恋爱的投入还要倾心呢?"
失恋者:"到手的葡萄给丢了,这份遗憾,这份失落,您非个中人,怎知其中的酸
楚啊。"
苏格拉底:"丢了就丢了,何不继续向前走去,鲜美的葡萄还有很多。"
失恋者:"我要等到海枯石烂,直到她回心转意向我走来。"
苏格拉底:"但这一天也许永远不会到来。"
失恋者:"那我就用自杀来表示我的诚心。"
苏格拉底:"如果这样,你不但失去了你的恋人,同时还失去了你自己,你会蒙受
双倍的损失。"
失恋者:"您说我该怎么办?我真的很爱她。"
苏格拉底:"真的很爱她?那你当然希望你所爱的人幸福?"
失恋者:"那是自然。"
苏格拉底:"如果她认为离开你是一种幸福呢?"
失恋者:"不会的!她曾经跟我说,只有跟我在一起的时候,她才感到幸福!"
苏格拉底:"那是曾经,是过去,可她现在并不这么认为。"
失恋者:"这就是说,她一直在骗我?"
苏格拉底:"不,她一直对你很忠诚的了。当她爱你的时候,她和你在一起,现在
她不爱你,她就离去了,世界上再也没有比这更大的忠诚。如果她不再爱你,却要
装着对你很有感情,甚至跟你结婚、生子,那才是真正的欺骗呢。"
失恋者:"可是,她现在不爱我了,我却还苦苦地爱着她,这是多么不公平啊!"
苏格拉底:"的确不公平,我是说你对所爱的那个人不公平。本来,爱她是你的权
利,但爱不爱你则是她的权利,而你想在自己行使权利的时候剥夺别人行使权利的
自由,这是何等的不公平!"
失恋者:"依您的说法,这一切倒成了我的错?"
苏格拉底:"是的,从一开始你就犯错。如果你能给她带来幸福,她是不会从你的
生活中离开的,要知道,没有人会逃避幸福。"
失恋者:"可她连机会都不给我,您说可恶不可恶?"
苏格拉底:"当然可恶。好在你现在已经摆脱了这个可恶的人,你应该感到高兴,
孩子。"
失恋者:"高兴?怎么可能呢,不过怎么说,我是被人给抛弃了。"
苏格拉底:"时间会抚平你心灵的创伤。"
失恋者:"但愿我也有这一天,可我第一步应该从哪里做起呢?"
苏格拉底:"去感谢那个抛弃你的人,为她祝福。"
失恋者:"为什么?"
苏格拉底:"因为她给了你忠诚,给了你寻找幸福的新的机会。"
说完,苏格拉走了。
----------
*祝你幸福*
----------
2008 11 29
给家里打个电话,我妈一接电话就说你是不是病了
然后和我妹聊了很久
2008 11 30
找了点做老师的感觉
(王亮, 温锴) 宁大 10:30
2008 12 1
勾起宋泽的伤心事,内疚啊,还好早上说不辞职了
给Yang打电话,好像手机没在身边
给水水打,他愣要我再给xx打个电话
贺伟也是,聊了n久,后来说俺一根经,后来和朋友继续喝酒
(王亮, 杜娜, 毛毛, 茄哥, 唐莉) 紫园 良田路 0:30
Nov 29, 2008
校内相册批量下载
o(∩_∩)o...
使用:
1. 下载一个用户的所有相册(包括头像相册)
如图:
-e 邮箱
-p 密码
-u 你想下载那个家伙的 用户id
比如:http: //xiaonei.com/getuser.do?id=221427773,那么 -u 就是 221427773
2. 想在一个用户的某一个相册
其他参数和上面的一样,就是多了一个 -a
-a 指定这个用户的具体相册
比如:http://photo.xiaonei.com/getalbum.do?id=255545234&owner= 221427773,
那么 -a 就是 上面url id的值,255545234
Nov 28, 2008
Nov 14, 2008
Python Mysql中文解决方案
1)查看字符集支持
show character set;
2)查看字符集相关变量
show variables like "character_set%";
3)设置默认字符集为utf8 (这在Ubuntu上做的, Windows改my.ini)
修改/etc/mysql/my.cnf, 在[client]和[mysqld]下加上: default-character-set=utf8
/etc/init.d/mysql
注: 设置连接mysql时使用utf8,可以在[mysqld]下加上: init_connect='SET NAMES utf8'
2. cmd中查询时,先 set names gbk; 然后就可以正常显示汉字了
这样做是由于Windows cmd中无法显示utf8编码的汉字;如果你在Linux shell中就不需要这条命令了
3. 用MySQLdb:
db = MySQLdb.connect(host = 'localhost',
user = 'wap',
passwd = 'wap',
db = 'wap',
charset = 'utf8')
4. 读取GBK编码的文件
line = f.readline().decode('GBK')
注: 函数 decode( char_set )可以实现 其它编码到 Unicode 的转换
函数 encode( char_set )实现 Unicode 到其它编码方式的转换
5. 程序中使用字符串时,前面加上 u,如:
s = u'hello'
Nov 12, 2008
Windows搭建Python Apache Django Mysql环境
按上面的顺序安装就可以了
然后配置下apache,在httpd.conf中
把DocumentRoot、相应的Directory设置成web根目录
加一行:LoadModule python_module modules/mod_python.so
在把下面的东西加到最后:
<Location "/">
SetHandler python-program
PythonPath "['F:\web\django'] + sys.path"
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE wap.settings
PythonDebug On
</Location>
<Location "/includes/">
SetHandler None
</Location>
<LocationMatch "\.(jpg|gif|png)$">
SetHandler None
</LocationMatch>
Oct 21, 2008
C# 读取gb2312文本文件
如果不加第二个参数,读出来的中文是乱码
Python 自动搜索可用ip并设置
我添加了搜索功能
# -*- coding: GB2312 -*-
# FileName: modify_ip.py
# Author : ox0spy
# Email : ossteerer@gmail.com
# Date : 2008-10-21
# 程序的前两个函数是qujinlong123@gmail.com实现的,这里借用下
import _winreg
from ctypes import *
def ModifyIpAddress(ipAddress, subnetMask, gateway, dnsServer):
netCfgInstanceID = None
hkey = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, \
r'System\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}')
keyInfo = _winreg.QueryInfoKey(hkey)
# 寻找网卡对应的适配器名称 netCfgInstanceID
for index in range(keyInfo[0]):
hSubKeyName = _winreg.EnumKey(hkey, index)
hSubKey = _winreg.OpenKey(hkey, hSubKeyName)
try:
hNdiInfKey = _winreg.OpenKey(hSubKey, r'Ndi\Interfaces')
lowerRange = _winreg.QueryValueEx(hNdiInfKey, 'LowerRange')
# 检查是否是以太网
if lowerRange[0] == 'ethernet':
driverDesc = _winreg.QueryValueEx(hSubKey, 'DriverDesc')[0]
# print 'DriverDesc: ', driverDesc
netCfgInstanceID = _winreg.QueryValueEx(hSubKey, 'NetCfgInstanceID')[0]
# print 'NetCfgInstanceID: ', netCfgInstanceID
break
_winreg.CloseKey(hNdiInfKey) # 关闭 RegKey
except WindowsError, e:
pass
# print r'Message: No Ndi\Interfaces Key'
# 循环结束,目前只提供修改一个网卡IP的功能
_winreg.CloseKey(hSubKey)
_winreg.CloseKey(hkey)
if netCfgInstanceID == None:
print '修改IP失败 - 没有找到网络适配器'
exit()
# print netCfgInstanceID
# 通过修改注册表设置IP
strKeyName = 'System\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\' + netCfgInstanceID
# print strKeyName
hkey = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, \
strKeyName, \
0, \
_winreg.KEY_WRITE)
try:
_winreg.SetValueEx(hkey, 'IPAddress', None, _winreg.REG_MULTI_SZ, ipAddress)
_winreg.SetValueEx(hkey, 'SubnetMask', None, _winreg.REG_MULTI_SZ, subnetMask)
_winreg.SetValueEx(hkey, 'DefaultGateway', None, _winreg.REG_MULTI_SZ, gateway)
_winreg.SetValueEx(hkey, 'NameServer', None, _winreg.REG_SZ, ','.join(dnsServer))
except WindowsError:
print 'Set IP Error'
exit()
_winreg.CloseKey(hkey)
return netCfgInstanceID
# 调用DhcpNotifyConfigChange函数通知IP被修改
def Notify(netCfgInstanceID, ipAddress, subnetMask):
DhcpNotifyConfigChange = windll.dhcpcsvc.DhcpNotifyConfigChange
inet_addr = windll.Ws2_32.inet_addr
# DhcpNotifyConfigChange 函数参数列表:
# LPWSTR lpwszServerName, 本地机器为None
# LPWSTR lpwszAdapterName, 网络适配器名称
# BOOL bNewIpAddress, True表示修改IP
# DWORD dwIpIndex, 表示修改第几个IP, 从0开始
# DWORD dwIpAddress, 修改后的IP地址
# DWORD dwSubNetMask, 修改后的子码掩码
# int nDhcpAction 对DHCP的操作, 0 - 不修改, 1 - 启用, 2 - 禁用
DhcpNotifyConfigChange(None, \
netCfgInstanceID, \
True, \
0, \
inet_addr(ipAddress[0]), \
inet_addr(subnetMask[0]), \
0)
def Pin(ip = '192.168.1.1'):
""" ping -n 1 ip"""
import os
if os.system("ping -n 1 %s >nul" % ip) == 0:
return True
return False
def GetConfInfo(filename = 'conf.ini'):
import re, sys
try:
f = open(filename, 'r')
lines = [line.split('#')[0].strip() for line in f.readlines()]
f.close()
if len(lines) >= 6:
# ip网段
network = lines[0]
pattern = '^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$'
if not re.search(pattern, network):
print '网段设置错误,请修改配置文件网段信息'
sys.exit(2)
network = network.split('.')
network.pop()
network = '.'.join(network)
# print 'network : ', network
# 开始ip
startIp = int(lines[1])
if (startIp < 1 or startIp > 254):
print '开始ip设置错误, ip :', startIp
sys.exit(3)
# 结束ip
endIp = int(lines[2])
if endIp < 2 or startIp > 255:
print '结束ip设置错误'
sys.exit(4)
# 子网掩码
subnetMask = lines[3]
# 默认网关
gateway = lines[4]
if not re.search(pattern, gateway):
print '默认网关设置错误'
sys.exit(5)
# dns
dnsServ = lines[5]
if not re.search(pattern, dnsServ):
print 'dns服务器设置错误'
sys.exit(6)
else:
print '配置文件有误,请修正后重试'
sys.exit(1)
except IOError, e:
print '确定配置文件名为 : %s' % filename
sys.exit(7)
return [network, startIp, endIp, subnetMask, gateway, dnsServ]
Info = GetConfInfo()
if not Info:
sys.exit()
network, startIp, endIp, subnetMask, gateway, dnsServ = Info
if startIp == endIp:
endIp += 1
ipAddress = ['%s.%s' % (network, i) for i in range(startIp, endIp)]
subnetMask = [subnetMask]
gateway = [gateway]
dnsServer = [dnsServ]
url = 'http://ox0spy.blogspot.com'
MessageBox = windll.user32.MessageBoxA
for ip in ipAddress:
ip = [ip]
# print 'IP Address : ', ip
netCfgInstanceID = ModifyIpAddress(ip, subnetMask, gateway, dnsServer)
Notify(netCfgInstanceID, ip, subnetMask)
if Pin(url):
# print '可用Ip地址 :', ip[0]
msg = '可用Ip地址 : %s o(∩_∩)o...' % ip[0]
MessageBox(0, msg, 'Good luck', 0)
break;
else:
msg = '没有可用ip,换个网段试试 ^_^'
MessageBox(0, msg, 'sorry', 0)
ttylinux Tips
环境:vmware平台上装ttylinux
2. ttylinux 联网
# change settings and rename to interface.devname, i.e. interface.eth0
INTERFACE="eth0"
DHCP="no"
IPADDRESS="192.168.18.18"
NETMASK="255.255.255.0"
#GATEWAY=192.168.18.1
BROADCAST="192.168.18.255"
nameserver 61.233.154.33
search localdomain
scp username@hostname:path/to/file local_file
例如:
就是将本地目前所在目录中的所有 .html 文件拷贝到 athena 的个人网页空间的 portfolio/2005/ 次目录中。
Jul 8, 2008
Windows CE开发入门
by ossteerer@gmail.com
// 声明下:俺是初学者,有问题的地方还请高手斧正
网上有一些Windows CE开发入门的文章,但我看的头很晕,所以决定写篇自己的学习过程~
1. 简单介绍下Windows CE: (来源于百度百科)
WindowsCE是微软公司嵌入式、移动计算平台的基础,它是一个开放的、可升级的32位嵌入式操作系统,是基于掌上型电脑类的电子设备操作系统,它 是精简的Windows 95,Windows CE的图形用户界面相当出色。
其中CE中的C代表袖珍(Compact)、消费(Consumer)、通信能力(Connectivit)和伴侣(Companion);E代表电子 产品(Electronics)。与Windows 95/98、Windows NT不同的是,Windows CE是所有源代码全部由微软自行开发的嵌入式新型操作系统,其操作界面虽来源于Windows 95/98,但Windows CE是基于WIN32 API重新开发、新型的信息设备的平台。Windows CE具有模块化、结构化和基于Win32应用程序接口和与处理器无关等特点。Windows CE不仅继承了传统的Windows图形界面,并且在Windows CE平台上可以使用Windows 95/98上的编程工具(如Visual Basic、Visual C++等)、使用同样的函数、使用同样的界面风格,使绝大多数的应用软件只需简单的修改和移植就可以在Windows CE平台上继续使用。Windows CE并非是专为单一装置设计的,所以微软为旗下采用Windows CE作业系统的产品大致分为三条产品线,Pocket PC(掌上电脑)、Handheld PC(手持设备)及Auto PC。
2. 现在的问题就是我们怎么开始开发Windows CE应用程序——搭建开发环境
2.1、选择开发工具
我选择eVC4(eMbedded Visual C++ 4.0)做开发工具,因为eVC4和VC 6.0很像,容易上手,而且与vs 2005相比非常小巧。
软件下载:
eVC4:http://www.microsoft.com/downloa ... &displaylang=en
eVC4 sp4:http://www.microsoft.com/downloa ... &displaylang=en
Windows Mobile 5.0 Pocket PC SDK:http://www.microsoft.com/downloa ... &displaylang=en
Localized Windows Mobile 5.0 Pocket PC Emulator Images:http://www.microsoft.com/downloa ... &displaylang=en
下载完毕,按这个顺序装完这4个软件,开发环境就ok了,就可以写个Hello World测试下了.
3. 第一个测试程序
3.1 创建工程
打开eVC4,File --> New ,新建一个 "WCE Application" 工程,填好Project name、Location并选择CPU类型.
我只在模拟器中运行这个程序,所以我只选择了Win32 (WCE X86)
注:不管选择哪种CPU,Win32 (WCE emulator)都是必须要选择的.
点OK进入下一步,然后,选择"An empty project" 建一个空工程(没有任何附加代码)
怎么样,和VC 6.0 中创建工程很像吧~
3.2 编写程序
File --> New, 新建个C/C++源文件(即:C/C++ source file),在File处填写该文件的文件名hello,然后在刚才建的hello.cpp文件中输入下面的代码:
// hello.cpp - A sample "Hello World " program. #include <windows.h> // Program entry point int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nShowCmd) { MessageBox(NULL, TEXT("Hello World!"), TEXT("hello"), MB_OK); return 0; } |
现在按 F7 编译该程序,如果没有错误,就可以按 Ctrl+F5执行程序。在模拟器中可以看到程序执行结果.如下图:
4. 总结
本文简单的介绍了Windows CE,并教你如何搭建开发环境,最后写了一个Hello World程序。有了这些基础我们就可以开始学习Windows CE程序开发了。
推荐一本我最近正在看的书: Programming Microsoft Windows CE .NET, Third Edition.pdf (1.09 MB)
Jun 20, 2008
Tips
2. Google的Picasa 相册可以批量下载,有两种方法,都需要先安装Picasa
a. 查看网页源代码,搜索“下载相册”,然后把url copy到地址栏 回车
b. 用Picasa Webalbums Assistant:可以通过指定Picasa用户名或图片地址来批量下载位于Google Picasa上某一相册中的图片
官方网址:http://picasawebalbumsassistant.googlepages.com/ [需翻墙]
下载地址:下载地址1 | 下载地址2 | 大小:806K
Google 真是个好东西啊,太强大了。。。
May 23, 2008
使用Ubuntu Live CD 安装 grub
手头上有没有空闲光驱,拆机器上的太麻烦
故,选择硬盘安装
但总要有个程序先把系统引导起来,如wingrub、grub4dos等,没有安装windows,wingrub显然就pass了
正好手边有张Ubuntu Live CD,就用它了。
用Live CD将系统引导起来,进入ubuntu。
$ sudo grub
grub> root (hd0,0)
grub> setup (hd0,0)
Checking if "/boot/grub/stage1" exists... no
Checking if "/grub/stage1" exists... no
Error 15: File not found
grub>quit
$ grub --version // 查看grub版本
grub (GNU GRUB 0.97)
我把另一个系统中的/boot/grub 拷贝到 hda1中,现在就可以用上面的 root,setup命令将grub安装到这个系统上了。
然后,只需把rhel的5个iso文件和vmlinuz、initrd.img拷贝到hda1中,重启机器,开始安装rhel5
May 16, 2008
Pentest - Tools
Packet Shaper:
Nemesis: a command line packet shaper
Packit: The Packet Toolkit - A network packet shaper.
Hping by Antirez: a command line TCP/IP packet shaper
Sing: stands for ‘Send ICMP Nasty Garbage’; sends fully customizeable ICMP packets
Scapy: a new python-based packet generator
Password Cracker/Login Hacker:
John the Ripper: a well-known password cracker for Windows and *nix Systems
Djohn: a distributed password cracker based on “John the Ripper”
Cain & Abel: an advanced password recovery tool for windows systems. It sniffs the network packets an cracks authentication brute-force or with dictionary attacks.
Project RainbowCrack: Advanced instant NT password cracker
Rainbowtables: The shmoo group provides pre-generated rainbow tables for bittorrent download. The tables are generated with RainbowCrack (see above).
Windows NT password recovery tool by Peter Nordahl
THC-Dialup Login Hacker by THC. It tries to guess username and password against the modem carrier. As far as I know the only available dialup password guesser for *NIX.
Hydra by THC: a multi-protocol login hacker. Hydra is also integrated with Nessus.
Medusa: parallel network login auditor
THC imap bruter: a very fast imap password brute forcer
x25bru: a login/password bruteforcer for x25 pad
Crowbar: a generic web brute force tool (Windows only; requires .NET Framework)
MDCrack-NG: a very fast MD4/MD5/NTLMv1 hash cracker; works optionally with precomputed hash tables
Advanced Sniffers:
Wireshark (formerly known as Ethereal): an open source network protocol analyzer
Dsniff by Dug Song: a combination of very useful sniffer and man-in-the-middle attack tools
Ettercap: a multipurpose sniffer/interceptor/logger for switched LAN environments
aimsniffer: monitors AOL instant messager communication on the network
4G8: a tool ,similar to ettercap, to capture network traffic in switched environments
cdpsniffer: Cisco discovery protocol (CDP) decoding sniffer
Port Scanner / Information Gathering:
nmap: the currently most well-known port scanner. Since version 3.45 it supports version scans. Have a look at PBNJ for diffing different nmap scans.
ISECOM released their nmap wrapper NWRAP, which shows all known protocols for the discovered ports form the Open Protocol Resource Database
Nmap::Scanner: Perl output parser for nmap
Amap by THC: An advanced portscanner which determines the application behind a network port by its application handshake. Thus it detects well-known applications on non-standard ports or unknown applications on well-known ports.
vmap by THC: version mapper to determine the version (sic!) of scanned daemons
Unicornscan: a information gathering and correlation engine
DMitry (Deepmagic Information Gathering Tool): a host information gathering tool for *nix systems
Athena: a search engine query tool for passive information gathering
Security Scanner:
Nessus - In version 2 an OpenSource network scanner. Version 3 is only available in binary form and under a proprietary license.
OpenVAS: a fork of Nessus 2.2.5 (formerly known as GNessUs)
Nessj: a java based nessus (and compatibles) client (formerly known as Reason)
Paul Clip from @stake released AUSTIN, a security scanner for Palm OS 3.5+.
Webserver:
Nikto: a web server scanner with anti IDS features. Based on Rain Forest Puppies libwhisker library.
Wikto: a webserver assessment tool (Windows only; requires .NET framework)
WSDigger: a black box web pen testing tool from Foundstone (Windows based)
Metis: a java based information gathering tool for web sites
Fingerprinting:
SinFP: a fingerprinting tool which requires only an open tcp port and sends maximum 3 packets
Winfingerprint: much more than a simple fingerprinting tool.It scans for Windows shares, enumerates usernames, groups, sids and much more.
p0f 2: Michal Zalewski announced his new release of p0f 2, a passive OS fingerprinting tool. p0f 2 is a completely rewrite of the old p0f code.
xprobe2: a remote active operating system fingerprinting tool from Ofir Arkin and the xprobe2 team
Cron-OS: an active OS fingerprinting tool based on TCP timeout behavior. This project was formerly known as “RING” and is now published as a nmap addon.
Proxy Server:
Burp proxy: an interactive HTTP/S proxy server for attacking and debugging web-enabled applications
Screen-scraper: a http/https-proxy server with a scripting engine for data manipulation and searching
Paros: a man-in-the-middle proxy and application vulnerability scanner
WebScarab: a framework for analyzing web applications. One of it’s basic functionality is the usage as intercepting proxy.
War Dialers:
IWar: a classic war dialer, now also with VOIP (IAX2) support. One of a few wardialers for *nix operation systems, and the only with VOIP functionality (to my knowledge)
THC-Scan: a war dialer for DOS, Windows and DOS emulators
Malware / Exploit Collections:
packetstormsecurity.org: Huge collections of tools and exploits
ElseNot Project: The project tries to publish an exploit for each MS Security Bulltin. A script kiddie dream come true.
Offensive Computing: Another malware collection site
Securityforest: try the ExploitTree to get a collection of exploit code; have a look at the ToolTree for a huge list of pentest stuff
Databases / SQL:
sqlninja: a tool to exploit sql injection vulnerabilities in web applications with MS SQL Servers (alpha stage)
CIS Oracle Database Scoring Tool: scans Oracle 8i for compliance with the CIS Oracle Database Benchmark
SQLRecon: an active and passive scanner for MSSQL server. Works on Windows 2000, XP and 2003.
absinthe: a gui-based tool that automates the process of downloading the schema & contents of a database that is vulnerable to Blind SQL Injection (see here and here).
SQL Power Injector: a GUI based SQL injector for web pages (Windows, .Net Framework 1.1 required, Internet Explorer 5.0+ required)
Voice over IP (VOIP):
vomit (voice over misconfigured internet telephones): converts Cisco IP phone conversations into wave files
SiVuS: a VOIP vulnerability scanner - SIP protocol (beta, Windows only)
Cain & Abel: mostly a password cracker, can also record VOIP conversations (Windows only)
sipsak (SIP swis army knife): a SIP packet generator
SIPp: a SIP test tool and packet generator
Nastysip: a SIP bogus message generator
voipong: dumps G711 encoded VOIP communications to wave files. Supports: SIP, H323, Cisco Skinny Client Protocol, RTP and RTCP
Perl based tools by Thomas Skora: sip-scan, sip-kill, sip-redirectrtp, rtpproxy and ipq_rules
rtptools: a toolset for rtp recording and playing
Networkbased Tools:
yersinia: a network tool designed to take advantage of some weakeness in different network protocols (STP, CDP, DTP, DHCP, HSRP, 802.1q, VTP)
Netsed: alters content of network packets while forwarding the packets
ip6sic: a IPv6 stack integrity tester
VPN:
ike-scan: an IPSec enumeration and fingerprinting tool
ikeprobe: ike scanning tool
ipsectrace: a tool for profiling ipsec traffic in a dump file. Initial alpha release
VPNMonitor: a Java application to observer network traffic. It graphically represents network connections and highlights all VPN connections. Nice for demonstrations, if somewhat of limited use in a real pen test.
IKECrack:an IKE/IPSec cracker for pre-shared keys (in aggressive mode authentication [RFC2409])
DNSA: DNS Auditing tool by Pierre Betouin
Hunt: a session hijacking tool with curses GUI
SMAC: a Windows MAC Address Modifying Utility. Supports Windows 2000 and XP.
The WebGoat Project: a web application written in Java with intentional vulnerabilities. Supports an interactive learning environment with individual lessons.
TSCrack: a Windows Terminal Server brute forcer
Ollie Whitehouse from @stake released some new cellular phone based pentesting tools for scanning (NetScan, MobilePenTester). All tools require a Sony Ericsson P800 mobile phone. Unfortunately, @stake seems no longer to support much of their free security tools. So, use instead the alternativ download links above.
THC-FuzzyFingerprint: generates fuzzy fingerprints that look almost nearly equal to a given fingerprint/hash-sum. Very useful for MITM attacks.
BeatLM, a password finder for LM/NTLM hashes. Currently, there is no support for NTLM2 hashes. In order to get the hashes from network traffic, try ScoopLM.
THC vlogger: a linux kernel based keylogger
The Metasploit Framework: an “advanced open-source platform for developing, testing, and using exploit code”.
ATK (Attack Tool Kit): a comination of security scanner and exploit framework (Windows only)
Pirana: an exploitation framework to test the security of email content filters. See also the whitepaper
PassLoc: a tool which provides the means to locate keys within a buffer. Based on the article “Playing hide and seek with stored keys” by Adi Shamir.
Dl-Hell: identifies an executables dynamic link library (DLL) files
DHCPing: a security tool for testing dhcp security
ldapenum: a perl script for enumeration against ldap servers.
Checkpwd: a dictionary based password checker for oracle databases
NirCmd from NirSoft: a windows command line tool to manipulate the registry, initiate a dialup connection and much more
Windows Permission Identifier: a tools for auditing user permissions on a windows system
MSNPawn: a toolset for footprinting, profiling and assesment via the MSN Search. Windows-only, .NET required
snmpcheck:a tool to gather information via snmp. Works on Linux, *BSD and Windows systems.
pwdump6: extract NTLM and LanMan hashes from Windows targets
May 14, 2008
如何在网络上实时监测地震 [转]
From : http://www.bigsea.com.cn
四川7.8级地震,且5级以上余震不断。
如果您有四川的亲友,请及时联系,唯望大家平安。长久以来,地震基本上是只能监测不能预测的。
在此介绍一些网上监测地震的方法(昨天cnBeta也是通过他们向大家提供技术情报 的):
1. IRIS 监测图
该图列出监测到的地震
http://www.iris.edu/seismon/bigmap/index.phtml
2. USGS 地震记录
该网页列出一周内的2.5级以上的地震记录
http://earthquake.usgs.gov/eqcenter/rec ... s_all.html
3. Opera Widget: EarthQuakes Map
该 Opera Widget 显示全球范围内一周内发生的地震,实时更新。(需配合 Opera 使用)
http://widgets.opera.com/widget/5178/
May 13, 2008
西夏省嵬城遗址
于惠农县庙台乡省嵬村,为党项族首领李德明于北宋天圣二年(1024年)所筑。遗址为正方形,边长600米,设东南两城门,墙体为黄土夯实,残墙最高 1.5米。1965年,宁夏博物馆在此挖掘出唐、宋、西夏等朝钱币、古陶瓷器及铁器,已被列为宁夏回族自治区重点文物保护单位。 关于省嵬城的建筑,史料记载不多。《明一统志》载:省嵬城在河东,河东废城也。《嘉靖宁夏新志》载:"省嵬城,河东废城也,未详其始。"《宁夏府志》 载:"嵬城遗址在省嵬山下,西南去府(今银川市)东北一百四十里,逾黄河。"吴广成《西夏书事》载:"天圣(北宋)二年(公元1024年) 春二月,德明做省嵬城于定州(西夏将银川以北为定州)。"这些记载虽简,但却载明了省嵬城遗址的所在地点。
西夏王朝是以党项羌族为主体建立起的多民族国家政权,于1032年(宋天圣10年)建国,1227年被成吉思汗所灭,历时近200年。李元昊的 祖上拓跋思恭曾为唐朝镇压黄剿领导的农民起义军立下战功,被唐僖宗赐姓李,至他的祖父李继迁、父亲李德明都受到重用。李元昊这位军事天才不赞成父亲德明向 宋称臣。老辣的德明当时鉴于时机不成熟,对儿子说:"吾久用兵疲矣,吾族三十年衣锦绮,此宋恩也,不可负!"元昊顶撞道:"衣皮毛,事畜牧,蕃性祈便。英 雄之生,当王耳,何锦绮为?"雄心壮志可见一斑。
元昊建国后,升兴州首府为兴庆府(今银川市),之后的年代里组织创制西夏文字。西夏文形体方正,结构复杂,笔画较多,约有6000字左右,字体 有草、篆、隶、楷等。西夏崇尚佛教,把佛教定为国教,规定每一季第一个月的朔日(初一)为"圣节"。让官民届时烧香拜佛,不惜用行政手段来推行佛教,并接 受汉文化及吐藩、回鹘文化,从而逐渐形成了自己的西夏文化体系。宋代欧阳修曾就元昊治国有方进行过评价:"威能畏其下,恩能死其人。"
1032年西夏王李德明卒,其子元昊嗣位,首先去掉唐、宋时期所赐给的李、赵姓氏,自号嵬名氏,自标吾祖"可汗"(即天子的意思)。李德明用自 己祖先嵬名氏(党项羌的姓名)给建起的省嵬城取名。其意可谓深谋远虑,确有自称一统的想法。嵬城遗址曾出土一具秃发瓷制人 头。元昊曾于明道二年(1033)下令秃发。这件文物弥足珍贵。
地址: 在省嵬山下,西南去府(今银川市)东北一百四十里,逾黄河
西夏的衰落和灭亡 (公元1206—1227年)
天庆十三年(公元1206年)一月,仁孝的侄子、镇夷郡王安全,勾结纯祐的母亲
罗氏,发动宫廷政变,废黜纯祐,做了第七代皇帝。久觎皇位的安全,"天资暴
狠,心术险鸷",金朝开始不予承认,但是在罗氏的多次请求下,才勉强给予"册
封"。襄宗安全篡位以后,改变长期与金盟好的政策,依附日渐强大的蒙古,对金
进行了长达十余年的战争,夏、金双方在经济和军事上都受到严重损伤,西夏国内
的阶级矛盾也进一步激化。这时,蒙古迅速崛起,加紧南下侵扰。这种内外形势,
导致了西夏的衰落和灭亡。
一、夏、金关系的破裂和战争
西夏和金朝之间的睦邻友好关系,始于崇宗乾顺末年(夏元德六年,公元1124
年)。在此之后八十多年,金和西夏之间虽有一些小的磨擦,但基本上维持着比较
和好的关系。两国之间的使节往来频繁,政治上互相支持,经济上互通有无,这种
关系对双方都有好处。安全篡位后,改变国策,依附日渐强大的蒙古,与金之间开
始了长期的战争,使西夏面临严重威胁的局势。
公元十一、十二世纪时,在今蒙古草原及其周围,散居着许多游牧部落,如蒙
兀部,塔塔儿部、乃蛮部、汪古部等。其中蒙兀即蒙古部。蒙古部贵族铁木真在公
元十二世纪末至十三世纪初,联合一些部落击败、兼并另一些部落,于公元1206年
结束了蒙古草原上长期分裂的局面,在斡难河即位为蒙古大汗,尊号成吉思汗。蒙
古汗国统一成一支强大的力量后,以成吉思汗为首的蒙古贵族,开始向外扩张和掳
掠,首当其冲的便是西夏和金。
夏应天四年(公元1209年)九月,蒙古军队围攻西夏都城,安全向金朝求援。金
朝因也遭到蒙古的侵扰,不能自保,没有派兵援救。西夏受到蒙古的打击以后,安
全慑于蒙古的强大,企图将矛头引向金朝。蒙古兵退后的第二年八月,安全发兵万
余骑,攻打金朝的葭州(今陕西佳县境),从此,夏、金关系正式宣告破裂。
夏皇建二年(公元1211年)七月,齐王遵顼(xǖ音须)发动宫廷政变,废黜襄宗安
全,自立为帝。神宗遵项是宗室齐王彦宗之子。尽管史书上说他"端重明粹,少力
学,长博通群书,工隶篆",纯祐时曾以"廷试进士,唱名第一",嗣齐王爵,并擢
升为大都督府主。实际上,他却是一个比安全明智不了多少的昏君。遵项夺得帝位
以后,全盘承袭了从安全开始的亡国政策,妄图乘蒙古攻金的机会,掳掠财物,扩
大领土,对金的战争越来越频繁,规模也越来越大。遵顼嗣位伊始便遣万余骑攻打
金朝的东胜城(今内蒙古托克托),金朝西南路马军万户纥烈石鹤寿及时赶来救
援,夏兵败退。十一月,遵顼又以兵万余攻打金军事要地平凉府(今甘肃平凉
县),由于金朝早有准备,围城时又听到金有援兵万人即将赶到,遂匆忙解围而
去。夏光定三年(公元1213年)元月,夏兵攻破金保安州(今陕西志丹县),进围庆阳
府(今甘肃庆阳县)。八月,乘金静难节度使乌林答琳患病的机会,攻破邠州(今陕
西彬县)。十一月,金朝内乱,遵顼乘机出兵攻打会州。十二月,又以万余骑攻破
巩州(今甘肃陇西县),进围平凉府,被金兵击败。
光定四年(公元1214年)秋,遵顼令吐蕃路招讨使万庆义勇派人到南宋西和州
(今甘肃西和县西),约宋制置使董居谊出兵,夹击金朝,遭到南宋的拒绝。光定五
年(公元1215年)一月,金朝边境官吏派兵侵扰夏境,金主得悉后怕事态扩大,立即
派使臣向遵项赔情道歉,但遵项不肯罢休,出兵攻金积石州 (今青海贵德县),接
着又进攻环州。十月,遵顼集聚右厢精兵八万余人,破金临洮府(今甘肃临谭县西
南),然后退兵转攻金绥德境内的克戎、绥平诸地。十二月,遵顼派兵和金国叛将
程陈僧一起再攻临洮府,遭到金兵痛击。光定六年(公元1216年)九月,遵顼派人联
络蒙古军队,合兵攻打金延安、代州等地,并攻陷潼关。同年冬,遵顼派兵四万余
围攻金定西城,被金兵打败,死二千余人。
金朝遭到西夏的连续攻击,忍无可忍,于十二月分兵两路,发起反击。右监军
陀满胡土门、延安总管古里古石伦率兵攻西夏的盐、宥、夏诸州;庆阳总管庆山
奴、知平凉府移刺塔不也攻西夏的威、灵、会等州。遵项面对金朝的两路攻势,分
兵抵抗,夏、金双方势均力敌,出现了相持不下的局面。光定七年(公元1217年)
一月,遵顼以三万余骑随蒙古兵攻金平阳府(今山西临汾市西南)。金兵顽强抵
抗,蒙古兵大败。西夏只得退兵,途经宁州(今甘肃宁县),遭到金将庆山奴的伏
击,大败而归。遵顼附庸蒙古、合兵攻金的策略,不仅不能消除蒙古的威胁,反而
把自己降为被蒙古役使的地位。十二月,蒙古军队再度围困西夏都城,遵顼仓皇出
逃。可是,遵顼仍未能从中吸取教训。
光定八年(公元1218年)五月,遵顼又以步骑三千余人,引蒙古兵由葭州入鄜、
延,遭到金兵的沉重打击。遵顼不甘心,又先后两次派人到四川,请南宋出兵攻
金,再次遭到拒绝。光定十年 (公元1220年)二月,夏兵攻金朝镇戎军,接着又攻
新泉城(今甘肃靖远县西南)。金兵则入夏宥州,围神堆府(今陕西靖边县西),杀
夏兵二千余,缴获各种牲畜三千多。八月,遵顼遣万余兵攻破会州,金主命陕西行
省与夏议和。遵顼拒绝议和,于九月派兵三万,乘胜破西宁州(今青海西宁市),围
定西州(今甘肃定西县南)。接着,又遣枢密使宁子宁、嵬名公辅率兵二十万,进攻
金军事要地巩州,久攻不下,死伤者数以万计。光定十一年(公元1221年) 三月,
蒙古木华黎部渡过黄河,攻西夏河西诸堡,守将无力抵抗,纷纷投降。面对蒙古大
兵压境,遵项急忙派监府塔海设宴招待蒙古军队,并派塔哥、甘普等人率兵五万归
木华黎指挥,随蒙古军进攻金朝,使西夏进一步紧绑在蒙古的战车上。十月,木华
黎率蒙古、西夏兵破金朝葭州,并围绥德、延安、安塞等城砦。十二月,遵顼得悉
金主令临洮府总管女奚烈古里间等招抚十万大军,准备攻取兴、灵二州,便先发制
人,发兵数十万,分三路向金发起进攻,金边境地区遭到西夏军队的极大蹂躏和破
坏。光定十二年(公元1222年)六月,木华黎和右都监石天应率兵攻金陕西诸州,向
夏国借道,遵顼马上应允,并于十二月出兵配合,至质孤堡被金兵打败。翌年一
月,遵顼派步骑十万,配合木华黎围攻金风翔府(今陕西风翔县),道挫败后,不告
蒙古,先撤兵退还。光定十三年(公元1223年),兴、灵诸州春旱粮食无收,"饥民
相食"。西夏境内的各族人民在战火和自然灾害的袭击下,处于水深火热之中。但
是,以遵顼为首的夏国统治集团,却完全不顾人民的死活,继续全力对金作战。七
月,遵顼令亲军万人攻破金积石州。十月,蒙古为了惩罚风翔之战夏兵不辞而别,
派兵包围积石州,并四出抄掠,将夏兵围困达半个多月;才退兵。蒙古大军的铁拳
又一次打到了遵顼自己的头上。遵顼为保全自己,甘心做蒙古的附庸,但是蒙古对
他却早已失去了兴趣,多次遣使责令他退位,遵顼成了他自己制定的附蒙抗金政策
的牺牲品。在蒙古的逼迫下,遵顼只好于十二月将皇位传给次子德旺,做了西夏历
史上惟一的"上皇"。献宗德旺接位以后,改变遵顼依附蒙古的政策,重新和金朝修
好,共抗蒙古。乾定元年(公元1224年)十月,德旺采纳右丞相高良惠的建议,派使
节到金朝议和。乾定二年(公元1225年)九月,德旺派吏部尚书李仲谔等去金朝讲
和,商定双方相互支援。但这时蒙古已兵临金都城下,金朝危在旦夕,自顾不暇,
早已无力援助西夏,夏国的灭亡也同样已经不可避免。
二、统治阶级内部的矛盾
面对迅速崛起的蒙古汗国,要使国家继续生存和发展,西夏的国策只能是安定
国内,联合金、宋,共同抗蒙。但是以昏庸腐瞆的襄宗、神宗为首的西夏最高统治
集团,却坚持附蒙抗金的错误政策,造成社会经济凋敞,统治阶级内部的矛盾重
重,这是西夏衰亡的内部原因。在西夏皇室中,以太子德任和梁德懿、高良惠等为
代表,提出联金抗蒙的正确主张,但由于安全、遵顼的反对,这一主张始终没有得
以实现。
夏光定六年(公元1216年),葩俄、苽藜等各氏族首领汪三郎、青觉儿、阿令结
等人,不满遵顼对金作战的政策,率部投金,并成为英勇抗击夏兵侵扰的名将。夏
光定十三年(公元1223年),遵顼令德任领兵进犯金朝,德任拒绝接受,并对他父亲
说:"金朝的兵势还很强大,不如与金修好,结为盟友。"遵顼不听,训斥说:"你
懂得什么?金朝失去兰州竟无力收复,强盛在哪里?"德任再三劝阻无效;提出弃太
子位,出家为僧的要求。遵顼勃然大怒,下令将德任软禁在灵州。十二月,跟随蒙
古的夏国军队在积石州遭到蒙古兵的围困,遵顼不仅没有从中受到应有的教训,反
而准备集全国十二监军司的兵力,孤注一掷,进攻金朝的巩州。御史中丞梁德懿知
道后,上疏谏阻说:"国家用兵十余年,田野荒芜,民生涂炭,连妇女小孩都知道
国势濒危。而朝廷的大臣们,却终日清歌夜宴,不虑国家危亡。太子以父子之情,
为国家存亡担忧,毅然陈述大计,敬献忠言,反而遭到斥责和废弃,蒙受屈辱和软
禁。这样做合适吗?望国主能抚恤百姓,修睦邻邦。"这番话对维护遵顼的统治,
还是很恳切的。可是遵顼根本听不进去,反而将梁德懿一顿痛骂。梁德懿在悲愤和
失望之余,只好辞官退职稳居。
安全、遵顼两代对金的长期战争,不仅受到统治阶级内部一部分皇亲贵族的反
对,而且也遭到国内广大人民的强烈憎恶。他们不时采取逃避征兵的办法,使遵顼
点兵不能遽集。在夏、金友好时期,金朝在边境地区,如保安、兰州等地开设榷
场,鼓励和发展两国之间的官方和民间贸易。西夏以自己境内的特产青白盐、牲畜
和皮毛等产品,交换金朝的粮食、铜、丝麻织品、货币和其他物资。同时,西夏还
可以通过赴金朝使节的频繁往来,在金都城公开进行贸易活动,从金国市场上购买
西夏所急需的大量物资。夏、金关系破裂以后,金朝采取关闭榷场、禁绝贸易的手
段回击。
光定二年(公元1212年)正月,遵顼在下令进犯金朝的同时,又派使节到金都,
企图按照惯例,在会同馆和金人进行贸易,被金朝驱逐出境。夏、金之间的贸易交
往,因西夏推行背金政策而受到禁绝,使西夏在经济上受到很大损失。
长期的战乱,对西夏国内的生产和人民生活造成极其严重的恶果。西夏对金的
战争,双方互有胜负。在战争中,西夏劳动人民被杀被俘,社会生产力遭到极大破
坏,大量牲畜和其他物资投入战争,致使生产资料严重不足。德旺时的殿中御史针
对西夏社会的经济情况,曾奏疏指出:"自兵兴以后,败卒旁流,饥民四散,若不
招集而安抚之,则国本将危。"又说,"国经兵贸,民不聊生,耕织无时,财用并
乏。"这些话绝不是夸大之词。
公元1226年蒙古军队攻破应里县(今宁夏中卫县)后,看见夏国"仓库无斗粟尺
帛之储'。由此可见,夏国的社会经济确实已经陷于全面崩溃的绝境。对金朝无休
止的战争,最直接的受害者,自然是生活在社会最底层的广大劳动人民。战争使他
们背井离乡,流离失所,处于深重的灾难之中。特别是光定十三年兴、灵地区大早
不雨,造成 "饥民相食"的悲惨局面。乾定三年又因大旱,河西诸州草木枯死,
人、畜大批死亡。可是,西夏的贵族地主阶级却完全不顾人民的死活,依然挥霍着
朝廷给他们的巨大"赏赍",吮吸劳动人民的血膏,耗费大量资财,"清歌夜宴",纸
醉金迷。对国家的危亡却置若罔闻,无动于衷,"舌结口钳",提不出任何拯救办
法。统治阶级的彻底腐朽,进一步加速了西夏的灭亡。
由于西夏对金战争造成的国力衰竭,邻境的一些弱小民族也开始乘虚而入。夏
皇建二年(公元1211年),黑塔坦酋长白厮波发兵进攻西夏的河州(甘肃临夏县西
南),安全领兵仓促应战,遭到惨败,以致将公主都丢失在战场上。最后只得向黑
塔坦称臣,以妥协屈辱求得黑塔坦的退兵。西夏这时国力衰落已经不能抵御一个弱
小民族的进攻,更不可能抗御蒙古军队的强大攻势了!
三蒙古的征伐和西夏的灭亡
夏天庆十二年(公元1205年),蒙古第一次向西夏显示强大的武力。三月,成
吉思汗借口西夏收纳了蒙古仇人,率兵攻破力吉里寨(即应里县),并且纵兵瓜、沙
诸州进行掳掠。西夏统治阶级对蒙古军队的突然进攻束手无策,只得任其躁靖。四
月,成吉思汗退兵经过夏落思城,又"大掠人民及其骆驼而还"。纯祐对成吉思汗灭
亡西夏的企图没有足够的认识,因而当蒙古退兵后,以为从此可以太平,于是下令
大赦国内,做起西夏再度"中兴"的美梦。
可是,好梦不长,夏应天二年(公元1207年)九月,蒙古又以安全废黜纯祐没有
通报为借口,第二次出兵,攻占了兀剌海城。安全调集右厢各路兵进行抵抗,蒙古
军队在夏境攻掠数月,因粮草接济不上而退兵。
应天四年(公元1209年),成吉思汗为了消除灭亡金朝的后顾之忧,第三次出
兵征西夏。三月,派兵自黑水城(今内蒙古额济纳旗南)北,由居延海关口攻人河
西。安全遣皇子承祯、大都督府令公高逸率兵五万竭力抵抗,但没有能抵御住蒙古
军队的强大攻势而惨遭失败,高逸被俘后不屈被杀。四月,蒙古兵再度围攻兀剌海
城。太傅西壁氏率兵和蒙古军队进行了激烈的巷战,夏兵战败,城陷。七月,蒙古
军队进攻右厢朝顺军司所在地克夷门。
西夏在克夷门原有驻兵七万多,安全获悉蒙古军队进攻的消息后,又派嵬名令
公率兵五万增援,夏兵坚守两个多月,城最后还是被蒙古军队攻陷。嵬名令公也做
了蒙古军队的俘虏。蒙古军队乘胜包围中兴府。安全束手无策,只好亲自督军登城
防守。九月,正遇大雨,河水暴涨。成吉思汗派兵筑起堤坝,提高水位,引水灌
城。中兴府被围困达一月之久,城中居民淹死者无数。城墙即将领塌时,突然河水
决堤四溢,蒙古军队也受到洪水的淹溺,才退兵解围。蒙古退兵以后,成吉思汗遣
太傅讹答入城招谕,安全只好纳女求和,蒙古遂放还嵬名令公。
蒙古和西夏议和后,便集中力量进攻金朝,金在蒙古大军的攻势下,于公1214
年将都城迁至汗京。从公元1216年起,成吉思汗亲率大军开始第一次西征,先后灭
掉了今伊犁河以西的西辽和花利于模王国。蒙古在西征和进攻金朗的过程中,不断
向夏国征兵。西夏"不堪奔命,礼意渐疏",于是又惹怒了蒙古。
光定七年(公元1217年)十二月,蒙古军队渡过黄河,第四次出征西夏。当蒙古
军队逼近中兴府的时候,遵顼惊恐万状,将太子德任留在都城领兵防守,自己匆忙
逃窜西凉,夏兵无力抵抗,再次向蒙古请降。
公元1223年,遵顼让位给德旺。德旺想趁成吉思汗亲自率军西征的机会,把漠
北未被蒙古征服的部落联合起来,共同抗击蒙古。当蒙古得悉西夏"阴结外援,蓄
异图"的消息以后,决定调集大军灭亡西夏。
夏乾定元年(公元1224年)九月,蒙古军队攻破银州,夏兵数万人战死,夏将
塔海被俘后受害。德旺向蒙古表示愿意投降和派遣人质,蒙古才退兵。
公元1225年,成吉思汗西征胜利,回到漠北。次年二月,成吉思汗借口西夏迟
迟不纳人质,又亲自统兵十万,由北路攻入夏境。先破西夏的军事重镇黑水、兀剌
海等城。接着,蒙古大将阿答赤率军与畏兀儿亦都护合兵攻沙州。夏将籍辣思义领
兵顽强抵抗,蒙古军经过月余的强攻才攻克沙州。五月,蒙古军挥兵南下,先后攻
陷肃州、甘州和西凉府。至此,西夏的右臂河西地区,几乎全部丧失。在蒙古大军
压境、势如破竹的攻势下,夏城连连失守。乾定三年(公元1226年)五月,六十四岁
的上皇遵顼病死,谥曰英文皇帝,庙号神宗。时隔两月,德旺忧悸成疾,也发病而
死,卒年四十六,庙号献宗。德旺死后,献宗的侄子晛(xiàn音现)被拥立继位。
蒙古军队分成东西两路向西夏都城挺进。八月,西路军越过沙陀(今宁夏中卫
县西),抢占了黄河九渡,攻陷应里。十月,东路军攻破夏州。两路夹击,形成对
西夏政治、经济中心灵、兴地区的钳形攻势。十一月,成吉思汗亲自率领大军围攻
灵州。末主晛遣大将嵬名令公率十万大军紧急赴援,途中校蒙古军队打败。
德任领固守灵州的夏兵和蒙古军队进行死战,其激烈的程度为蒙古作战以来所
少见。最后因夏兵伤亡惨重而失败。灵州失陷,德任被蒙古军队俘获,不屈被杀。
十二月,蒙古军队攻克盐州川,派兵四处搜索,烧杀抢掠,夏民"免者百无一二,
白骨蔽野"。乾定四年(公元1227年)一月,末主晛以蒙古兵临城下,国势濒危,顾
不得改元,继续使用乾定年号。这时,成吉思汗留一部分兵继续围攻中兴府,自己
带领大部分军队渡黄河进攻积石州,以彻底卡断夏兵的后路。末主晛被蒙古军围困
在中兴府内,一筹莫展,委托右丞相高良惠领兵抵抗。高良惠"内镇百官、外励将
士",领兵在都城日夜拒守,积劳成疾。部下劝他保重,他感叹说:"我身为国臣,
不能消除祸乱,使敌寇深入至此,活着有什么用呢?"最后由于劳累过度而死。闰
五月,成吉思汗回师隆德,因气天炎热,避暑于六盘山,派御帐前首千户察罕赴中
兴府谕降。
六月间,又发生强烈地震,房屋倒塌,瘟疫流行。被蒙古军队围困达半年之久
的中兴府粮尽援绝,军民多患病,已失去了抵抗的能力,末主哯走投无路,只得派
遣使节向成吉思汗请求宽限一个月献城投降。七月,成吉思汗在清水县(今甘肃清
水县)西江得重病,立下遗嘱:死后暂秘不发丧,夏主献城投降时,将他与中兴府
内所有兵民全部杀掉。不久,末主哯李仲谔、嵬名令公等投降蒙古。蒙古军队带着
末主哯等行至萨里川,成吉思汗病死。蒙古军队为了防止夏主生变,遂遵照成吉思
汗的遗嘱,将末主哯等杀死。建国一百八十九年的西夏王朝终于灭亡。