自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

《例学Symbian手机开发》已由铁道出版社出版

承蒙很多朋友的厚爱,一直有很多朋友在本博留言询问《手把手教你Symbian开发》的出版进度问题,目前此书已经由铁道出版社正式出版: http://www.tqbooks.net/product/gb/product_detail.asp?catalogid=2&productid=1587 ,有兴趣的朋友可以订购一本,相信会物有所值的,同时也欢迎大家不吝赐教,任何错误问题都可以留言给我:)...

2010-07-30 22:21:00 137

网站的安全与稳定

网站的安全与稳定一、 防范故障1、 双机热备 + RAID + 定期备份制度。比如,WEB服务器采用双机热备,数据库存储采用Raid0 + Raid1,数据库采用完全备份 + 差异备份相结合,例如重要数据每3天完全备份 + 每4小时差异备份。WEB服务器上的重要文件也应定期备份。备份应该存放在异地。双机热备:防范整台服务器出故障RAID:防范硬盘出故障数据备份:...

2010-07-29 18:00:00 109

linux的进程树

linux的树形进程结构为管理进程提供了很大的方便,不管是内核对进程的管理还是用户对进程的管理都受惠不少,对于审计也是很有用的,不管运行的什么进程,都会有一条不会断的线索将之绑在系统内部。整个系统的情况就是首先内核启动,接着内核线程0派生出init,然后init派生出万物,有点像上帝造人...不过如果你是撒旦,那么你可以将进程脱离出这个线索,只和调度的相关链表或者树联系,这样你的进程就成了完全的不...

2010-07-28 22:26:00 308

shc程序的原理--以实例分析

有人想加密自己的perl脚本,有人想加密自己的php,有人认为bash编程并不是真正的编程,因为它们的源代码都是可见的,不像c程序那样,一旦经过编译就再也不可读了...其实这是一种误区,其一就是c语言编译而成的平台相关的elf或者pe文件并不是完全不可读,只是对于应用者不可读,对于黑客还是可以进行良好反汇编的,其二既然应用者不是专业人士,那么bash,perl等代码对于他们也是不可读的,我老婆就曾...

2010-07-28 22:08:00 580

ASN1标准对OID的编码

asn1对OID的编码有一些规定,形如a.b.c.d.e的OID被编码的时候,完全可以按照der的编码规则将整个oid的类型设定为object,然后将每一个点分数字的类型设定为integer,最终编码为[obj|length[[int|lena[a]]][int|lenb[b]][int|lenc[c]]...],可是asn1标准并没有如此编码,而是使用了"more bit"这种方式,这样就少了很...

2010-07-27 21:00:00 708

ssl握手协议中的CipherSuite

下面是一个ssl握手的过程,没有进行客户端验证:1.C-S:ClientHello---cipher-suit-list2.S-C:ServerHello---selected-cipher-suit3.S-C:ServerKeyExchange4.S-C:ServerHelloDone5.C-S:ClientKeyExchange6.C-S:完成7.S-C:完成第...

2010-07-20 22:34:00 747

PKCS#11的应用--USBKEY

ssl是一个安全协议,为互联网应用提供了安全,数字证书被证明能够带来比单纯的密码或者指纹,瞳孔认证之类的方式更安全的保护,可是如此安全的机制需要一个安全的基层平台,事实证明计算机并不是一个足够安全的平台,计算机好比公共汽车,而操作系统以及C库的调用规范或者安全级别的设计被视为道德,众做周知道德不是强制的,它只在遵守它的实体中间起作用,比如堆栈的使用提供了强有力的安全机制和性能因素,可是还可以用于溢...

2010-07-19 22:04:00 672

tcp关闭连接时的四次挥手

众所周知,tcp要3次握手来建立连接,而断开连接却需要4次挥手,为何需要4次挥手,同时需要那么多的wait状态,比如wait1和wait2状态,那是因为在建立连接的时候,收发双方都是“纯净”的,客户端发送syn的时候,服务器并没有什么数据要发送,而只是需要发送一个synack即可,因此连接开始的握手所传输的都是控制数据。反观连接结束的握手则不然,由于tcp是全双工的,且连接结束必须由一方发起,因此...

2010-07-19 21:29:00 121

linux关于tcp协议ack的实现--总结和公平性问题

tcp是一个可靠连接的协议,但不要指望它是什么理论的实现,它是实践的东西,任何实践的东西背后都不是一个理论,而是一大堆理论,tcp正是单一停等,GBN(回退N)以及SR(选择重传)的结合体,单一停等是最原始的理论,但是带宽利用率太低了,后面的GBN实现了流水线式的数据发送和确认,可靠连接的根本就在于确认-ack,而GBN的ack完全是基于接收方的,接收方很简单的只发送最后一个按序到达的报文的序列号...

2010-07-18 10:06:00 116

linux关于tcp协议ack的实现--发送端对ack的处理

前面的文章分析了接收端如何发送ack给发送端,总结一下就是立即ack,捎带ack和延迟ack,现在看一下tcp的发送端是如何处理ack的,本质上tcp所谓的有连接就是双方对于seq和ack的处理,对于seq,发送方是主动的,而接收端是被动的,但是对于ack则相反,因此参照tcp的流控以及拥塞控制加之性能因素的需要,首先要设计接收端如何发送ack,其次再来设计发送端如何处理,linux采纳了rfc的...

2010-07-17 10:50:00 176

找回VS工具栏中丢失的行缩进按钮

不知什么时候,什么原因,我的VS工具栏上没有了行缩进/取消行缩进按钮。难道这不是标准的编辑按钮吗?怎么会不见呢?太不方便了!找来找去都不见,秦皇岛外打渔船,知向谁边?我不甘心哪!找呀找,终于找到:点【标准】工具栏最右边的下拉按钮,有下拉菜单:添加或移除按钮,选“自定义”,出来个自定义窗口,命令标签,类别选中“编辑”,右边的命令框可以找到久违的行缩进/取消行缩进按钮,将它们拖回工具栏即可...

2010-07-16 17:38:00 52

linux关于tcp协议ack以及乱序报文暂存的实现--立即ack/延迟ack/捎带ack

tcp需要ack,可是为了效率,并不是每发送一个数据都要等待ack,而是尽可能利用窗口机制,积累发送ack的,当然在某些特殊情况下还是需要马上发送ack的,比如接收到乱序的数据,这种情况下,虽然接收端可以将乱序的数据包暂存,但是接收方必须发送一个ack号为按序的期望的序列号的ack给发送端,另外就是接收窗口需要调整,此时就要立刻发送ack,否则则可以延迟发送ack,看一下linux的这方面的代码:...

2010-07-15 22:26:00 252

将stunnel修改成一个透明代理--附:setjmp/longjmp

stunnel的代码很简单,简单得没法形容,其执行过程分为下面几个部分:1.main-loop:while(1) { fd = accept do_client--可应用一些mpm}2.do_client:if(server) { init_ssl init_remote} else if (client) { init_remote init_ss...

2010-07-15 21:24:00 151

ubuntu 试用ibus云拼音

周海汉 /文 2010.7.15ibus云拼音为 Linux / ibus 设计的一个支持在线云拼音服务的拼音输入法。下载地址:http://code.google.com/p/ibus-cloud-pinyin/,目前还在开发中。它采用了sogou和QQ的云拼音服务。同时支持离线输入。介绍见:http://code.google.com/p/ibus-cloud-pinyin...

2010-07-15 12:44:00 2171

C#里面的随机对象Random

C#里面的随机对象Random很容易搞出相同的随机系列,应对办法是创建一个全局性的Random,所有地方,所有线程都用它。创建Random对象的时候,使用不指定种子值的构造函数。...

2010-07-15 10:29:00 244

关于linux的段错误(Segmentation fault)

1.Segmentation fault这个字符串在shell中是谁打印的?这个字符串实际上是bash(或者别的shell)打印的,而不是当前出错的进程,也不是内核,参见bash源代码的WAITPID (-1, &status, 0))语句。因此如果在一个自己写的程序中不对子进程进程任何wait或者不捕捉子进程退出信号的话,即使是段错误也不会打印信息,正如下面的程序一样,程序将默默终止...

2010-07-14 21:19:00 93

纯用户空间抢占式多线程的设计

纯用户空间的抢占式多线程库其实是很麻烦的一件事,在设计之前首先必须明白抢占式多线程的意义,其本质就是古老的unix多道程序设计,策略可以是分时的,也可以是其它任何的调度策略,不管什么策略,机制要素都是底层的OS内核和机器硬件提供的,对于x86上的linux来说,这些要素包括:分页机制--提供进程间相同虚拟地址不冲突的栈,线程间不同虚拟地址不冲突的栈;时钟中断以及任意中断机制--可以在不通知用户进程...

2010-07-14 21:17:00 83

特殊字符保存到SQL数据库的问题

要保存包含有特殊字符的字符串、正文等,需要用NChar,NVarchar等,否则会变成一个“?”号,有时候会带来不可意料的结果。用Char、Vachar可以兼容汉字,但特殊字符不行。比如:“南方周末新媒体•2010暑期实习计划” == 》 “南方周末新媒体?2010暑期实习计划”...

2010-07-13 10:14:00 347

ubuntu 10.04 安装ruby & rails

周海汉 2010.7.12ubuntu 10.04 安装ruby & rails时遇到问题,如下:`require': no such file to load -- mkmf (LoadError)安装过程:安装ruby1.9.1zhouhh@zhh64:~$ sudo apt-get install ruby1.9.1-fullzhouhh@zh...

2010-07-12 18:01:00 87

ssh 端口转发

周海汉 2010年07月2日使用了goddady的linux虚拟主机,提供ssh。但使用ssh -D port xxx@server时,遇到ssh上打印如下错误:channel 3: open failed: administratively prohibited: open failedfirefox浏览器配置了socks5指向本地的port时,浏览任何网页显示空白。...

2010-07-11 22:44:00 134

拥有奢侈品的人不一定是强者

这个世界从来不是依据一个人得到了什么东西而定位一个人的价值的,而是依赖他/她/它创造了什么。在原始社会,男女是平等的,女人采集的果品虽没有男人带回的肉食美味,可是数量却多很多,因此男女平等,后来人口增加了,男人们发动了大规模的战争,于是拿不动武器,干不了农活的女人便自此开始属于从属地位,可是要知道,男人付出的比女人更多,早在旧石器男女平等的时代,男人可能就有去无归,而女人只需要记住归路即可,打猎毕...

2010-07-10 10:24:00 82

透明代理与ssl协议

透明代理实质上类似一种拦截,客户端以为自己访问的是自己要访问的服务器,实际上这次访问早已被所谓的透明代理接管了,透明代理主机将用户的访问重定向到本机的应用层代理进程,从用户发出的http协议头中得到用户需要访问的地址信息,然后代理用户去访问或者按照本地的配置给予策略化的服务。一种合理的模式是vpn中的应用,为了便于管理,一般用户需要本公司的代理服务器提供互联网服务,可是如果一个用户在出差中使用公司...

2010-07-10 10:03:00 137

SQL SERVER 的 CLR表值函数

一、使用CLR表值函数的背景在SQL SERVER里面,直接读取远程数据库的表,似乎会占用大量的内存,出现类似错误:链接服务器 "192.168.0.1" 的 OLE DB 访问接口 "SQLNCLI10" 报错。提供程序内存不足。 [SQLSTATE 42000] (错误 7399) 。我不知道读取远程数据库的表是一个什么样的原理,是首先从远程将该表一古脑全部加载...

2010-07-09 17:19:00 177

网络协议设计的一点思考

分层协议一般都提供一种或几种固定的服务,这些服务中高层一些的大多数都是通过“握手”动作来协商的,另外一些比较底层的服务则是协议本身提供的,比如udp服务,ip服务等。下层的握手过程对上层不可见,握手其实就是协商一条带有一定功能(可以提供一定服务)的虚拟链路,握手完成之后,下层也就承诺了那种服务,之后服务的实现完全在本层完成。可是基于消息协议一般不这么做,没有握手之类的固定过程,因为基于消息的协议所...

2010-07-08 20:47:00 83

linux中nat的若干细节--基于2.6.8和2.6.17内核分析

在netfilter的nat模块中有一个alloc_null_binding函数,该函数在local_in这个hook点上会被调用,在nat没有初始化的时候也会被调用,在这两种情况会被调用,netfilter规定可在postrouting和local_in执行snat,但是local_in的时候tuplehash[IP_CT_DIR_REPLY]的目的地址是本机,转换源地址没有任何意义,因此只是分...

2010-07-07 22:43:00 50

没有#!的bash脚本的执行

有些bash脚本写的不规范,没有在文件开头写#!,但是却能直接执行,可是如果看内核代码,shell脚本的加载函数中的开头就会判断,如果没有#!的话就会返回错误:static int load_script(struct linux_binprm *bprm,struct pt_regs *regs){... if ((bprm->buf[0] != '#') || (bprm...

2010-07-07 22:08:00 90

ssl协议中的dh算法的pre-master-secret

ssl3_send_client_key_exchange是openssl中客户端确定密钥的函数,同时也发送了“一部分”数据给服务器,这一部分数据就是所谓的pre_master,不管是客户端还是服务器都根据对端传过来的pre_master和自己计算出来的另一部分数据来生成最终的对称密钥,生成过程中需要hello消息中的随机数,这样生成的密钥才不会每次都一样。由于ssl协议中dh份额来源于证书,而证...

2010-07-06 22:35:00 111

mozilla的分层IO架构

mozilla的IO实现是分层的,本质上和BIO是一样的,只是写法不同罢了,最上层,mozilla封装了一个结构体:struct PRFileDesc { const PRIOMethods *methods; //本层的IO函数的实现 PRFilePrivate *secret; PRFileDesc *lower, *higher; //上下两层,如此所有的层次可以三个三个连...

2010-07-06 22:30:00 44

mozilla的安全架构

mozilla在安全方面主要分为三大块:1.SSL协议的实现;2.Crypto库的实现;3.PKCS#11的实现最顶层是ssl的实现,和openssl不同,mozilla是自上而下设计的,因此mozilla并没有抽象出诸如BIO或者EVP之类的通用机制,可以它实现了一个PRFileDesc结构体,和BIO是很类似的;涉及到安全的实现就是2和3了,其中3定义了接口,2给与了软实现,当然你可以加载pl...

2010-07-06 22:29:00 64

SVR4/4.3BSD与Linux对待伪终端的不同方式

打开伪终端意味着打开了一个“终端对”,这个终端对的其中一个是主终端,另一个是从终端,简单说主终端和类似sshd,telnetd等用户空间的远程协议处理进程连接,而从终端则和shell之类的实际进程连接,在处理远程登录的时候,一般都是由远程协议处理进程打开主终端和从终端,然后就在远程网络终端和本机shell之间建立了一条双向通道--“远程网络终端-(套接字)--本机协议处理进程--主终端--从终端-...

2010-07-05 21:20:00 51

unix流架构到底是个什么东西

仅有理论而无实例只是纸上谈兵,unix的流机制是很妙的机制,但是unix流究竟是如何实现以及如何使用的呢,虽然unix流已经提出了很久很久,但是时至今日它也没有普遍被使用,出了solaris和windows等操作系统外,几乎没有什么系统在使用它,当今世上操作系统无非也就几家独大,按照不失一般性的分类,首先就是windows,然后是linux以及几家的unix,如solaris和各种bsd以及dar...

2010-07-04 17:07:00 64

再谈UNIX流机制和tty驱动

忍不住再次说一下unix的流机制。周末在家调试linux的终端驱动,发现linux并没有按照unix流机制的建议来实现tty驱动,虽然我对windows内核理解不如对linux深刻,可是还是略知一二,windows的分层驱动模型倒是和unix流机制甚是相似,如出一辙。windows借鉴了unix的很多思想,或者说英雄所见略同,而linux却是典型的实用主义者,根本不管什么架构。 linux的t...

2010-07-03 17:14:00 47

用文字描述TCP的流量控制和拥塞控制

TCP在发送端和接收端有两个窗口,发送端的是拥塞窗口而接收端的就叫做接收窗口,两个窗口的作用不同,所谓的流量控制就是收发端的速率要匹配,决定权在接收端而不在发送端,因为发送的慢了可以提速,而接收不了就意味着丢包,这就好比冷了可以穿衣而热了只有扒皮一样。因此对于收发端,流量控制主要由接收端控制,因此接收窗口就表示“我能接收多少”,按照这个数字发送,在该连接独占网络并且带宽无限的情况下...

2010-07-02 20:13:00 296

syslog的点滴--集中处理日志

syslogd和klogd是很有意思的守护进程,syslogd是一个分发器,它将接收到的所有日志按照/etc/syslog.conf的配置策略发送到这些日志应该去的地方,当然也包括从klogd接收到的日志,klogd首先接收内核的日志,然后将之发送给syslogd,klogd是怎么接收内核的日志,接收到的日志又是怎么发给syslogd的呢?过程其实很简单,klogd通过读取/proc/kmsg来接...

2010-07-01 22:32:00 64

使用 linux的几个需要注意的问题(之二)

1.在shell脚本中改变当前目录cd只能改变current目录,因此不能指望在一个脚本中实现cd ...(long path)的目的,脚本是通过fork/exec执行的,等于说在一个新的进程环境中执行的,一旦这个脚本执行完毕,当前进程的pwd还将是原来的shell的pwd,shell脚本中的cd对pwd的改变随着shell脚本的exit而一同消失,还是老老实实敲路径吧,其实为了避免敲过于长的...

2010-07-01 22:28:00 45

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除