[急]两个问题:Pop3 协议标准和资料,如何解读邮件的内容,分辨并解出正文内容和附件。

mutefire 2002-05-02 07:10:12
哪里能弄到详细的 Pop3 协议标准和资料;

另外,如何解读邮件的内容,分辨并解出正文内容和附件,把正文正确显示,附件正确保存成文件。
...全文
318 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
mutefire 2002-05-05
  • 打赏
  • 举报
回复
Thank, 解码问题已基本解决,结贴。
spark_li 2002-05-04
  • 打赏
  • 举报
回复
呵呵,把你上面的部分,已经进行了base64编码的东西解码,结果如下!
呵呵,mud机器人呀,mud,我也玩过的哦!

?;@!%.~  精力:@jl1/@jl2 气血:@qx1/@qx2 心神:@xs1/@xs2 杀气:@killed 潜能:@qn 经验:@exp 食物:@food 饮水:@water 内力:@nl1/@nl2@nlr灵力:@ll1/@ll2@llr 新宋体 perform dodge.tianwaifeixian

perform dodge.tianwaifeixian
呵呵,admire

艾,进行base64简单编码与解码的程式如下:

/*
base64 en/decoder - Ver 1.01 -
Programmed by hsj : 99.07.29
: 99.07.30 debug :)
*/
#include <stdio.h>
#include <stdlib.h>

int base64enc(char *,char *);
int base64dec(char *,char *);
void usage(char *);

void main(int argc,char *argv[])
{
int ret;

if(argc<4)
usage(argv[0]);
if((strcmp(argv[1],"-e")!=0)&&(strcmp(argv[1],"-d")!=0))
usage(argv[0]);
switch(argv[1][1])
{
case 'e':
ret = base64enc(argv[2],argv[3]);
break;
case 'd':
ret = base64dec(argv[2],argv[3]);
break;
}
if(ret==0)
printf("Done...");
else
printf("Error. code[%d]\n",ret);
}

int base64enc(char *infile,char *outfile)
{
int i,len,llen = 0,pad = 0;
unsigned char buf[4],buf2[4],lf = '\n';
FILE *fpi,*fpo;

if((fpi=fopen(infile,"rb"))==0)
return(-1);
if((fpo=fopen(outfile,"wb"))==0)
{
fclose(fpi);
return(-2);
}
for(;;)
{
if((len=fread((char *)buf,1,3,fpi))==0)
break;
if(len<3)
{
pad = 3 - len;
for(i=len;i<3;i++)
buf[i] = 0;
}
buf2[0] = buf[0] >> 2;
buf2[1] = (buf[0] & 0x03) << 4 | buf[1] >> 4;
buf2[2] = (buf[1] & 0x0f) << 2 | buf[2] >> 6;
buf2[3] = buf[2] & 0x3f;
for(i=0;i<4;i++)
{
if(buf2[i]>=0 && buf2[i]<=25)
buf2[i] = buf2[i] + 'A';
else if(buf2[i]>=26 && buf2[i]<=51)
buf2[i] = buf2[i] - 26 + 'a';
else if(buf2[i]>=52 && buf2[i]<=61)
buf2[i] = buf2[i] - 52 + '0';
else if(buf2[i]==62)
buf2[i] = '+';
else if(buf2[i]==63)
buf2[i] = '/';
}
if(pad)
{
fwrite(buf2,4-pad,1,fpo);
for(i=0;i<pad;i++)
buf2[i] = '=';
fwrite(buf2,pad,1,fpo);
}
else
fwrite(buf2,4,1,fpo);
llen += 4;
if(llen==76)
{
fwrite(&lf,1,1,fpo);
llen = 0;
}
}
fwrite(&lf,1,1,fpo);
fclose(fpi);
fclose(fpo);
return(0);
}

int base64dec(char *infile,char *outfile)
{
int i,pad = 0;
unsigned char buf[4],buf2[4];
FILE *fpi,*fpo;

if((fpi=fopen(infile,"rb"))==0)
return(-1);
if((fpo=fopen(outfile,"wb"))==0)
{
fclose(fpi);
return(-2);
}
for(;;)
{
i = 0;
while(i<4)
{
if(fread(&buf[i],1,1,fpi)==0)
break;
if((buf[i]!='\r')&&(buf[i]!='\n'))
i++;
}
if(i==0)
break;
if(i!=4)
{
fclose(fpi);
fclose(fpo);
remove(outfile);
return(-3);
}
for(i=0;i<4;i++)
{
if(buf[i]>='A' && buf[i]<='Z')
buf[i] = buf[i] - 'A';
else if(buf[i]>='a' && buf[i]<='z')
buf[i] = buf[i] - 'a' + 26;
else if(buf[i]>='0' && buf[i]<='9')
buf[i] = buf[i] - '0' + 52;
else if(buf[i]=='+')
buf[i] = 62;
else if(buf[i]=='/')
buf[i] = 63;
else if(buf[i]=='=')
{
pad = 4 - i;
for(;i<4;i++)
buf[i] = 0;
break;
}
else
{
fclose(fpi);
fclose(fpo);
remove(outfile);
return(-4);
}
}
buf2[0] = buf[0] << 2 | buf[1] >> 4;
buf2[1] = buf[1] << 4 | buf[2] >> 2;
buf2[2] = buf[2] << 6 | buf[3];
fwrite(buf2,3-pad,1,fpo);
}
fclose(fpi);
fclose(fpo);
return(0);
}

void usage(char *name)
{
printf("usage : $ %s [-e:d] target-file out-file\n",name);
printf(" -e : execute base64 encode.\n");
printf(" -d : execute base64 decode.\n");
exit(0);
}

功能很小,不过应该能满足上面朋友的要求!
对其余部分的解码,其实不是很难吧?
spark_li 2002-05-04
  • 打赏
  • 举报
回复
找到一点好东西,呵呵
http://www.vchelp.net/source/submit/email_coder.zip
附作者的说明:
/*
之前因为工作原因需要邮件的各种编码,于是乎开始了代码大搜索希望能够找到可用的好用的代码终于在你这个站点发现了 UUEn/Decode MIME Base64 Decode (内心狂喜)当下来后非常失望:( --代码杂乱,非常的不清晰,不是以功能类或函数提供别说使用就是做算法演示也太说不过去了 :(

于是乎只能查相关资料自己写了 :(

自认为我各个编码都要强于目前站点上的例子所以斗胆发给你请求发布,以替换目前网上的那个代码例子,以帮助类似于我的后来人 :)

代码名称/用途

MailCoder.zip

提供关于E-Mail信体的基本编码和解码方法包括 Base64, UUCode, Quoted-Printble

作者邮件地址

Tintin2000@263.net

代码设计思想

编解码速度快

全兼容Outlook Express

部分关键代码说明

全部类静态方法 毋需创建实例即可使用

使用说明

首先使用CMailCoder提供的获取编码或解码长度的方法取得长度,然后根据取得的长度分配空间然后调用相应的编码解码函数进行操作就行了很简单的一看就懂 :)
*/
cdl371 2002-05-04
  • 打赏
  • 举报
回复
To MuteFire(无声的火)
在你给的例子里面“----=_Part_21545_4692944.1020335622391”是个分段标志,在标志后面的部分是邮件的一个段,在邮件的头部信息里面定义了分段标志,在使用邮件内容中使用分段标志的时候要加上“--”(即“------=_Part_21545_4692944.1020335622391”)。
Content-Type: application/octet-stream; name=_ju_job_for_uououo.mud,这一行是内容段的类型;

Content-Transfer-Encoding: base64,这一行是内容段的编码方式,即base64编码;

Content-Disposition: attachment; filename=_ju_job_for_uououo.mud,这一段表示内容段为附件(attachment),文件名为:“_ju_job_for_uououo.mud”

xiaowei_2002 2002-05-03
  • 打赏
  • 举报
回复
POP的全称是 Post Office Protoco ,即邮局协议,用于电子邮件的接收,现在常 用的是第三版 ,简称为 POP3。通过POP协议,客户机登录到服务器上后,可以对自己的邮件进行删除,或是下载到本地,下载后,电子邮件客户软件就可以在本地对邮件进行修改、删除等。另外一种用于接收信件的邮件是 IMAP 协议,现在发展很快,在本文中,我们暂不讨论。
  POP服务器一般使用的是TCP的110号端口,如果你用的是Foxmail的话,在其收邮件的时候,你可以看到其信息提示窗口有这么一些命令:
  “正在连接到 62.123.23.123:110";
  "USER BOSS_CH";
  "PASS..............";
  下面让我们来看一段 与 POP3 服务器对话的实录:
  telenet pop.china.com 110
  +OK AIMC POP service (mail2.china.com) is ready.
  USER boss_ch
  +OK Please enter password for user <boss_ch>.
  PASS ******
 +OK boss_ch has 1 messages (750 octets)
 STAT
  +OK 1 750
  LIST
  +OK 1 messages (750 octets)
  1 750
  RETR 1
  +OK 750 octets
  Received: from smtp2.ptt.js.cn([202.102.24.37]) by china.com(JetMail 2.5.3.0)
  with SMTP id jm4839cc4227; Sat, 23 Sep 2000 05:31:21 -0000
  Received: from chenjunqing ([61.155.120.6]) by smtp2.ptt.js.cn
  (Netscape Messaging Server 4.15) with SMTP id G1BRHJ03.V07 for
  <boss_ch@china.com>; Sat, 23 Sep 2000 13:34:31 +0800
  Date: Sat, 23 Sep 2000 13:34:18 +0800
  From: =?ISO-8859-1?Q?=B3=C2=BF=A1=C7=E5?= <Boss_ch@netease.com>
  To: boss_ch@china.com <boss_ch@china.com>
  Subject: =?ISO-8859-1?Q?=D3=CA=BC=FE=CA=BE=C0=FD?=
  X-mailer: FoxMail 3.1 [cn]
  Mime-Version: 1.0
  Content-Type: text/plain; charset="GB2312"
  Content-Transfer-Encoding: 8bit
  Message-ID: <G1BRHJ03.V07@smtp2.ptt.js.cn>
  您好!
    这是一个邮件的小示例
  QUIT
  +OK Pop server at <mail2.china.com> signing off.
xiaowei_2002 2002-05-03
  • 打赏
  • 举报
回复
POP3协议命令原始码及工作原理

Jephe Wu [本站版主]





一 简介:

1. POP适用于C/S结构的脱机模型的电子邮件协议,目前已发展到第三版,称POP3。脱机模型即不能在线
操作,不像IMAP4(netscape支持IMAP4)

2. 当客户机与服务器连接并查询新电子邮件时,被该客户机指定的所有将被下载的邮件都将被程序下载到
客户机,下载后,电子邮件客户机就可以删除或修改任意邮件,而无需与电子邮件服务器进一步交互。

3. POP3客户向POP3服务器发送命令并等待响应,POP3命令采用命令行形式,用ASCII码表示。
服务器响应是由一个单独的命令行组成,或多个命令行组成,响应第一行以ASCII文本+OK或-ERR指出相应
的操作状态是成功还是失败

4. 在POP3协议中有三种状态,认可状态,处理状态,和更新状态。
当客户机与服务器建立联系时,一旦客户机提供了自己身份并成功确认,即由认可状态转入处理状态,
在完成相应的操作后客户机发出quit命令,则进入更新状态,更新之后最后重返认可状态。如下图

等待连接 身份确认 quit命令
—— |认可|————— |处理|——————|更新|
|__________________________________|
重返认可状态

5. 认可状态的命令语句
一般情况下,大多数现有的POP3客户与服务器执行采用ASCII明文发送用户名和口令,在认可状态等
待客户连接的情况下,客户发出连接,并由命令user/pass对在网络上发送明文用户名和口令给服务器
进行身份确认。一旦确认成功,便转入处理状态。
为了避免发送明文口令的问题,有一种新的认证方法,命令为APOP,使用APOP,口令在传输之前被加密。
当第一次与服务器连接时,POP3服务器向客户机发送一个ASCII码问候,这个问候由一串字符组成对每个客
户机是唯一的,与当时的时间有关,然后,客户机把它的纯文本口令附加到从服务器接收到的字符串之后,
然后计算出结果字符串的MD5单出函数消息摘要,客户机把用户名与MD5消息摘要作为APOP命令的参数一起发送
出去。
目前,大多数windows上的邮件客户软件不支持APOP命令,qpopper支持。

6. POP3命令码如下:
命令 参数 状态 描述
------------------------------------------
USER username 认可 此命令与下面的pass命令若成功,将导致状态转换
PASS password 认可
APOP Name,Digest 认可 Digest是MD5消息摘要
------------------------------------------
STAT None 处理 请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数
UIDL [Msg#] 处理 返回邮件的唯一标识符,POP3会话的每个标识符都将是唯一的
LIST [Msg#] 处理 返回邮件数量和每个邮件的大小
RETR [Msg#] 处理 返回由参数标识的邮件的全部文本
DELE [Msg#] 处理 服务器将由参数标识的邮件标记为删除,由quit命令执行
RSET None 处理 服务器将重置所有标记为删除的邮件,用于撤消DELE命令
TOP [Msg#] 处理 服务器将返回由参数标识的邮件前n行内容,n必须是正整数
NOOP None 处理 服务器返回一个肯定的响应
------------------------------------------
QUIT None 更新

a.客户机希望结束这次会话
b.如果服务器处于‘处理’状态,那么将进入‘更新’状态以删除任何标记为删除的邮件
c.导致由处理状态到更新状态,又重返认可状态的转变
d.如果这个命令发出时服务器处于‘认可’状态,则结束会话,不进行‘更新’状态。

7. POP3协议在TCP/110端口上等待客户连接请求。

8. 若密码为明文,我如何监听?
下面的命令在服务器运行后在屏幕上显示POP3连接及命令发送的过程:
#sniffit -a -A. -p 110 -b -s 192.169.11.12
note: 192.168.11.12是客户机IP地址
你需要事先安装sniffit这个端口监听程序

9. 考虑这种情况,若客户在收取邮件时,假定为15封信等待接收,但由于线路问题,收到第10封时断线了,
为什么下次收时仍然从第一封开始,也即为什么前10封没有被从服务器上删除掉?

任何邮件的删除都必须在quit命令发出后对已标记为删除的邮件执行删除操作,由于中途断线,仍处于
处理状态,没有机会执行quit命令以进行状态转换。

10. pop3 session is locked by another session, please wait 10 minutes then try again.

由于非正常操作引起POP3程序内部机制锁住该次会话。

11. Foxmail与OE(outlook express)的处理机制的不同。

a. 假定服务器上有三封邮件等待客户机接收。用foxmail与OE的不同之处在于
foxmail每收一封标记删除一封,而OE则等全部接收完后再全部标记为删除最后执行quit命令。

Foxmail OE
-------------------------------
retr 1 retr 1
dele 1 retr 2
retr 2 retr 3
dele 2 dele 1
retr 3 dele 2
dele 3 dele 3
quit quit
b. Foxmail的远程邮件管理是非常优秀的管理工具,假定服务器上有三封信,对第一封,我们不想接收
想从服务器直接删除;对第二封,想接收但不删除,对第三封,这一次不想接收,分别标记后
最后foxmail发出的命令是

dele 1
retr 2
quit

c. 若没有foxmail,正好有几封很大的信堵住了,我不想接收,想直接删除它,或者想查看这两封是谁发的?

直接在windows的DOS窗口下用命令行操作,如:
# telnet my.isp.net 110
user 'username'
pass 'password'
list
dele 3
dele 5
quit
mutefire 2002-05-03
  • 打赏
  • 举报
回复
况且,Delphi 里面也没有说怎么解码,只是提供了一个文件解码的功能。

标题、内容的解码功能都没有,也没有源代码(.pas文件),还没有我自己现在写的东西功能完全……
mutefire 2002-05-03
  • 打赏
  • 举报
回复
我用 VC

本来读英文 rfc 文档就行了,可是你们自己看看吧,需要下面的资料

rfc1939
rfc822
rfc811
rfc1734
rfc1521
rfc1522
rfc1930
rfc1931

还有更多,全是英文的,并且每个都有几十页甚至数百页,读起来很烦的,虽然我的英文还可以,但还是读的头大,谁有源代码啊?如能提供,我再添 50 分,谢谢!
Wanting 2002-05-03
  • 打赏
  • 举报
回复
你要什么语言的?
如果是delphi,控件的帮助里就有。
mutefire 2002-05-03
  • 打赏
  • 举报
回复
谁能给出具体点的解码代码、函数或方法我马上结贴!谢谢!
mutefire 2002-05-03
  • 打赏
  • 举报
回复
我下了 RFC 协议标准,真多呀

看得头晕
mutefire 2002-05-03
  • 打赏
  • 举报
回复
能把程序源码也给我么?

email: thisworld@371.net
spark_li 2002-05-02
  • 打赏
  • 举报
回复
pyM7QCElLn4AAAEAAAAB//8BBgAAAJoAvqvBpqO6QGpsMS9AamwyICDG+NGqo7pAcXgxL0BxeDIg
INDEyfGjukB4czEvQHhzMiAgybHG+KO6QGtpbGxlZCAgx7HE3KO6QHFuICC+rdHpo7pAZXhwICDK
s87vo7pAZm9vZCAg0vvLrqO6QHdhdGVyICDE2sGmo7pAbmwxL0BubDJAbmxywenBpqO6QGxsMS9A
bGwyQGxscgAG0MLLzszlCQAA3QAcAHBlcmZvcm0gZG9kZ2UudGlhbndhaWZlaXhpYW4AcAALAGVh

这个是你的什么.mud文件的base64编码,你decode就可以得到了
我这里有个小程序,呵呵,如果你问题还没有解决的话,我给你
mutefire 2002-05-02
  • 打赏
  • 举报
回复
或者能给出相关的源代码(部分即可,全套更好)也行,谢谢!

要可用的,不是只能分辨出标题和正文部分的东西,而是能正确解读并显示,比如下面的数据:

------=_Part_21545_4692944.1020335622391
Content-Type: application/octet-stream; name=_ju_job_for_uououo.mud
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=_ju_job_for_uououo.mud

pyM7QCElLn4AAAEAAAAB//8BBgAAAJoAvqvBpqO6QGpsMS9AamwyICDG+NGqo7pAcXgxL0BxeDIg
INDEyfGjukB4czEvQHhzMiAgybHG+KO6QGtpbGxlZCAgx7HE3KO6QHFuICC+rdHpo7pAZXhwICDK
s87vo7pAZm9vZCAg0vvLrqO6QHdhdGVyICDE2sGmo7pAbmwxL0BubDJAbmxywenBpqO6QGxsMS9A
bGwyQGxscgAG0MLLzszlCQAA3QAcAHBlcmZvcm0gZG9kZ2UudGlhbndhaWZlaXhpYW4AcAALAGVh

...........

------=_Part_21545_4692944.1020335622391--

其实是一个 _ju_job_for_uououo.mud 文件,要能正确把这种数据正确解读并保存成真正可用的文件的代码,谢谢!
附件: 数据库审计系统需求说明 序号 指标项 具体要求 1 硬件指标 标准机架式设备,不少于 6个1000M电口,不少于 2个SFP光口(带SFP模块), 具备独立的管理口和 HA 口;可用磁盘空间不小于 2T;吞吐能力》2000M峰值处 理能力》18000条/秒,根据任意sql条件查询性能》2000万条/秒;日志存储量 > 6亿条;双冗余电源。 2 工作模式 旁路镜像模式部署,不影响数据库性能和网络架构;支持 IPV6环境部署和IPV6 环境下数据库的审计;支持分布式部署,管理中心可实现统一配置、统一报表、 统一查询。 管理中心和探测器都可存储审计数据,实现大数据环境下磁盘空间的有效利用和 扩展;管理中心和探测器直接的数据传输速率、时间、端口都可自定义。 3 协议支持 支持主流数据库: Oracle、SQLServer、Mysql、DB2 infomix、Sybase、CACH、 达梦、人大金仓、神舟 Oscar、南大通用 GBASE数据仓库teradata。 支持主流业务协议: TeInet、SMTP POP3 DCOM 4 审计内容 审计日志包括账号、 SQL语句、表、字段、存储过程、客户端工具、 IP、MAC实 例名、主机名等条件。 支持双向审计,特别是返回字段和结果、执行状态、返回行数、执行时长等内容, 并能够根据返回结果设置审计策略,要求在不连接被审计数据库情况下完成。 支持HTTP请求审计,提取URL POST/GETf直、cookie、操作系统类型、浏览器 类型、原始客户端IP、MAC地址、提交参数等。 可与堡垒主机进行联动,实现用户信息的定位。 5 智能发现 自动识别流量中存在的数据库,也可通过扫描发现网络中的数据库。 支持定期自动扫描数据库漏洞和不安全配置,提供漏洞扫描报告。 6 运维审计 支持tel net、ftp、SSH协议及其他私有协议的旁路会话审计;会话审计日志应含 源IP、目的IP、会话起始时间、会话结束时间、连接时长、会话总流量等维度。 支持数据库协议解析成会话形式,并支持一键关联到具体的 SQL操作会话。 支持根据目的IP、目的端口、源IP及时间范围对会话进行检索。 7 模型分析 可智能学习数据库的访问行为建立模型。 可通过行为轨迹图方式展示数据库访问行为。 可基于账号、IP地址、访问权限、客户端工具等维度对行为模型做钻取分析、变 更分析,对学习的安全基线以外的行为自动智能的进行告警。 可以自动对比不冋时期的行为模型,以区分其审计日志数趋势、用户、 IP地址、 工具、访问权限的差异情况。 8 规则分析 支持账号、IP地址、MAC地址、操作类型、返回行数、执行时 、表、字段、主 数据库审计系统需求说明全文共2页,当前为第1页。 数据库审计系统需求说明全文共2页,当前为第1页。 机名、操作系统名、关联表数,实现对敏感信息的精细监控。 支持基于返回结果集大小、返回内容、具体报文内容的细粒度审计规则。 内置高危SQL查询和注入、远程命令执行、跨站脚本攻击、 FTP和telnet高危指 令等审计规则不少于 300种。 规则可支持导入、导出、优先级调整、分组、批量加载等。 9 白名单 支持用户名、操作类型、IP地址、客户端工具、系统用户名、主机名、 MAC地址、 SQL语句等条件设置白名单,条件不少于 10个。 10 告警与报表 支持短信、邮件、syslog、snmp ftp等告警方式,支持冋时发送多人、 聚合发送、 单条发送、重发、发生统计等高级告警功能。 可以根据单个库、数据库组生成报表,包括支持严格按照塞班斯( SOX法案、等 级保护标准要求生成多维度综合报告。 支持按照数据库访问行为生成报表,智能识别帐号的增删、权限变更、密码修改、 特权操作等行为。 支持按照时间曲线统计流量、在线用户数、并发会话、 DDL操作数、DML操作数、 执行量取多的SQL语句等报表。 11 日志数据管 理 审计数据保留策略应至少满足天数和百分比两个控制参数,且支持 web界面可配 置,且恢复数据不影响正常的审计功能。 支持自动备份审计日志,备份完后通过 FTP方式外送到外部设备;备份文件需要 进行加密,且必须导入设备才能够进行恢复查看。 12 系统排错 系统内置故障排错系统,可以支持一键排错对服务异常、许可证异常、流量异常 等大部分常见故障的检测,并可提供快速的解决办法。 支持流量分析功能,包括抓包、包内容查看、自动探测 sql语句等。 13 资质要求 具备公安部颁发的《计算机信息系统安全专用产品销售许可证》。 14 售后服务 原厂五年售后服务,包括安装调试、硬件质保、软件升级、特征库升级等。 数据库审计系统需求说明全文共2页,当前为第2页。 数据库审计系统需求说明全文共2页,当前为第2页。 数据库审计系统需求说明
第1章 文本 1 引言 1 1.1 每次处理一个字符 6 1.2 字符和字符值之间的转换 7 1.3 测试一个对象是否是类字符串 8 1.4 字符串对齐 10 1.5 去除字符串两端的空格 11 1.6 合并字符串 11 1.7 将字符串逐字符或逐词反转 14 1.8 检查字符串中是否包含某字符集合中的字符 15 1.9 简化字符串的translate方法的使用 18 1.10 过滤字符串中不属于指定集合的字符 20 1.11 检查一个字符串是文本还是二进制 23 1.12 控制大小写 25 1.13 访问子字符串 26 1.14 改变多行文本字符串的缩进 29 1.15 扩展和压缩制表符 31 1.16 替换字符串中的子串 33 1.17 替换字符串中的子串-Python 2.4 34 1.18 一次完成多个替换 36 1.19 检查字符串中的结束标记 39 1.20 使用Unicode来处理国际化文本 40 1.21 在Unicode和普通字符串之间转换 43 1.22 在标准输出中打印Unicode字符 45 1.23 对Unicode数据编码并用于XML和HTML 46 1.24 让某些字符串大小写不敏感 49 1.25 将HTML文档转化为文本显示到UNIX终端上 52 第2章 文件 55 引言 55 2.1 读取文件 59 2.2 写入文件 62 2.3 搜索和替换文件中的文本 64 2.4 从文件中读取指定的行 65 2.5 计算文件的行数 66 2.6 处理文件中的每个词 68 2.7 随机输入/输出 70 2.8 更新随机存取文件 71 2.9 从zip文件中读取数据 73 2.10 处理字符串中的zip文件 74 2.11 将文件树归档到一个压缩的tar文件 76 2.12 将二进制数据发送到Windows的标准输出 77 2.13 使用C++的类iostream语法 78 2.14 回退输入文件到起点 80 2.15 用类文件对象适配真实文件对象 83 2.16 遍历目录树 84 2.17 在目录树中改变文件扩展名 85 2.18 从指定的搜索路径寻找文件 86 2.19 根据指定的搜索路径和模式寻找文件 87 2.20 在Python的搜索路径中寻找文件 88 2.21 动态地改变Python搜索路径 89 2.22 计算目录间的相对路径 91 2.23 跨平台地读取无缓存的字符 93 2.24 在Mac OS X平台上统计PDF文档的页数 94 2.25 在Windows平台上修改文件属性 95 2.26 从OpenOffice.org文档中提取文本 96 2.27 从微软Word文档中抽取文本 97 2.28 使用跨平台的文件锁 98 2.29 带版本号的文件名 100 2.30 计算CRC-64循环冗余码校验 102 第3章 时间和财务计算 105 引言 105 3.1 计算昨天和明天的日期 111 3.2 寻找上一个星期五 112 3.3 计算日期之间的时段 114 3.4 计算歌曲的总播放时间 115 3.5 计算日期之间的工作日 116 3.6 自动查询节日 118 3.7 日期的模糊查询 121 3.8 检查夏令时是否正在实行 123 3.9 时区转换 124 3.10 反复执行某个命令 125 3.11 定时执行命令 127 3.12 十进制数学计算 129 3.13 将十进制数用于货币处理 130 3.14 用Python实现的简单加法器 133 3.15 检查信用卡校验和 136 3.16 查看汇率 137 第4章 Python技巧 139 引言 139 4.1 对象拷贝 140 4.2 通过列表推导构建列表 144 4.3 若列表中某元素存在则返回之 146 4.4 循环访问序列中的元素和索引 147 4.5 在无须共享引用的条件下创建列表的列表 148 4.6 展开一个嵌套的序列 149 4.7 在行列表中完成对列的删除和排序 152 4.8 二维阵列变换 154 4.9 从字典中取值 155 4.10 给字典增加一个条目 157 4.11 在无须过多援引的情况下创建字典 158 4.12 将列表元素交替地作为键和值来创建字典 159 4.13 获取字典的一个子集 161 4.14 反转字典 163 4.15 字典的一键多值 164 4.16 用字典分派方法和函数 166 4.17 字典的并集与交集 167 4.18 搜集命名的子项 169 4.19 用一条语句完成赋值和测试 171 4.20 在Python中使用printf 174 4.21 以指定的概率获取元素 174 4.22 在表达式中处理异常 176 4.23 确保名字已经在给定模块中被定义 178 第5章 搜索和排序 180 引言 180 5.1 对字典排序 185 5.2 不区分大小写对字符串列表排序 185 5.3 根据对象的属性将对象列表排序 187 5.4 根据对应值将键或索引排序 189 5.5 根据内嵌的数字将字符串排序 192 5.6 以随机顺序处理列表的元素 193 5.7 在增加元素时保持序列的顺序 195 5.8 获取序列中最小的几个元素 197 5.9 在排序完毕的序列中寻找元素 199 5.10 选取序列中最小的第n个元素 200 5.11 三行代码的快速排序 203 5.12 检查序列的成员 206 5.13 寻找子序列 208 5.14 给字典类型增加排名功能 210 5.15 根据姓的首字母将人名排序和分组 214 第6章 面向对象编程 217 引言 217 6.1 温标的转换 223 6.2 定义常量 225 6.3 限制属性的设置 227 6.4 链式字典查询 229 6.5 继承的替代方案-自动托管 231 6.6 在代理中托管特殊方法 234 6.7 有命名子项的元组 237 6.8 避免属性读写的冗余代码 239 6.9 快速复制对象 240 6.10 保留对被绑定方法的引用且支持垃圾回收 243 6.11 缓存环的实现 245 6.12 检查一个实例的状态变化 249 6.13 检查一个对象是否包含某种必要的属性 252 6.14 实现状态设计模式 255 6.15 实现单例模式 257 6.16 用Borg惯用法来避免“单例”模式 259 6.17 Null对象设计模式的实现 263 6.18 用_ _init_ _参数自动初始化实例变量 266 6.19 调用超类的_ _init_ _方法 267 6.20 精确和安全地使用协作的超类调用 270 第7章 持久化和数据库 273 引言 273 7.1 使用marshal模块序列化数据 275 7.2 使用pickle和cPickle模块序列化数据 277 7.3 在Pickling的时候压缩 280 7.4 对类和实例使用cPickle模块 281 7.5 Pickling被绑定方法 284 7.6 Pickling代码对象 286 7.7 通过shelve修改对象 288 7.8 使用Berkeley DB数据库 291 7.9 访问MySQL数据库 294 7.10 在MySQL数据库中储存BLOB 295 7.11 在PostgreSQL中储存BLOB 296 7.12 在SQLite中储存BLOB 298 7.13 生成一个字典将字段名映射为列号 300 7.14 利用dtuple实现对查询结果的灵活访问 302 7.15 打印数据库游标的内容 304 7.16 适用于各种DB API模块的单参数传递风格 306 7.17 通过ADO使用Microsoft Jet 308 7.18 从Jython Servlet访问JDBC数据库 310 7.19 通过Jython和ODBC获得Excel数据 313 第8章 调试和测试 315 引言 315 8.1 阻止某些条件和循环的执行 316 8.2 在Linux上测量内存使用 317 8.3 调试垃圾回收进程 318 8.4 捕获和记录异常 320 8.5 在调试模式中跟踪表达式和注释 322 8.6 从traceback中获得更多信息 324 8.7 当未捕获异常发生时自动启用调试器 327 8.8 简单的使用单元测试 328 8.9 自动运行单元测试 330 8.10 在Python 2.4中使用doctest和unittest 331 8.11 在单元测试中检查区间 334 第9章 进程、线程和同步 336 引言 336 9.1 同步对象中的所有方法 339 9.2 终止线程 342 9.3 将Queue.Queue用作优先级队列 344 9.4 使用线程池 346 9.5 以多组参数并行执行函数 349 9.6 用简单的消息传递协调线程 351 9.7 储存线程信息 353 9.8 无线程的多任务协作 357 9.9 在Windows中探测另一个脚本实例的运行 359 9.10 使用MsgWaitForMultipleObjects处理Windows消息 360 9.11 用popen驱动外部进程 363 9.12 获取UNIX Shell命令的输出流和错误流 364 9.13 在UNIX中fork一个守护进程 367 第10章 系统管理 370 引言 370 10.1 生成随机密码 371 10.2 生成易记的伪随机密码 372 10.3 以POP服务器的方式验证用户 375 10.4 统计Apache中每个IP的点击率 376 10.5 统计Apache的客户缓存的命中率 378 10.6 在脚本中调用编辑器 379 10.7 备份文件 381 10.8 选择性地复制邮箱文件 383 10.9 通过邮箱创建一个邮件地址的白名单 384 10.10 阻塞重复邮件 386 10.11 检查你的Windows声音系统 388 10.12 在Windows中注册和反注册DLL 388 10.13 检查并修改Windows自动运行任务 390 10.14 在Windows中创建共享 391 10.15 连接一个正在运行的Internet Explorer实例 392 10.16 读取Microsoft Outlook Contacts 393 10.17 在Mac OS X中收集详细的系统信息 396 第11章 用户界面 400 引言 400 11.1 在文本控制台中显示进度条 402 11.2 避免在编写回调函数时使用lambda 404 11.3 在tkSimpleDialog函数中使用默认值和区间 405 11.4 给Tkinter列表框增加拖曳排序能力 406 11.5 在Tkinter部件中输入一个重音字符 408 11.6 在Tkinter中嵌入内联的GIF 410 11.7 转换图片格式 412 11.8 在Tkinter中实现一个秒表 415 11.9 用线程实现GUI和异步I/O 的结合 417 11.10 在Tkinter中使用IDLE的 Tree部件 421 11.11 在Tkinter Listbox中支持单行多值 423 11.12 在Tkinter部件之间复制Geometry方法和选项 427 11.13 在Tkinter中实现一个带标签的记事本 429 11.14 使用wxPython实现带面板的记事本 431 11.15 在Jython中实现一个ImageJ插件 433 11.16 用Swing和Jython来通过URL查看图片 434 11.17 在Mac OS中获得用户输入 434 11.18 程序化地创建Python Cocoa GUI 437 11.19 用IronPython实现淡入窗口 439 第12章 XML处理 441 引言 441 12.1 检查XML的格式完好性 443 12.2 计算文档中标签的个数 444 12.3 获得XML文档中的文本 445 12.4 自动探测XML的编码 447 12.5 将一个XML文档转化成Python对象树 449 12.6 从XML DOM节点的子树中删除仅有空白符的文本节点 451 12.7 解析Microsoft Excel的XML 452 12.8 验证XML文档 454 12.9 过滤属于指定命名空间的元素和属性 455 12.10 用SAX合并连续的文本事件 458 12.11 使用MSHTML来解析XML或HTML 461 第13章 网络编程 462 引言 462 13.1 通过Socket数据报传输消息 464 13.2 从Web抓取文档 466 13.3 过滤FTP站点列表 467 13.4 通过SNTP协议从服务器获取时间 468 13.5 发送HTML邮件 469 13.6 在MIME消息中绑入文件 471 13.7 拆解一个分段MIME消息 474 13.8 删除邮件消息中的附件 475 13.9 修复Python 2.4的email.FeedParser 解析的消息 477 13.10 交互式地检查POP3邮箱 479 13.11 探测不活动的计算机 482 13.12 用HTTP监视网络 487 13.13 网络端口的转发和重定向 489 13.14 通过代理建立SSL隧道 492 13.15 实现动态IP协议 495 13.16 登录到IRC并将消息记录到磁盘 498 13.17 访问LDAP服务 500 第14章 Web编程 502 引言 502 14.1 测试CGI是否在工作 503 14.2 用CGI脚本处理URL 506 14.3 用CGI上传文件 507 14.4 检查web页面的存在 509 14.5 通过HTTP检查内容类型 510 14.6 续传HTTP下载文件 512 14.7 抓取Web页面时处理Cookie 513 14.8 通过带身份验证的代理进行HTTPS导航 516 14.9 用Jython实现Servlet 517 14.10 寻找Internet Explorer的cookie 519 14.11 生成OPML文件 521 14.12 聚合RSS Feed 524 14.13 通过模板将数据放入Web页面 527 14.14 在Nevow中呈现任意对象 530 第15章 分布式编程 534 引言 534 15.1 实现一个XML-RPC方法调用 536 15.2 服务XML-RPC请求 537 15.3 在Medusa中使用XML-RPC 539 15.4 允许XML-RPC服务被远程终止 541 15.5 SimpleXMLRPCServer的一些细节 542 15.6 给一个XML-RPC服务提供一个wxPython GUI 544 15.7 使用Twisted的Perspective Broker 546 15.8 实现一个CORBA服务和客户 549 15.9 使用telnetlib执行远程登录 551 15.10 使用SSH执行远程登录 554 15.11 通过HTTPS验证一个SSL客户端 557 第16章 关于程序的程序 559 引言 559 16.1 验证字符串是否代表着一个合法的数字 564 16.2 导入一个动态生成的模块 565 16.3 导入一个名字在运行时被确定的模块 567 16.4 将参数和函数联系起来 568 16.5 组合函数 571 16.6 使用内建的Tokenizer给Python源码上色 572 16.7 合并和拆解Token 575 16.8 检查字符串是否有平衡的圆括号 577 16.9 在Python中模拟枚举 580 16.10 在创建列表推导时引用它自身 583 16.11 自动化py2exe将脚本编译成Windows可执行文件的过程 585 16.12 在UNIX中将主脚本和模块绑成一个可执行文件 587 第17章 扩展和嵌入 590 引言 590 17.1 实现一个简单的扩展类型 592 17.2 用Pyrex实现一个简单的扩展类型 597 17.3 在Python中使用C++库 598 17.4 调用Windows DLL的函数 601 17.5 在多线程环境中使用SWIG生成的模块 603 17.6 用PySequence_Fast将Python序列转为 C数组 604 17.7 用迭代器逐个访问Python序列的元素 608 17.8 从Python可调用的C函数中返回None 611 17.9 用gdb调试动态载入的C扩展 613 17.10 调试内存问题 614 第18章 算法 616 引言 616 18.1 消除序列中的重复 619 18.2 在保留序列顺序的前提下消除其中的重复 621 18.3 生成回置采样 625 18.4 生成无回置的抽样 626 18.5 缓存函数的返回值 627 18.6 实现一个FIFO容器 629 18.7 使用FIFO策略来缓存对象 631 18.8 实现一个Bag(Multiset)收集类型 634 18.9 在Python模拟三元操作符 637 18.10 计算素数 640 18.11 将整数格式化为二进制字符串 642 18.12 以任意数为基将整数格式化为字符串 644 18.13 通过法雷分数将数字转成有理数 646 18.14 带误差传递的数学计算 648 18.15 以最大精度求和 651 18.16 模拟浮点数 653 18.17 计算二维点集的凸包和直径 656 第19章 迭代器和生成器 660 引言 660 19.1 编写一个类似range的浮点数递增的函数 663 19.2 从任意可迭代对象创建列表 665 19.3 生成Fibonacci序列 667 19.4 在多重赋值中拆解部分项 669 19.5 自动拆解出需要的数目的项 670 19.6 以步长n将一个可迭代对象切成n片 672 19.7 通过重叠窗口循环序列 674 19.8 并行地循环多个可迭代对象 678 19.9 循环多个可迭代对象的矢量积 680 19.10 逐段读取文本文件 683 19.11 读取带有延续符的行 685 19.12 将一个数据块流处理成行流 687 19.13 用生成器从数据库中抓取大记录集 688 19.14 合并有序序列 690 19.15 生成排列、组合以及选择 694 19.16 生成整数的划分 696 19.17 复制迭代器 697 19.18 迭代器的前瞻 701 19.19 简化队列消费者线程 703 19.20 在另一个线程中运行迭代器 705 19.21 用itertools.groupby来计算汇总报告 706 第20章 描述符、装饰器和元类 710 引言 710 20.1 在函数调用中获得常新的默认值 712 20.2 用嵌套函数来编写property属性 715 20.3 给属性值起别名 717 20.4 缓存属性值 719 20.5 用同一个方法访问多个属性 722 20.6 封装一个方法来给类增加功能 723 20.7 增强所有方法来给类增加功能 726 20.8 在运行时给一个类实例添加方法 728 20.9 检查接口的实现 730 20.10 在自定义元类中正确地使用_ _new_ _和_ _init_ _ 732 20.11 允许对List的可变方法的链式调用 734 20.12 通过更紧凑的语法使用协作的超类调用 736 20.13 不使用_ _init_ _来初始化实例属性 738 20.14 实例属性的自动初始化 740 20.15 重新加载时自动更新类实例 743 20.16 在编译时绑定常量 747 20.17 解决元类冲突 752

4,358

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧