Monthly Archives: July 2012

命令行测试ssl回话

工作到现在,经常在和HTTP协议打交道,所以HTTP相关的开发工具和调试工具是必备的;平时工作中调试bug的时候,一般都是调试单个回话的居多,所以经常使用telnet调试HTTP会话,telnet虽然功能极其简单,但是也极其的强大,因为你可以构造任何http header给服务器,这样你就可以研究各种条件下http服务器的返回内容;下面的一个例子。

但是telnet不支持ssl,需要这样测试https,怎么办,用openssl的s_client客户端就可以了,前提是你安装openssl:

openssl s_client -connect www.example.com:443

如下图:

 

参考资料:

1.http://www.bearfruit.org/2008/04/17/telnet-for-testing-ssl-https-websites/

谷歌搜索关键字telnet ssl,这是第一篇文章,也是从这里学到的;

2.http://www.ibm.com/developerworks/cn/linux/l-cn-sclient/index.html

这篇来自ibm的文章列举了openssl的s_client客户端的几个高级用法;

3.http://www.blogjava.net/ycyk168/archive/2009/11/27/303946.html

这篇博文举了几个s_client应用的简单例子;

4.http://www.openssl.org/docs/apps/s_client.html

这是openssl s_client客户端的官方手册。

配置你的firefox,让开发和测试工作变得更方便

今天终于知道了为什么firefox是开发利器,不仅对于前端开发工程师来说重要,对于web开发人员来说用处也非常大,因为它具有高度的可配置型,这里举几个例子,配置在工作中我经常用到的几个参数。

在firefox的浏览器地址栏里面输入:about:config,然后配置相应参数。
1.favicon.ico文件
当你用firefox进行简单http测试的时候,很多情况下你会用wireshark等抓包工具观察报文情况,你会发现,一般都会多出几个和favicon.ico 有关的404会话,这是很烦人的,它会打扰你分析问题;因为正常情况下,firefox会到根目录取favicon.ico文件, 你可以配置这两个参数:browser.chrome.favicons,browser.chrome.site_icons;让它禁止读取favicon.ico这个文件。如下图所示 。

browser.chrome.favicons

 

2.http请求的版本
这久一直在修复几个和http版本相关的bug,具体情况是,当http请求的版本号和http响应的版本号不一致的时候,系统无法正确处理压缩编码的内容,测试的时候需要发送不同的http请求版本,可以双击修改这个参数:network.http.version;如下图所示。

http version

3.Accept-Encoding头的值
你可能需要发送不同的编码值,例如,gzip,deflate,identity等等,你可以双击修改这个参数:network.http.accept-encoding;如下图所示。

accept-encoding

推荐一些实现操作系统内核有用的书籍或资料

Table of Contents

1 前言

自己本科的毕业设计是实现一个简单的操作系统内核,但是由于时间原因,只完成了一点点,包括引导加载程序,异常处理;当时考虑到大二大三自己的底层知识基础打得不好,再加上目前用C实现的内核是在太多了,要从头实现肯定会有抄袭的痕迹,所以打算完全用x86汇编语言实现,编译器用NASM,实现完之后确实汇编的东西基本的东西都捡回来了;在这里我整理一下自己实现这个内核过程中参考过的书籍、资料或者文献,希望对大家有所帮助。

2 一、x86汇编语言

虽然现在很少有使用汇编语言的场合,即使有,也尽量会被C取代,但是掌握汇编语言对于理解CPU和一些接口的工作原理至关重要。

intel cpu的官方手册,这手册是特别重要的,实现操作系统一定要看,特别是这几章节:卷1的第三章,主要讲intel cpu的程序运行环境,包括所有的寄存器,内存组织,堆栈结构等等;卷1的第六章,函数的调用过程,还有几个相关的重要指令、堆栈环境以及相关寄存器等等;卷3的第三章,主要讲解地址空间,重要;卷3的第四章,分页模式;卷3的第五章,保护模式,包括类型检查,越界检查以及特权级检查等;卷3的第六章,讲解异常处理;卷3的第七章,主要讲解任务,包括任务的数据结构、切换以及连接等;

  • 2.(美)Barry B.Brey.intel微处理器[M].北京:机械工业出版社,2008.

这本书我只看了一点,主要参考了一些指令,还有对选择子和描述符的讲解;

  • 3.Jeff Duntemann.Assembly Language Step-by-Step[M].美国:Wiley,2009.

这本书是为数不多的以NASM来讲解x86汇编语言的,而且讲得很详细,没有汇编语言的知识也能读懂,强烈推荐当做nasm的入门教材;

  • 4.吕晓庆.80386/486系统编程实践[M].浙江:浙江大学出版社,1993.

这本书很古老很古老了,找不到电子书,我是去我们学校的另一个校区的图书馆里面才找到的这本书,里面提供了很多关于保护模式编程的具体例子,用来理解intel cpu官方手册的绝佳教材,强烈推荐;

  • 5.罗克露 等编.计算机组成原理[M].北京:电子工业出版社,2004.

这本书是我们大二计算机组成原理课程的教材,主要用来复习一下微机接口的知识;

  • 6.谭毓安,张雪兰,李元章.Windows汇编语言程序设计实验指导[M].北京:清华大学出版社,2008.

当时我看intel cpu手册的时候,对卷3中的大部分内容理解得不是很透彻,通过这本书里面几个关于保护模式编程的例子,一下子就豁然开朗了好多,非常推荐配合intel cpu手册看的一本书;

  • 7.熊桂喜,赵海.PC机各类显示系统的编程及应用[M].北京:清华大学出版社,1992.

这也是一本很古老很古老的书籍,主要用来理解vga显示器编程的书籍,很好很强大;

  • 8.赵国相,张健,赵大鹏等.微型计算机原理与汇编语言程序设计[M].北京:科学出版社,2004.
  • 9.赵国相,于秀峰.微型计算机原理与接口技术[M].北京:科学出版社,2003.

这两本书是我们大三微机接口原理的课本,不推荐看,写得比较烂,而且还是实模式的讲解,太落后了,也是主要用来温习微机接口的知识;

3 二、操作系统理论及实现

  • 1.赵炯.Linux内核完全剖析[M].北京:机械工业出版社,2006

这本书的作者赵炯博士对linux的内核是非常熟悉的,是一位博士,国内市面上唯一对linux 0.12内核作出透彻剖析的一本书,非常强烈推荐,我就是通过这本书才知道怎么写cpu第0号到第20号的异常处理,当然,由于时间原因,我只看了前面几章,非常遗憾;书的开头有句非常经典的话:Read The F***ing Source Code;

  • 2.(荷)Andrew S.Tanenbaum.现代操作系统(英文影印版.第3版)[M].北京:机械工业出版社,2009.

这是荷兰科学家Tanenbaum写的操作系统理论教材;

  • 3.(美)ANDREW S.TANENBAUM,(美)ALBERT S.WOODHULL.操作系统设计与实现(第3版)[M].北京:清华大学出版社,2008.

这也是AST写的书,其实是Minix 3的最全面的手册,minix 是一个非常优秀的、适合学习操作系统实现的、但是内核代码量不是很大的操作系统,如果要想实现一个比较实际的、能跑起来的操作系统内核,建议好好研读minix的源代码和这本书;

  • 4.(美)Marshall Kirk McKusick,(美)George V. Neville-Neil.FreeBSD操作系统设计与实现[M].北京:中国电力出版社,2008.

这本书从一个比较高的角度分析FreeBSD操作系统的架构,里面的代码很少,主要讲OS的数据结构以及这些数据结构之间的联系;

  • 5.Behrouz A. Forouzan With Sophia Chung Fegan.计算机科学基础–从数据操纵到计算理论(英文影印版)[M].北京:高等教育出版社,2007.

这本书比较基础,讲一些很底层的运算和对计算机各个方面进行简单的入门介绍;

  • 6.John R. Levine.Linkers and Loaders[M].美国:Morgan Kaufmann,1999.

这本书是唯一一本讲解连接器和加载器的著作,非常难以理解,推荐;

  • 7.Maurice J.Bach.UNIX操作系统设计[M].北京:机械工业出版社,2006.

这本书是类似于上面介绍的那本freebsd的书,也是从一个很高的角度介绍unix的架构;

+8.Randal E. Bryant,David R. O’Hallaron.Computer Systems:A Programmer’s Perspective (2nd Edition)[M].美国:Addison Wesley,2010.
这本书强烈推荐,里面讲解程序的链接和装载过程非常精彩,让我深刻理解了动态链接过程;

  • 9.于渊.Orange’s:一个操作系统的实现[M].北京:电子工业出版社,2009.

对于这本书的推荐,我是有所保留的,网上书评也给得挺高,大一大二的时候翻过这本书,曾经很冲动的想自己写个内核;作者自己实现了一个内核orange,讲得非常详细,贴了挺多代码,希望只有一点C语言基础的读者通过阅读他的书籍就能实现自己的OS,个人认为有些时候好心办坏事,好多地方讲得有点罗嗦,结果很多读者因为没有具备相应的知识只有囫囵吞枣,照着他的代码敲一遍,当然这也是一种学习方法,不过我觉得读者应该具备相应的知识再去阅读此书,不要连汇编语言都不会使就去阅读,否则碰到不会知识的时候,像书中序言所说的那样,学到再用,又得去翻其他的书籍,理解之后又回来看,来来回回折腾会需要更多的时间去理解这个内核的整体性,我希望读者具有足够的知识的时候再去阅读就能够理解书中的大部分内容,如果要阅读源代码,还是推荐linux 0.12和minix的代码,对理解实现很有帮助,本书的作者也是参考minix的代码,书中的很多地方有很深的模仿minix痕迹;当然,我没有看完这本书,只看了前几章,个人愚见,如有不妥,欢迎拍砖;

  • 10.俞甲子,石凡,潘爱民.程序员的自我修养–副标题: 链接、装载与库[M].北京:电子工业出版社,2009.

这本书也比较深奥,讲解连接器和装载器的入门书籍,作者的内功很深厚,推荐;

这个链接是博主实现操作系统内核的一个博客,要很好地理解intel卷3的内容,推荐阅读这里的代码;

评论同上。

这个链接讲解ELF的文件格式,浅显易懂;

ELF文件格式

这个网站是操作系统内核开发爱好者聚集的社区,它的维基页面有很多入门的资料和文献,强烈推荐;

4 三、工具

  • 1.Richard M. Stallman,Roland McGrath,Paul D. Smith.GNU Make[M].美国:Free Software Foundation,2004.

GNU make 的官方手册

  • 2.《GNU Make项目管理》(Managing projects with GNU Make)

Oreilly介绍gnu make的动物书,有很多gnu make的语法例子,强烈推荐;

  • 3.uClinux源代码中Make文件完全解析

详细讲解uClinux makefile的书籍,和上面一本书作为学习写makefile的绝佳书籍组合,如有疑问,可配合gnu make的官方手册查看;

  • 4.鸟哥.鸟哥的Linux私房菜 基础学习篇(第二版)[M].北京:人民邮电出版社,2007.

linux基础,命令,工具链啊,什么的;

NASM的官方手册,NASM的宏很强大,请仔细学习手册里面的宏的用法;

bochs模拟器的用户手册;

晦涩难懂的AT&T语法的gnu汇编器的官方手册

这本书是gnu ld连接器的手册。

以上书籍的电子书在网上基本都能找到,一些国内的书找不到,只能到图书馆里面翻,有的链接可能已经失效,如果这样,请自行Google之。

Date: 2012-11-27T04:06-0500

Author: User

Org version 7.9.1 with Emacs version 23

Validate XHTML 1.0

 

整理工作中经常用到的一些freebsd命令或者技巧











这里整理一下平日工作中经常用到的一些unix命令,这些命令不是大全,如果你有这样的目的,请看相关手册;因为平台是FreeBSD,所以一些配置文件可能只是它独有的,这篇日志会经常更新。

1.cmd

1.1 chsh -s /usr/local/bin/bash

修改默认shell(FreeBSD),确保你的shell程序路径在/etc/shells中,例如,如果你要把你的shell设置为你默认的shell,示例:

# $FreeBSD: src/etc/shells,v 1.5 2000/04/27 21:58:46 ache Exp $
#
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.

/bin/sh
/bin/csh
/bin/tcsh
/usr/local/bin/bash
/usr/local/bin/rbash

1.2 fsck -y

磁盘出问题,用fsck修复的时候,会经常询问你是否需要SAVEGE?如果时间长的话,每次都敲YES确认是一件效率很低下的事情,用-y选项让它自动yes;

1.3 call cpureset()

用kgdb调试内核的时候,用这个键进行软重启,这样就不用每次都去手动按那颗重启键了;

1.4 arp -d -a

这条命令是清空freebsd的arp缓存;

1.5 sockstat -4

这条命令用来查看哪个应用程序占用了哪个端口。比如说安装apache的时候,如果出现无法启动、提示端口被占用的错误,就可以用这条命令查看哪个应用程序占用对应端口了;

1.6 netstat -r

用来查看路由表信息

1.7 route add …

用来添加静态路由,具体格式请看手册页面。例子:
添加一条到主机192.168.0.21的路由192.168.0.11:

route add -host 192.168.0.21 192.168.0.11
route add -inet 192.168.1.0 255.255.255.0 172.168.0.1

添加到网段的路由:
ipv6的话,需要添加-inet6选项,例如:

route add -inet6 -host 2012:2013::192:168:0:1

对应的route del也需要-inet6选项

1.8 sh /etc/rc

修改/etc/rc.conf之后,小白经常不知道怎么让它马上生效,最2的办法就是重启系统,这条命令就是用来让修改生效的;

1.9 修改、添加或者删除ip地址,我一般是修改/etc/rc.conf,然后执行第9条命令,格式请看手册,例子:

ifconfigem0=”inet 10.8.1.75 netmask 255.255.255.0″
ifconfigem0alias0=”inet 192.168.0.5 netmask 255.255.255.0″

1.10 /var/tmp/vi.recover

开机启动FreeBSD,有时候会在这行 Recovering vi editor sessions 停住挺长时间,删除这个目录就能解决 /var/tmp/vi.recover

2.Reference

这篇文章会定期更新,更多详细内容请看freebsd的手册:
<a href=”http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/“>http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/</a>

Date: 2013-01-08

Author: User

Org version 7.9.1 with Emacs version 23

Validate XHTML 1.0


http请求中的via头可能会影响iis6 web服务器的压缩行为

哎,终于更新博客了,这是在大猫那边买空间之后为数不多的文章之一;工作之后发现时间真的是越来越紧张,不像在学校那样时间宽裕,又想念学校生活了。。几个月之前就想更新,学习、加班什么乱七八糟的事耽误着,总让人有种心有余力不足的感觉,差不多空间又要续费了,再不更新资源严重浪费了。

今天记录一下工作中修bug中遇到的一个技术问题,主要是http的via头会影响iis6 web服务器的默认压缩行为;更具体一点,就是如果请求中有via头,并且希望得到压缩内容,也就是”Accept-Encoding”头中的含有有效压缩字符,如”Accept-Encoding: gzip”,那么iis6服务器默认情况下是不回复压缩的内容;因为iis6服务器认为,含有via头的http请求来自代理服务器,它们不能很好的处理有编码的内容;确实是这样,最近修了公司产品几个关于压缩的bug。

我们举例子来理解它的行为:

1.环境:iis6服务器,我用windows 2003装的iis6;任何能发送含有via头请求的浏览器,我用telnet,非常简单但是非常强大;如下图所示。

有via,没压缩内容

没via头,有压缩内容

 

2.分别发送含有via头的请求和没有via头的请求,我们发现,来自iis6服务器的内容不一样。原因上面已经提及。那么,如何解决?简单,在请求中屏蔽via头,还有一个办法,调整iis6的一个参数,就能让它回复含有编码的内容给含有via头的请求:在配置文件中,C:\WINDOWS\system32\inetsrv\MetaBase.xml,把变量HcNoCompressionForProxies的值变为FALSE;这样,就能收到压缩编码了。如下图:

有via,有压缩