IT Category

在Mac OS X下面用openssl加密文件

In: IT

相信用Mac、Linux的朋友都有加密文件的需要,但这些系统下面并不一定能找到比较好而且还是免费的加密软件。今天就介绍一个所有Mac、linux系统都自带的软件:openssl。
openssl包括了大量的对称、非对称、摘要等加密算法,我们可以选用对称算法对文件进行加密,比如3DES。
比如我们要对test.tar.bz2进行加密,那么我们可以使用下面的方法

$ openssl des3 -salt -in test.tar.bz2 -out test.tar.bz2.des3

其中-in是输入文件,-out是加密后输出的文件
之后会提示你输入一个用于加密的密钥,输入一个自己能记住的密码

enter des-ede3-cbc encryption password:
Verifying - enter des-ede3-cbc encryption password:

然后我们可以试试加密后的文件是否可以打开

$ tar jxvf test.tar.bz2.des3
bzip2: (stdin) is not a bzip2 file.
tar: Child returned status 2
tar: Error exit delayed from previous errors

嗯。。。可以确认文件被成功加密了。
我们试试把文件解密

$ openssl des3 -d -salt -in test.tar.bz2.des3 -out newtest.tar.bz2
enter des-ede3-cbc decryption password:

解密出来的文件输出为newtest.tar.bz2
解压看看

$ tar jxvf newtest.tar.bz2 [...]

  • Comments Off

使用arpspoof抵御ARP攻击

In: IT

嗯嗯,没错,就是arpspoof,一个专门从事arp攻击的工具。
既然是arp攻击工具,那么自然可以为我们自己所用,我们所要做的就是每秒发送NNN个arp包给网关,告知网关正确的arp。
arpspoof被打包在dsniff套装里面了,所以我们需要把整个套装安装,因为套装里面太多好工具了,包括arp、dns、ftp、http等攻击和嗅探工具。
在debian下面,先把源代码包下载回来
#cd /root
#mkdir dsniff
#cd dsniff
#apt-get source dsniff
#cd dsniff-2.4b1+debian
#vi arpspoof.c
找到

for (;;) {
arp_send(l, ARPOP_REPLY, NULL, spoof_ip,
[...]

最近几天用Zend Framework做一个项目,但是碰到一个棘手的问题:一个名为DashBoard的Controller在本机调试的时候调用一切正常,但传到服务器上后每次都提示我
Invalid controller specified (Dashboard)
开始以为是PHP版本的问题,但更换多台服务器,不同PHP版本后仍然无果.最后发现把DashBoardController.php改名为DashboardController.php后正常.
分析了一下原因,Zend Framework会把文件名作安全处理后再去读取,因为Mac OS X的文件系统是大小写不区分的,所以可以正常读取文件,但放到Linux系统后就会因为找不到文件而报错.

支付宝不再支持非IE内核浏览器

In: IT

关于关闭firefox等浏览器访问支付宝网站权限的通知
亲爱的firefox浏览器用户:
由于firefox等非IE内核浏览器的用户在访问支付宝网站时,无法正常安装支付宝安全控件,出于您的访问安全考虑,支付宝决定从2007年8月15日起,关闭firefox、Opera等非IE内核的浏览器用户访问支付宝的权限,请您选用其余浏览器,如IE、MYIE等浏览器访问支付宝(如果您想继续试用firefox浏览器,需要安装firefox的插件,具体方法如下)。我们也会尽快解决firefox与支付宝安全控件的兼容问题,在此期间给您造成的不便,敬请谅解。
浙江支付宝网络科技有限公司2007年7月31日
==================================================
社会越来越和谐了。本来因为支付宝支持非IE浏览器,所以自己才经常去用。没想到这么快就玩完了。而且支付宝的理由很充分:非IE内核的浏览器就不支持activex,不支持activex的浏览器就不是安全的浏览器。
最可笑的是支付宝给出的临时解决方案:给firefox装上一个IETab。
我只能说:很好,很和谐

个人网站发展方向新讨论(一)

In: IT

变相的收费色情网站
http://www.metcn.com/joinviewer.html
找几个小姐,找一个摄影师(如果自己会摄影,艺术感好点,这个也省了),拍照片,开网站,收会员费。
因为会员不交费,看不到什么(顶多也就一个半裸),就算被查,也可以说是艺术照片。而且网站打着一个鉴赏的口号,法律层面上很容易就过去了。网上不是流传一句很经典的话嘛:色情和艺术的分别在于大腿张开的程度。
至于推广的方式,可以参考这几天正旺的【开心摄影协会】吴倩事件,两篇新闻,第一篇先吊起大家的胃口,在大家的胃口要下没下的时候,再半遮半掩的透露个【开心摄影协会】的名字,这样一来,搜索引擎的top10肯定充斥着这些关键词,效果就达到了
但最后还有个问题,如何让网站永葆青春。因为通过炒作过来的流量是很难留住的,除非网站真的是那么有特色。
(本文并不是教育大家去做一个这样的网站,只是为个人站长提供一个思路和方向。请勿挑战法律底线!)

  • Comments Off

SuperDrive故障的解决

In: IT

最近两三个月发现Macbook Pro的superdrive越来越不好用了,到上个星期达到顶峰,除了DVD、外面卖的工厂压制的CD,所有自己刻录的CDR都无法读取,提示我插入的是一张空白光盘。刻录光盘的过程也无法进行,不管是toast还是磁盘工具都会提示我介质有问题。
Toast的错误提示:
The drive reported an error:
Sense Key = MEDIUM ERROR
Sense code = 0×73,0×03
磁盘工具的提示:
Jul 13 13:34:38: “磁盘工具”已启动。
正在刻录映像“debian-testing-i386-CD-1.iso”
正在准备用于刻录的数据
正在打开区段
正在打开轨道
正在写入轨道
正在关闭区段
正在结束刻录
刻录失败
刻录失败,因为发生介质写错误。
不能刻录“debian-testing-i386-CD-1.iso” - 刻录失败,因为发生介质写错误。.
Disk Utility: Burn started, Fri Jul 13 13:34:54 2007
Disk Utility: Burning to CD-R media with SAO strategy in MATSHITA DVD-R   UJ-857 HAEA via ATAPI.
Disk Utility: Requested burn speed was max, actual burn speed is 24x.
Disk Utility: Burn underrun [...]

第 8 章 测试并运行Squid
1.前期准备
想要测试Squid是否正常,必须要先把www.naizhao.com这个域名解析到2.2.2.2这个IP上。跟上一章一样,如果你是网通用户就不需要做任何操作,DNSPod会给你返回2.2.2.2这个IP。如果你是电信用户,或者解析出来的IP不是2.2.2.2,那么就要修改系统的hosts表,对应记录添加进去。跟上一章不一样,上一章修改的是Squid服务器的hosts表,你现在需要修改的是你用来测试Squid的系统的hosts表。
除了修改hosts表外,我们还需要一个名为curl的小工具。一般的Linux/Unix系统都附带了这个工具,如果使用Windows,那么需要到下面的地址下载一个,并且放到D:\(或者其他地方,自己喜欢)。
http://curl.haxx.se/latest.cgi?curl=win32-nossl (32位系统)
http://curl.haxx.se/latest.cgi?curl=win64-nossl (64位系统)
下载回来解压后,我们只需要一个curl.exe。
2.运行Squid
我们继续用上一章的方法,用调试方式启动squid
cd /usr/local/squid/sbin
./squid -Nd 1
然后打开浏览器,输入http://www.naizhao.com,看输出的网页是否正确。
如果能显示出正常的页面,那么说明squid已经正常运行了。但我们还需要确认一下,所需要的页面是否已经被squid缓存了。
3.测试Squid
我们使用curl,输入下面的命令(Windows用户请使用命令行来运行curl)
curl -I http://www.naizhao.com/
HTTP/1.0 200 OK
Date: Sun, 08 Jul 2007 12:16:27 GMT
Server: NaiZhao Web Server/1.0.0
Last-Modified: Wed, 13 Dec 2006 06:11:14 GMT
ETag: “7665b-1983-4417e480″
Accept-Ranges: bytes
Content-Length: 6531
Vary: Accept-Encoding
Content-Type: text/css
Age: 29155
X-Cache: MISS from cnc.naizhao.com
Via: 1.0 cnc.naizhao.com:80 (squid/2.6.STABLE13)
Connection: close
我们留意输出的内容,下面一行内容表示并没有命中缓存。也就是并不是从缓存中读取所需文件。一般第一次访问一个文件的时候,出现MISS是正常的,因为本来文件就不存在于缓存中。
X-Cache: MISS from cnc.naizhao.com
然后,我们重新运行一次命令,继续看输出的内容
curl -I http://www.naizhao.com/
HTTP/1.0 200 OK
Date: Sun, 08 Jul 2007 12:16:27 GMT
Server: NaiZhao [...]

第 7 章 配置Squid
1.设置hosts表
首先我们要明白一下squid在CDN中扮演的角色。squid在CDN中其实只是一个代理+缓存。跟一般的代理服务器类似,squid代替用户向真正有内容的服务器进行请求,并且缓存下来。所不同的是,squid是作为一个类似apache一样的web服务器存在,用户访问的时候并不感觉到是访问了一台代理服务器,而是一个真实的web服务器。一般情况下,我们把这种方式称之为“反向代理”。
所以,我们需要让squid知道内容要到哪里去取。因为我们已经把域名naizhao.com设置了智能DNS,而且这台squid服务器也是网通的,按照正常的dns解析,会把naizhao.com解析为2.2.2.2这个IP(也就是网通机器本身)。但这个IP上面并不存在任何所需要的内容,所有需要的内容其实是在1.1.1.1上(源服务器)。所以我们需要为naizhao.com固定一个IP,也就是1.1.1.1。
让系统得到这个IP的方法有两种,一种是设置hosts表,另外一种是系统里面搭建一个dns服务器。Windows下大家应该会经常去编辑到hosts文件,linux下同样也存在这个文件,我们在前面的vim教程中已经提到过。搭建dns系统这个方法工程太过庞大,还是编辑hosts文件相对来说比较简单,所以我们就采用编辑hosts表的方法。
linux下面的hosts表位于/etc/hosts,格式跟Windows大致相同,打开后我们把下面一行加到末尾
1.1.1.1 naizhao.com www.naizhao.com cnc.naizhao.com
如果已经按照前面的教程,添加过1.1.1.1这条记录的,修改为上面的样子。
2.设置squid
squid的配置文件位于/usr/local/squid/etc/squid.conf,打开后会有英文的详细说明。暂时我们不需要去理解这个文件里面各个配置的含义,相信大家看到一大堆英文都会头大的。大家只需要知道如何把squid按照自己的需求跑起来,并且不出错就好。
我们先用rm命令把squid.conf删掉。不用怕删掉后找不回来,还有一个默认的squid.conf.default在呢。一般的linux程序,包括apache等,都会有一个.default的默认文件,方便大家恢复默认设置,或者作为一个修改的参考。
squid.conf删掉后,我们再用vi squid.conf,新建这个文件,然后把下面的内容帖进去,保存

http_port 80 vhost vport=80
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
cache_mem 1024 MB
maximum_object_size 4096 KB
minimum_object_size 0 KB
maximum_object_size_in_memory 256 KB
cache_dir ufs /var/spool/squid 20480 16 256
cache_swap_low 80
cache_swap_high 97
strip_query_terms off
request_body_max_size 5 MB
memory_pools on
memory_pools_limit 50 MB
access_log none
cache_log /var/log/squid/cache.log
cache_store_log none
pid_filename /var/run/squid.pid
hosts_file /etc/hosts
refresh_pattern ^ftp: [...]

第 6 章 编译并安装Squid
首先使用tar把源代码压缩包解压

tar zxvf squid-2.6.STABLE13.tar.gz

解压后,我们得到一个名为 squid-2.6.STABLE13 的目录。进入目录

cd squid-2.6.STABLE13

在configure前,我们必须要先设置cflags,这里我们假设CPU是intel core duo的,cpu family 6,model 14。通过 http://gentoo-wiki.com/Safe_Cflags#Intel_Core_Solo.2FDuo 可以找到对应的优化参数

CHOST="i686-pc-linux-gnu"
CFLAGS="-march=prescott -O2 -pipe -fomit-frame-pointer"
CXXFLAGS="${CFLAGS}"

然后通过export命令设置

export CHOST="i686-pc-linux-gnu"
export CFLAGS="-march=prescott -O2 -pipe -fomit-frame-pointer"
export CXXFLAGS="${CFLAGS}"

设置完成后,我们可以通过env命令来查看是否设置成功。
然后,我们开始configure源代码。使用下面的命令,把squid安装到/usr/local/squid目录中去。

./configure –prefix=/usr/local/squid –enable-follow-x-forwarded-for –enable-storeio=aufs,ufs –with-maxfd=65536 –with-pthreads –enable-dlmalloc –enable-poll –enable-stacktraces –enable-removal-policies=heap,lru –enable-delay-pools

对应参数的作用可以使用./configure –help得到。
这里大家要注意下,configure前面还有一个./,这个代表当前目录。意思是当前目录下面的configure文件。linux如果要执行当前目录的文件,必须要加上./。如果要执行当前目录下的下级目录里面的文件,可以不用加,比如bin/run。当然,./bin/run也是一样的效果。
接着我们会看到屏幕向下翻滚,出现一大堆checking for …的字样。一直等到下面的文字出现,并且停止,那么configure就算完成了。

config.status: creating tools/Makefile
config.status: creating include/autoconf.h
config.status: executing depfiles commands
[root@cnc squid-2.6.STABLE13]#

然后,我们输入make编译源代码,又是一行行的英文翻滚。是否有点感觉做黑客的味道?我们要做的还是继续等待下面的文字出现

make[2]: Leaving directory `/root/squid-2.6.STABLE13/tools’
make[1]: Leaving directory `/root/squid-2.6.STABLE13/tools’
make[1]: Entering directory `/root/squid-2.6.STABLE13′
make[1]: [...]

  • Comments Off

第 5 章 安装Squid的前期准备
从本章开始,大家将会学到如何在Linux下面安装、编译程序,还会学到程序编译的优化方法,最后会通过源代码编译的方式把Squid安装上。
1.Linux下面程序安装的基本知识
A.程序安装包的分类
平时大家在Windows下面安装程序,一般都是直接运行安装程序,然后安装程序会把编译好的二进制文件拷贝到系统里面,最终完成安装过程。
Linux下面,安装程序的自由度比Windows要大。因为Linux下面大部分东西都是开源的,所以程序的提供方式一般是二进制包或者源代码包。
二进制包,同样会有不同的打包和管理方式(类似于zip、rar,但更加先进)。最常见的两种软件包为rpm(redhat、suse等系统采用的包)和deb(debian、ubuntu)。机器上面安装的软件包多了,自然需要一个软件来进行管理、更新。所以就有了yum(rpm)、apt(deb)这样的软件包管理、升级软件。
源代码包,这样的包比较简单,一般都是直接把源代码打包成一个压缩文件,后缀一般是tar.gz或者tar.bz2
通过包管理软件安装软件比较简单,设置好软件的安装源后,可以使用下面的命令安装软件:
yum install php (yum)
apt-get install php5(apt)
如果不知道需要安装的软件包确切名字,可以使用下面的方法搜索:
yum search php(yum)
apt-cache search php(apt)
本文章主要探讨源代码包的安装。
B.通过源代码包安装程序
一般情况下,程序从源代码到能正常使用,需要经过三个步骤:1.根据系统环境对源代码进行配置(configure);2.编译程序(make);3.安装程序(make install)。
a.源代码配置
通过运行configure脚本,可以对所需要编译的程序的一些基本环境、所使用到的命令、库等文件进行自动查找,并且生成用于编译文件所需要的Makefile文件。因为Linux有太多的发行版本了,每个版本的环境都不一样,所以需要用到这个脚本。通过configure脚本还可以对程序的模块进行自定义,可以禁用或者激活某个功能。
b.编译程序
根据configure脚本生成的Makefile文件,对源代码进行编译、链接,生成二进制文件。但这个时候的二进制文件一般来说还不能使用。
c.安装程序
通过make install命令,把编译好的二进制文件安装到相应的路径,这个时候程序才真正可以使用。
C.程序安装到哪里?
一般编译安装的程序都会安装到/usr/local下面。比如php就会被安装到/usr/local/bin/php,php.ini会被安装到/usr/local/lib/php.ini,等等。如果需要指定安装目录,在configure的时候指定–prefix参数,会把所有文件都安装到prefix目录中。比如./configure –prefix=/usr/local/php。那么会把所有文件都安装到这个目录,最后看起来会是/usr/local/php/bin/php和/usr/local/php/lib/php.ini
D.如何得到configure的参数?
常用的configure参数有–prefix,可以通过./configure –help得到更多的参数。一般带有–enable-、–with-开头的参数都是启用某个功能,–disable-、–without-开头的都是禁用某个功能。
E.如何删除安装好的程序?
Linux删除程序跟Windows不太一样。Windows建议使用卸载功能卸载程序,Linux下通过包管理软件安装的程序也可以直接用命令删除,例如:
yum remove php(yum)
apt-get remove php5(apt)
如果通过源代码包安装的程序,一般会带有make uninstall,通过这个命令可以删除所安装的文件。如果不带有make uninstall,那么可以直接把程序安装目录删除。
注意:如果是依赖库(比如php如果要使用到mysql的功能,必须要先安装mysql,然后在配置php的时候指定mysql库的路径,那么php就是依赖了mysql),删除被依赖的程序,那么用到依赖库的程序都将会无法使用(比如删除mysql后,php将无法正常使用mysql部分的功能)。
F.还有个make clean是干什么用的?
make clean用来打扫战场。把所有编译时留下的临时文件、编译后的二进制文件等都清理掉。一般建议在make install后make clean,方便下次重新编译和节省空间。
2.源代码编译时的优化
用Windows的朋友都知道,平时最头痛的事情就是程序占用CPU太高,而且消耗内存特别大。这是因为Windows的程序都是一些“通用”程序,并没有针对特定的平台和特定的CPU进行优化。在Linux下,通过源代码来编译二进制文件,这个问题将得到有效的改善。我们可以通过添加优化参数,让程序针对某个CPU型号和某个系统进行最大优化,减少文件大小、CPU使用率、内存使用率。
但是,通过指定优化参数来编译的程序,将不再具有跨系统跨平台的能力。就算两台机器系统版本一样,只要CPU不一样,程序都无法运行。程序只能在所编译的机器上运行。
一般情况下,优化参数都是通过export命令设定CFLAGS和CXXFLAGS,然后configure的时候会自动读入,make的时候会自动使用所选的优化参数。
例如,普通Pentium 4的CPU(显示的型号为Intel(R) Pentium(R) 4 CPU XXXXMHz,cpu family: 15,model: 0/1/2)就可以输入下面的命令

export CHOST="i686-pc-linux-gnu"
export CFLAGS="-march=pentium4 -O2 -pipe -fomit-frame-pointer"
export CXXFLAGS="${CFLAGS}"

CPU型号等信息可以通过输入下面的命令得到

cat /proc/cpuinfo

将会输出类似下面的信息

processor : 0
vendor_id [...]