By:Lcx
可能很多人还不是很了解我所说的web脚本代理是个什么概念。WEB脚本代理就是在服务器上放一个asp或php等的动态的脚本,然后调用这个脚本去访问别的网站,那么被访问网站的显示你来访的IP就是服务器的IP。4ngel的PhpSpy后门和Marcos的aspadmin站长助手这两个webshell都集成了这个功能。无论是php或是asp的脚本代理其实都是调用了xmlhttp这一组件,将远程网站的数据用你所放webshell的服务器上来进行一次中转然后再将内容呈现给你而已。很多程序员都用这个原理来写一些小偷程序,像在网站上只放几个脚本文件就可以调用别的网站数据。如果我们把它用在了黑客攻击上,那能用它来做什么呢?我恰好用它来做了一点事,就是提升权限和内网入侵。
一、提升权限
这应当是一个特例,不过确确实实被我碰到了。我在一个被入侵的网站上放了一个海阳顶端网asp木马。这个网站是一个公司的独立服务器,所以目录权限并没有像虚拟主机设置的那样变态,几乎所有目录都有可写权限,wscript.shell等命令也能运行。不过也正是因为是公司的独立服务器,所以也没有装serv-u这样容易的提权软件,也没有额外的第三方服务软件,系统补丁打得也很快,提权还是比较困难。替换服务是一个可行的办法,不过需要时间等待。经过仔细查看,得到了一些有用信息。该服务器是IIS+ASP+ACCESS搭配的web服务器,装有防火墙,对外只开放了80端口。另外,还装有了一个apache+tomcat+jsp的内部web系统,开放的是8080端口,内部web系统的物理目录也查明是C:\ApacheGroup\Tomcat 5.0\server\webapps。这也是我以前装过apache+tomcat+jsp,凭经验判断出来的。通过在海阳顶端里运行netstat -an和用海阳顶端asp木马的查看服务选项及目录信息能够了解到这3点的,如图1、图2、图3所示。另外用ipconfig/all这个命令可以明确知道图1中显示的10.0.16.16这一内网ip的确就是该服务器的内网ip。


信息有了,提权思路也就来了。如果我能绕过防火墙,直接访问它内网的web系统http://10.0.16.16:8080,那么我就可以先用海阳顶端asp木马传一个jsp的webshell到它的物理目录C:\ApacheGroup\Tomcat 5.0\server\webapps,然后再来调用这个jsp的webshell了。它的tomcat是以服务的形式安装的,jsp一般是继承了其系统权限。开始我以为好办,直接用htran.exe这个工具将其8080端口转到外网,我不就可以成功了吗?结果令我很失望,端口是转出来了,不过还是访问不了它的jsp系统,不知是什么原因。冥思苦想中,突然想到了我传一个asp脚本代理到它的网站,再调用这个脚本代理去访问它的内网的jsp web系统不就可以了吗?它的内网web和外网web都在同一服务器上,用脚本代理去访问绕过防火墙是根本不成问题的,因为这个脚本代理会让内网web系统误认为是同一台机器在访问它。我手头上有一个Marcos写的WebProxy.asp脚本,就是起代理作用的。于是我改名为imgae.asp传到了外网asp系统的某个目录,先来看看它的效果:提交http://www.g****.com/uploadimages/image.asp?url=http://www.haiyang.net/safety/ip.asp,效果如图4所示。可以看到我的访问ip的确变成了www.g****.com该服务器的ip了。
www.haiyang.net/safety/ip.asp是我写的一个验证来访者ip、端口的小程序,代码很简单,如下:
★
ip->->port
->actfor->
★
好,脚本代理没有bug,那么再写一个jsp的webshell传到内网jsp web系统的物理目录下吧。jsp的webshell我写得很简单,就是一个直接运行命令加用户的的小脚本tlist.jsp,代码如下:
★
<%@page import="java.io.*,java.util.*,java.net.*" %>
★
也许会有人问,那为什么不采用现成一些jsp木马呢。开始我还真试过了,因为我用的这个WebProxy.asp后边只能直接跟一个url文件,url文件里的某些post参数并不起作用,现成的jsp的木马写得都有点复杂,功能也多,因此一些命令不可避免地要运用到一些参数。我把这个tlist.jsp传到了内网web的物理目录下,然后直接运行http://www.generalichina.com/uploadimages/image.asp?url=http://10.0.16.16:8080/manager/tlist.jsp就在服务器上成功加了一个id为lcx的用户!如果要运行木马的话,你只要把tlist.jsp里的“●String cmd =”cmd.exe /c net user lcx lcx /add”;●”这句改动一下就可以了。像我传了一个tlist.exe到服务器的系统目录底下,然后改为“●String cmd =”tlist.exe”;●”,运行http://www.generalichina.com/uploadimages/image.asp?url=http://10.0.16.16:8080/manager/tlist.jsp运行效果如图5所示。
在实际操作过程中要注意一点,如果你用tlist.asp运行了一次命令的话,想改下代码运行其它的程序就要把tlist.asp改一次名,要不然还是回显上一次执行的结果。另外,不知是此台服务器特殊还是其它的原因,我把木马放在非系统目录,像c:\muma.exe,然后修改●String cmd =”cmd.exe /c net user lcx lcx /add”;●为●String cmd =”c:\muma.exe”;●木马并没有运行,只有放到系统目录system32底下才成功运行了,这个原因我现在也不是很明确。
二、入侵内网及其它妙用
入侵内网,在提升权限的第一个例子里其实已经很明确了,如果那台机器的内网web放在别的机器上,做法与提升权限的方法都是一样的,不过没有内外网在同一台机器上方便而已,这也算是脚本入侵内网的一个思路吧,实际意义不是很大,聊胜于无。其它妙用是什么呢?如果你在学校内网里,只能上内网和访问学校的web服务器,学校的web服务器与外网又是相同的,那你在web服务器放一个WebProxy.asp或其它的脚本代理,是不是你在内网访问http://学校的web服务器/WebProxy.asp?url=http://www.163.net/index.html就可以上外网了呢?一个asp脚本我估计就会解决以前很多学生的烦恼了吧?
http://lvhuana.bokee.com/inc/WebProxy.asp.rar
[最后修改由 neeao, 于 2006-03-14 17:13:51]
分类 : 技术文摘 | 发表时间 15-03-2006
分类 : 娱乐休闲 | 发表时间 10-03-2006
一、我们需要备份什么?
我的 Linux 系统是基于 Redhat 的Redhat Linux 9.0,同时配置了诸如 MySQL、PHP、Apache 等基础服务,同时又配有 Awstats、MRTG、MT 等应用服务程序,因此,我们需要备份的除了系统本身的重要文件以外,还需要备份数据库、log文件和统计数据文件等。当然另外一项必不可少的就是编译各项服务时的 ./configure 参数,这里就不赘述了。
二、制定备份文件列表。
这个步骤就是归纳一下需要备份的目录列表。以下我就依照我所安装的各项服务作了一个简单的list。 一些文件的地址是以我的服务器为标准(以”/”开头),一些则以相对目录来描述(以”./”开头)。
系统:
/etc /usr/local/etc
包含所有核心配置文件。这其中包括网络配置、系统名称、防火墙规则、用户、组,以及其他全局系统项。
/var
包含系统守护进程(服务)所使用的信息,包括 DNS 配置、DHCP 租期、邮件缓冲文件、HTTP 服务器文件、db2 实例配置,等等。
/home
包含所有用户的默认用户主目录。这包括他们的个人设置、已下载的文件和用户不希望失去的其他信息。
/root
是根(root)用户的主目录。
/opt
是安装许多非系统文件的地方。IBM 软件就安装在这里。OpenOffice、JDK 和其他软件在默认情况下也安装在这里。
系统中不需要备份的目录:
/proc
应该永远不要备份这个目录。它不是一个真实的文件系统,而是运行内核和环境的虚拟化视图。它包括诸如 /proc/kcore 这样的文件,这个文件是整个运行内存的虚拟视图。备份这些文件只是在浪费资源。
/dev
包含硬件设备的文件表示。如果计划还原到一个空白的系统,那就可以备份 /dev。然而,如果计划还原到一个已安装的 Linux 系统,那么备份 /dev 是没有必要的。
更多关于目录的解释,请查看 Filesystem Hierarchy Standard 和 Red Hat Linux Overview of File System Hierarchy Standard (FHS)
MySQL:
/usr/local/mysql
同时要注意版本的保留,在恢复的时候使用相同的版本(或者相同系列的版本)会减少更多不必要的麻烦,例如 “/usr
/local/mysql-standard-4.1.7-pc-linux-i686”。
/etc/my.cnf
MySQL 的配置文件。
Apache:
/usr/local/apache2/logs
Apache 的 log 文件。这里建议使用 cronolog 来 rotate Apache 的巨大 log。可以参考我的 cronolog 杂记
/usr/local/apache2/conf
Apache 的配置文件,例如: httpd.conf。还是建议在修改此文本的时候使用“#”号 comment 修改的内容,然后添加需要修改的内容。
PHP:
/usr/local/lib/php.ini
个人觉得这个就够了。如果你设定了 php 的 error log 文件,当然那个也是需要的。
Movable Type:
./MT-3.0D-full-en_ususr/ 和你的 weblog 目录
一般来说 blog 不会太大,不介意的话就整个备份一下。当然最重要的是 ./MT-3.0D-full-en_ususr/db/ 文件夹,里面有所有的数据(如果你没有用 MySQL 作为 MT 的数据存储格式的话)。
Awstats:
/etc/awstats/
Awstats 的配置文件。诸如:awstats.blog.conf
/var/lib/awstats/
Awstats 的分析留档文件。 诸如:awstats082004.blog.txt
MRTG:
MRTG 的输出文件夹。内有图片和诸如 12.34.56.78_12.34.56.78.log 的log文件。
三、使用 tar 和 crontab 等简单工具备份。
以下是使用 tar 的脚本,去掉了多余的说明部分。 您也可以点击这里下载并修改以适合自己的系统。在脚本中我尽量用更多的方法来进行备份。在实际应用中可以将步骤更加简化。更多关于 tar 的参数请看 man tar
#!/bin/sh
# Date format: 20040626
DATE=`date -d yesterday +%Y%m%d`
# MySQL version & directory
MYSQL_VERSION=”4.x.x”
MYSQL_DIR=”/usr/local/mysql/data”
# MT Blog directory
MTBLOG_DIR=”/path-to-mt/db/”
# Backup directory & Backup Filelist
BACKUP_DIR=”/path-to-backup/backupfile”
BACKUP_FILELIST=”/path-to-backup/filelist”
# Backup MySQL
printf “Backup MySQL data directory, please wait…\n”
tar -zpcvPf $BACKUP_DIR/mysql-standard-$MYSQL_VERSION-data-$DATE.tgz $MYSQL_DIR | grep “tar:”
printf “Done! The new backup file is: $BACKUP_DIR/mysql-standard-$MYSQL_VERSION-data-$DATE.tgz\n\n”
# Backup MT Blog
printf “Backuping the MT3.0 Weblog data directory, please wait…\n”
tar -zpcvPf $BACKUP_DIR/MT-db-$DATE.tgz $MTBLOG_DIR | grep “tar:”
printf “Done! The new backup file is: $BACKUP_DIR/MT-db-$DATE.tgz\n”
这里引用了『Linux 备份与恢复速成指南』中的一个小技巧,将文件列表写入一个文件进行操作。查看我的Filelist。
以下是一个文件列表的例子:
/etc
/var
/home
/usr/local
/opt (有时会是空目录)
以下解释引自『Linux 备份与恢复速成指南』:
请注意 tar -T(或 files-from)命令不能接受通配符。文件必须明确地列出。上面的例子展示了一种单独地引用文件的方法。您还可以执行脚本来搜索系统,然后建立一个列表。下面就是这样一个脚本的例子:
#!/bin/sh
cat MyFiles > TempList
find /usr/share -iname *.png >> TempList
find /tmp -iname *.iso >> TempList
tar -cpzMf /path-to-backup/backupfile -T TempList
上面的脚本首先将 MyFiles 中的所有现有文件列表复制到 TempList。然后它执行两个 find 命令来搜索文件系统中匹配某个模式的文件,并将它们附加到 TempList。第一次是搜索 /usr/share 目录树中以 .png 结尾的所有文件。第二次是搜索 /tmp 目录树中以 .iso 结尾的所有文件。在建立好列表之后,tar 然后在文件设备 /dev/st0 (第一个 SCSI 磁带设备)上创建 一个新的归档文件,该文件使用 gzip 格式来压缩,并保留所有文件权限。该归档文件将跨越多个卷。要归档的文件的名称将从 TempList 文件中提取。
四、适用于 log 和数据库的增量备份(incremental backup)。
对于庞大的 log 或者 数据库文件,每天进行完全备份似乎不是很能合理高效地实现备份工作。所以在较短的时间周期内,适用增量备份(incremental backup)会是一个不错的选择。
tar 并不是最好的增量备份工具
tar 并不是最好的增量备份的工具,但是它也可以实现增量备份。参照 『The tar backup program』中的脚本可以实现这个操作。
简单地介绍一下其原理:
首先,制作一个完全备份的时间点文件,例如 “full-date”。其中写入某次完全备份的时间点,例如 echo $NOW > full-date。
然后在自定的时间循环期内(例如一周),每次和完全备份时间点(full-date)对比后进行增量备份。
其中最关键的一个语句就是:
tar –newer $full-date -zcpf $BACKUPDIR/$BACKUPFILE-$NOW.tgz $DIRECTOIES
其结果就是,在一周中会产生 6 个独立文件,其内容是前一天内新增的内容。以下是一个例子:
[root@deep] /# ls -l /backups/
total 22217
-rw-r–r– 1 root root 10731288 Feb 7 11:24 deep-01Feb.tar << 每月月初一次完全备份
-rw-r–r– 1 root root 6879 Feb 7 11:24 deep-Fri.tar << 每天的增量备份
-rw-r–r– 1 root root 2831 Feb 7 11:24 deep-Mon.tar
-rw-r–r– 1 root root 7924 Feb 7 11:25 deep-Sat.tar
-rw-r–r– 1 root root 11923013 Feb 7 11:24 deep-Sun.tar << 每周一次完全备份
-rw-r–r– 1 root root 5643 Feb 7 11:25 deep-Thu.tar
-rw-r–r– 1 root root 3152 Feb 7 11:25 deep-Tue.tar
-rw-r–r-
- 1 root root 4567 Feb 7 11:25 deep-Wed.tar
drwxr-xr-x 2 root root 1024 Feb 7 11:20 last-full
tar 中几个开关的简介:
The c option specifies that an archive file is begin created.
The p option preserves permissions; file protection information will be remembered.
The N or newer option does an incremental backup and only stores files newer than DATE.
The f option states that the very next argument will be the name of the archive file or device being written.
The z option specifies that an gzip file will be created.
The u option can APPEND more files to a tarball file.
注意:-u 开关并不是增量备份,而是往原有的 tar 包里面添加新的文件。
fbackup is a better choice
在 HP 的论坛上,有关于增量备份的讨论--“Incremental “tar” Backup in HP-Ux”。但是因为我不是 HP 的系统,tar 已经可以满足现有的备份需求。
五、使用 ssh 实现安全网络远程备份。
[很抱歉,此段笔者没有试验环境,现在之能添加几篇关于 ssh 远程传送的文章。等到经过试验后,我会添加具体内容。]
33.8. Backing up and restoring over the network
轻松进行自主的、安全的、分布式网络备份
六、个人使用的 e-mail 简单备份。
由于 Yahoo!、Google、Hotmail 相继推出了 1-2G 的邮箱,因此可是试着使用带有文件附件的 E-mail 来传输小于各个邮箱的单封信件上限大小的文件。 具体需要用到一些诸如 uudecode 的命令,所以需要先安装一个 Sharutils 。 我在编译中遇到一些简单的错误,这里是我修改过的 Sharutils。
在命令行下发送带附件的邮件时,还是建议使用诸如 MUTT 的 MUA,请查看我的 MUTT 的安装失败经历,也许对新装的用户有所帮助。
安装完毕后,可以使用 Mutt 的命令行一行解决问题。首先先写一个邮件文本 mailcontent.txt。
# cat mailcontent.txt | mutt -s “mailtitle” -a attachfile1 mail@address
结合上面的 shell 脚本,如果你有企业级邮箱的话,不妨也试试这种方法。仅供参考。
分类 : 技术文摘 | 发表时间 09-03-2006
linux/unix入侵思路
文章作者:Ocean2000
对于很多的新手来说能进入一个linux/unix的机器,可以代表自己技术的一次提高吧,但是早已习惯了win系列操作系统,有时候面对*nix时,可能会有点手忙脚乱。本人也是一个菜鸟,很幸运的时我第一次进入一个服务器便是redhat的。那是某个高手留下的后门,居然让我有了一次免费学习的机会的。后来学的东西多了,可是由于自己的破电脑装不了linux,接触这方面的资料,却不能去实践,所以便尝试着利用别人的资源。。。(有点不道德的意思,呵呵~)
关于*nix的入侵,有很多的资料可以查询,这里我讲点自己的感受吧。其实对于一些人来说,那些根据服务软件的漏洞自己编写,或者利用download原代码编译溢出,就很方便。但是对于很多受技术和硬件条件限制的人,可能这是不容易实现的。个人感觉入侵的思路可以分为三大部分:破解,漏洞溢出,利用程序和文件配置的问题。现在的当务之急就是先找到一个比较好的肉鸡要紧~,所以像我这样的菜鸟想到了—暴力破解!
我个人把暴力破解分两种:一,深度意义上的,是对于特定的机器和上面的用户进行的破解,这个可能需要很长的时间投入,包括知道一些用户名的和不知道到信息的。所以通常只对那些有意入侵的机器实施。二,广度意义上的,是对一段甚至很多的ip进行规模性的弱密码破解,其实主要目的是用来找个好肉鸡。因为破解必然要留下很多的痕迹,所以不要忘了保护自己哦~~,想到破解我就想起ftp,这个最方便了,如果可以自己写个合适的多线程程序最好,如果实现不了网上的程序很多,建议用溜光的程序(速度比较快),其次是21killer(黑白上有,就是速度不够快)也不错。如果机器的速度没有问题,用sss进行也可以,如果有自己的字典更好,没有的话我觉得21killer的不错。找好目标,配置好软件,你就可以漫漫的等了。。。。。。好!~出来了~。从可行性方面来讲,这个方法比较好。因为只要愿意,必然可以得到你想要的东西,但是基本上你不要对这些帐户的权限有太多的奢望。不过对于我们来说已经足够了。*nix系统,有了ftp的帐号基本上就等于可以进入主机了。对了低版本的sunos和solaris,可以利用自带ftp的漏洞得到它的帐号,然后破解,别的机器可以试试finger服务。至于pop3,和stmp以及一些数据库如mysql等的破解同理。。需要密码的web网页等也都差不多,只不过换个程序而已。
从ftp的破解我们知道,入侵的第一步就是要找到目标,即扫描。扫描的主要目的就是得到主机和它对外服务方面的信息,它的端口及对应服务,服务软件,及其版本,服务的附属软件,及其版本,以及软件和系统方面的漏洞。当然能得到它的一些其他方便的重要信息,比如finger得到用户信息等更好。软件和系统方面的漏洞几乎出现在所有的*nix版本的(最新的少),并不是所有的漏洞资料,扫描软件都可以找到,很多是需要我们去试的。比如sun的telnetd漏洞redhat的wftp,openssl,rpc方面的等等很多。对于所有的人来说sun的telnet,因为lion的程序显的轻而易举。所以不会编译原代码的新手可以试试这个。。漏洞的资料网络上有很多,原代码也一样。了解最新的漏洞信息绿盟是个不错的地方,当然如果你的英文好的话,可以去国外的黑客站点走动,毕竟国外的技术水平比我们高。也有很多对于学习很有用的资料。事实上有很多厉害的角色就是这方面的工夫做的好,呵呵~。至于共享方面的问题,在入侵内网的时候要经常用到,如果需要的话可以自己参考网络上的资料。
但是有时候碰到一些安全做的很不错的主机时,我们更多的就是从80端口的web服务做仔细分析入手了,毕竟这个东西的安全性最难做好了,首先是服务软件,比如apache的漏洞出来挺长时间了,可是有漏洞的机器依然不少。cgi的漏洞更是不得了,至于网站上面的一些论坛,留言板,以及一些商务的软件。如果可以找到他们的原代码,那么再安全的主机都会出事。有时候一些人甚至都是按默认的方式安装的,连readme.txt这样的东西都留着让你看,所以问题就更多了。曾经有这么一次经历。有一台机器,开22和80,3306端口。经过扫描,和测试发现22和3306没有什么可以利用的,只有80了,但是它的cgi也没有什么问题,又不是一个大的网站,没有什么论坛,等附属的软件。本来想放弃的,可是发现有一个.bash_history的文件可以访问!!!这个文件是主机操作的保存文件。让我们来看看上面的一些东西:
…..
cd /www/php/
ls
cat login.php
……
mysql -u wwwroot -p www@avg
……
上面这段不但记录了用户在机器上的行为,还记录下了myaql的用户名和密码!!~还等什么??先用alpha连一下ssh,发现用户名密码一样是机器的超级用户。下面的事我就不用说了,不过留下后门,擦日志不要忘了。我们再来分析一下这个例子,其实管理员对cgi程序的安全性做的不错,看看php原代码也没有什么可以利用的。但是因为一时疏忽,忘了这个.bash_history一切的劳力都白花了,即使没有留下用户,密码。让别人轻易的知道机器上的所有行为信息,离被入侵也只是一个时间问题。如果发现一台机器实在没有什么可以利用的时候,建议你试试这个网段的ip可能会找到一些意想不到的信息,尤其是规模较大的网站。
以上只是一个新手的一些总结,因为现在没有很多的具体实例,所以有点纸上谈兵的味道,但是我觉得我们最重要的事不是看别人如何去入侵,主要是了解别人的分析思路和方法。有待提高的只是我们的技术基础。个人感觉不仅仅是linux/unix,很入侵的基本思路都可以通过破密码;对系统,软件漏洞远程溢出;以及对具体服务的分析(如web)来实现目的。注:建议入侵不要拿国内的主机做实验,否则后果自负。
分类 : 技术文摘 | 发表时间 08-03-2006
作者 :翁驰原
这里先引用Charly的Windows2000下安装J2EE和部署J2EE应用程序中的部门内容
1. 安装
可以从以下网址下载一个J2EE(j2sdkee-1_3-beta2-win.exe):http://java.sun.com/j2ee/j2sdkee-beta/index.html。也许你已装了旧版的J2EE SDK 产品,如果是,在安装新下载的J2EE之前请先卸载或删掉旧版的J2EE SDK。运行j2sdkee-1_3-beta2-win.exe,按安装步骤安装好J2EE。这里假设你的J2EE安装在:C:\j2sdkee1.3 目录下。
2. 设置环境变量
在运行J2EE SDK之前,你必须设置以下环境变量:
J2EE_HOME – 你的J2EE SDK所安装的目录。如本例中的:C:\j2sdkee1.3 。
JAVA_HOME – 你的Java 2 SDK 所安装的目录。
PATH – 设置为你安装J2EE SDK目录下的bin目录。如本例的的:C:\j2sdkee1.3\bin 。
ClassPath – 增添%J2EE_HOME%\lib\j2ee.jar到ClassPath中。本例中也可写为:C:\j2sdkee1.3\lib\j2ee.jar
3. 运行J2EE
Dos命令行敲入以下命令:
%J2EE_HOME%\bin\j2ee -verbose
显示以下信息表示运行成功:(不同的版本显示可能不同)
J2EE server listen port: 1050
Naming service started:1050
Binding DataSource, name = jdbc/EstoreDB, url = jdbc:cloudscape:rmi:CloudscapeDB;create=true
Binding DataSource, name = jdbc/DB2, url = jdbc:cloudscape:rmi:CloudscapeDB;create=true
Binding DataSource, name = jdbc/Cloudscape, url = jdbc:cloudscape:rmi:CloudscapeDB;create=true
Binding DataSource, name = jdbc/InventoryDB, url = jdbc:cloudscape:rmi:CloudscapeDB;create=true
Binding DataSource, name = jdbc/DB1, url = jdbc:cloudscape:rmi:CloudscapeDB;create=true
Binding DataSource, name = jdbc/XACloudscape, url = jdbc/XACloudscape__xa
Binding DataSource, name = jdbc/XACloudscape__xa, dataSource = COM.cloudscape.core.RemoteXaDataSource@330913
Starting JMS service … Initialization complete – waiting for client requests
Binding : < JMS Destination : jms/Queue , javax.jms.Queue >
Binding : < JMS Destination : jms/Topic , javax.jms.Topic >
Binding : < JMS Cnx Factory : jms/TopicConnectionFactory , Topic , No properties >
Binding : < JMS Cnx Factory : TopicConnectionFactory , Topic , No properties >
Binding : < JMS Cnx Factory : jms/QueueConnectionFactory , Queue , No properties >
Binding : < JMS Cnx Factory : QueueConnectionFactory , Queue , No properties >
Starting web service at port:8000
Starting secure web service at port:7000
Apache Tomcat/4.0-b4-dev
Starting web service at port:9191
Apache Tomcat/4.0-b4-dev
J2EE server startup complete.
启动成功后,在IE浏 览 器 中 访 问 HTTP://localhost:8000 可 以 看 到 默 认 的 主 页 信 息 。
4. 编写和运行HelloWorld程序
J2EE应用程序一般使用RMI(远程方法调用)来完成客户端与服务器的交互。当然,其间也少不了EJB的作用。本例为一个J2EE应用程序:客户端向服务器发送一个问候语:“Hello,Remote Object”。服务器收到该问候语后打印该问候语,并返回一字符串作为应答。客户端收到此应答后打印它。
RemoteInterface.java
/**
* 第一步:
* 定义一个新的接口继承javax.ejb.EJBObject。新定义的接口中的每一个方法都必须抛出
* java.rmi.RemoteException异常。
*/
public interface RemoteInterface extends javax.ejb.EJBObject
{
public String message(String str)throws java.rmi.RemoteException;
}
RemoteObject.java
/**
* 第二步:
* 定义一个类来实现javax.ejb.SessionBean接口。并在该类中实现在第一步中编写的接口中所定义的方法。
*/
public class RemoteObject implements javax.ejb.SessionBean
{
public String message(String str)throws java.rmi.RemoteException
{
System.out.println(“Remote Object Received From Client: \”"+str+”\”"); //打印(从客户端)接收到的字符串。
return “Hello,I’m Remote Object,I received your message: \’”+str+”\’”; //返回一应答字符串。
}
public RemoteObject() {}
public void ejbCreate() {}
public void ejbRemove() {}
public void ejbActivate() {}
public void ejbPassivate() {}
public void setSessionContext(javax.ejb.SessionContext sc) {}
}
RemoteHome.java
/**
* 第三步:
* 定义一个类继承javax.ejb.EJBHome 。
*/
public interface RemoteHome extends javax.ejb.EJBHome
{
RemoteInterface create()throws java.rmi.RemoteException,javax.ejb.CreateException;
}
Client.java
/**
* 第四步:
* 定义客户端类。
*/
public class Client
{
public static void main(String[] args)
{
try
{
javax.naming.Context initContext=new javax.naming.InitialContext();
Object obj=initContext.lookup(“HelloWorld”); //远程查找,由名字得到对应的对象。
RemoteHome home=(RemoteHome)javax.rmi.PortableRemoteObject.narrow(obj,RemoteHome.class);
RemoteInterface remote=home.create();
String receiveFromRemote=remote.message(“Hello,Remote Object!”); //远程方法调用
System.out.println(“Client Received From Remote Object: \”"+receiveFromRemote+”\”");
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
假设以上四个Java文件存于C:\HelloWorld\下,编译它们如:C:\HelloWorld>javac *.java 。
5. 部署应用程序
启动Application Dopolyment Tool:新开一个Dos窗口,键入以下命令,%J2EE_HOME%\bin\deploytool 。该工具启动速度可能比较慢,要耐心等待。启动成功后会出现主界面(此时不要关闭Dos窗口)。在该界面中选 择 File菜 单 ,再选New Application项。在 Application File Name 输 入 :C:\HelloWorld\HelloWorld.ear 。在 Application Disply Name 输 入 你所喜欢的显示名如:HelloWorld。点 击 OK,在主界面的树形结构Files–>Applications下将增加新的一项:HelloWorld。这意味着产生了一个新的应用程序。接下来我们要做的就是部署该应用程序。在主界面的树形结构下选中HelloWorld,然后再在主界面的File菜单中选取New–>Enterprise Bean,在弹出的名为“New Enterprise Bean – Introduction”窗口中选取Next跳过第一步,在接下来的一步中,Create New EJB File in Application项中选HelloWorld,在EJB Display Name中填上你喜欢的名字如:Hello World EJB,点击Edit按钮,在弹出的窗口中,Start Directory中填:C:\HelloWorld\,在Available Files中展开树形结构C:\HelloWorld\,选取RemoteInterface.class、RemoteObject.class、RemoteHome.class、Client.class四项,点Add按钮添加,然后按OK确定。此时在Contents框中增加了该四个class。点Next进入下一步。Session项选Stateless,意为不保存session状态。Enterprise Bean Class选RemoteObject。Enterprise Bean Name中填上你喜欢的名字如:Hello World Bean。Remote Home Interface中选RemoteHome,Remote Interface中选RemoteInterface。选Next进入下一步。接下来的步骤可直接点Finish。这时主界面的树形结构中Files–>Application–>Hello World中将出现Hello World EJB–>Hello World Bean子项。在主界面的树形结构下选中Hello World,然后再在主界面的Tools菜单中选取Deploy,将弹出新的窗口名为“Deploy Hello World – Introduction”。Object to deploy中选Hello World,Target server中选localhost,选中Retuen Client Jar,在Client Jar File Name中填上:C:\HelloWorld\HelloWorldClient.jar。选Next进入下一步,在Application框的JNDI Name框中双击并填上HelloWorld,注意必须与Client.java中Object obj=initContext.lookup(“HelloWorld”)的“HelloWorld”保持一致。点Next进入下一步。点Finish完成。这时将出现Deployment Progress窗口。如果有误,该窗口将出现异常信息。如果一切正常,点OK便完成了部署工作。
6. 运行应用程序
新开一个Dos窗口。进入C:\HelloWorld\Classes目录下运行:C:\ HelloWorld\Classes>java -
classpath %J2EE_HOME%\lib\j2ee.jar;.;HelloWorldClient.jar; Client 。运行成功则出现如下信息:Client Received From Remote Object: “Hello,I’m Remote Object,I received your message: ‘Hello,Remote Object!’” 。而服务端Dos窗口(j2ee -verbose)中出现如下信息:Remote Object Received From Client: “Hello,Remote Object!” 。
好,到了这里大家应该都开始了一个真正的j2ee程序了吧?
可是现在有一个问题,ejb和j2ee的优点是在哪儿?什么是分布式的,在一台机器上那还叫什么分布系统吗?是不是有点可笑》现在下面我就教大家怎么把上面的程序变成分布式的。
如果您直接把client.class copy 到其他的机器上,肯定执行不了。因为你还需要一个home和remote接口,这两个文件在什么地方呢?在helloclient.jar这个包里面!:)所以你还需要这个包。把那个包也copy过去,执行一下,还是不可以。因为你的jndi名,只是个名字,程序怎么知道你要连的服务器在哪儿呀?所以原来的client代码你需要做如下的改动。
改成
Properties env = new Properties();
env.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY, “com.sun.jndi.cosnaming.CNCtxFactory”);
env.put(javax.naming.Context.PROVIDER_URL,”iiop://wcy:1050″);
//javax.naming.Context initContext=new javax.naming.InitialContext(env);
Context initContext = new InitialContext(env);
Object obj=initContext.lookup(“HelloWorld”); //远程查找,由名字得到对应的对象。
RemoteHome home=(RemoteHome)javax.rmi.PortableRemoteObject.narrow(obj,RemoteHome.class);
RemoteInterface remote=home.create();
String receiveFromRemote=remote.message(“Hello,Remote Object!”); //远程方法调用
System.out.println(“Client Received From Remote Object: \”"+receiveFromRemote+”\”");
重新编译javac *.java成功后。把这个新的类copy到其他的机器上
打入java -classpath %J2EE_HOME%\lib\j2ee.jar;.;HelloWorldClient.jar; Client
分类 : 心情随笔 | 发表时间 25-02-2006
在Vista中,我们可以看得到新版本的IIS 7.0看上去比6.0有了很大的改进。
你现在可以自由开启IIS 7.0,并在个人电脑上架设自己的网站。
下面是开启方法:
1. 热键WinKey+R—输入”cmd.exe” (不带引号)。
2. 输入下列命令:
start /w pkgmgr.exe /iu:IIS-WebServerRole;IIS-WebServerFeature;IIS-FTPServerFeature
然后,就会自动安装IIS 7.0。
而且,IIS 7.0已经完全组件化,类似于Apache。
分类 : 技术文摘 | 发表时间 20-02-2006
利用Apache中的mod_gzip模块,我们可以利用gzip的压缩算法来对Apache服务器发布的网页内容进行压缩后再传输到客户端的浏览器。如果是纯文本的内容,效果非常明显,大约可以压缩到原来的30%-40%,使用户的浏览速度大大加快。
Gzip需要客户端浏览器支持,目前大部份浏览器都支持gzip,如IE,Netscape,Mozilla等,所以这种方法值得一试。我们可以利用PHP中的预定义变量$_SERVER[‘HTTP_ACCEPT_ENCODING’]来判断客户端浏览器是否支持gzip。
gzip1.php
if(ereg(‘gzip’,$_SERVER['HTTP_ACCEPT_ENCODING'])) {
//浏览器支持
} else {
//浏览器不支持,输出其它内容
}
?>
接下来我们对上面这个PHP程序进行扩展,使用ob_start(ob_gzhandler)来将网页内容压缩,存入缓冲并发送给支持gzip的浏览器,浏览器会自动将压缩后的内容解压,显示。
gzip2.php
define(‘MAX’,100);
if(ereg(‘gzip’,$_SERVER['HTTP_ACCEPT_ENCODING']))
{
//浏览器支持gzip,将内容压缩并缓冲输出
ob_start(“ob_gzhandler”);
$output = ”;
for($i=0;$i<=MAX;$i++)
{
$output .= “This is line $i “;
}
echo “浏览器支持gzip压缩输出”;
echo $output;
}
else
{
//浏览器不支持,直接输出
for($i=0;$i<=MAX;$i++)
{
$output .= “This is line $i “;
}
echo “浏览器不支持gzip压缩输出 “;
echo $output;
}
?>
使用gzip压缩生成的网页的HTTP头信息与一般的网页相比中会多出这样的信息:
Content-Encoding: gzip
Content-Length: 270
如果你想得到更详细的信息,请参看mod_gzip项目主页:
http://sourceforge.net/projects/mod-gzip/
类似地,我们也可以利用mod_deflate,压缩率比mod_gzip略低一些。调用zip函数需要耗用服务器内存,所以要慎用,视需求而定。
分类 : 娱乐休闲 | 发表时间 20-02-2006
Visual Age for Java是IBM所开发的Java IDE开发环境。早在几年前,就已经占了Java开发平台的半壁江山,而近来已有好长时间没出新版本了,原因在于IBM全心投入了Eclipse项目的研究,好多Java开发者肯定也注意到了这一点。Eclipse是一个开发源码项目,它其实是Visual Age for Java的替代品,其界面跟先前的Visual Age for Java差不多,但由于其开放源码,任何人都可以免费得到(官方网站在http://www.eclipse.org/),并可以在此基础上开发各自的插件,因此越来越受人们关注。近期还有包括Oracle在内的许多大公司也纷纷加入了该项目,并宣称Eclipse将来能成为可进行任何语言开发的IDE集大成者,使用者只需下载各种语言的插件即可。
我们且不管Eclipse能否成为真正的集大成者,但据笔者在J2EE开发上的使用,Eclipse就已锋芒毕露,比先前的Visual Age for Java强劲了许多,更显得即插即用,下载一个Tomcat插件,就能很容易的调用外部独立安装的Apache Tomcat进行JSP、Servlet的调试。还是先睹为快,来看看Eclipse加上Tomcat来跟踪调试Servlet有多简单吧!
我们需要先到http://www.sysdeo.com/eclipse/tomcatPlugin.html去下载Tomcat插件,下载后直接解压缩到Eclipse的plugins目录下。之后再启动Eclipse ,在IDE中选择“Window”菜单的“Customize Perspective…”,展开弹出窗口的Other结点,可以看到下面有Tomcat选项,打上钩按“OK”关闭窗口。做完了这一步,在IDE的工具栏就会有变化,是不是兴奋地看到了可爱的Tomcat小猫图标呢!不过别急着去按小猫按钮,还需要到“Window”菜单的“preferences”去做些设置,正确选择你所安装的Tomcat版本,指定Tomcat主目录和Tomcat的server.xml配置文件,然后展开Tomcat,选下面的JVM Setting,选择JRE为“Detected VM”,确认无误后按“OK”关闭窗口即可。到这儿,所有的配置工作都做完了,按下小猫图标启动Tomcat,就可以看?onsole窗口出现“Starting service Tomcat-Standalone……”等Tomcat启动信息了。
启动成功后,我们做一个简单的Servlet加以测试。选IDE的“File”下面的“Project”菜单,注意要选择“Tomcat Prject”,然后按“Next”直到结束,其间根据窗口提示信息输入Servlet名称、工作目录等信息,以及选择是否自动更新server.xml。为简单起见,我们选择自动更新server.xml文件,虚拟目录为名ServletDemo。在工程上加入自己的Servlet类,作为示例,笔者定义了一个简单的TestServlet类,来计算5!(5的阶乘)等于多少,Servlet代码和web.xml部署描述器如下所示:
public class TestServlet extends HttpServlet {
private static final String CONTENT_TYPE = “text/html; charset=GBK”;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType(CONTENT_TYPE);
PrintWriter out = response.getWriter()
int n = 1;
for (int i = 1; i <= 5; i++) {
n *= i;
}
out.println(“<html>”);
out.println(“<head><title>TestServlet</title></head>”);
out.println(“<body>”);
out.println(“<P>5! = ” + n + “</P>”);
out.println(“</body></html>”);
out.close();
}
}
<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE web-app PUBLIC “-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN” “http://java.sun.com/j2ee/dtds/web-app_2_2.dtd”>
<web-app>
<servlet>
<servlet-name>TestServlet</servlet-name>
<servlet-class>TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/TestServlet</url-pattern>
</servlet-mapping>
</web-app>
保存好上面的代码和XML描述文件,在浏览器中键入“http://127.0.0.1:8080/ServletDemo/TestServlet”,就可以看到 “5! = 120”了,是吗?
下面我们在“n *= i;”那一行设一断点来跟踪计算过程。在浏览器窗口中按刷新按钮,然后返回Eclipsep窗口,是不是在在断点那一行出现了蓝条呢?下面的过程熟悉Visual Age for Java的读者应该明白了吧,按F6跟踪到下一语句,按F5跟进调用过程。
分类 : 技术文摘 | 发表时间 09-02-2006
——————————————————————————–
1、什么是jabber server;
Jabber 是著名的 Linux 即时通讯服务服务器,它是一个自由开源软件。什么是即时通讯服务器呢?就是类似AIM,ICQ,MSN或Yahoo Message 类似的服务器;只是Jabber能让我们自己架即时通讯服务器,可以在Internet上应用,也可以在局域网中应用;
Jabber 最有优势的就是他的通信协议。他可以和多种即时通讯对接。比如有第三方插件,能让jabber用户和MSN 、Yahoo Messager、ICQ….. 对聊;
下面是来自 jabber.org官方的原文
Jabber is best known as “the Linux of instant messaging” — an open, secure, ad-free alternative to consumer IM services like AIM, ICQ, MSN, and Yahoo (see the IM quickstart). Under the hood, Jabber is a set of streaming XML protocols and technologies that enable any two entities on the Internet to exchange messages, presence, and other structured information in close to real time. Jabber technologies offer several key advantages:
1.1、我们能否自己架设jabber server;
我们自己来架Jabber server 是可能的;jabber.org 上提供了几乎所有的文档资料、服务器端及客户端;如果您想拥有一个自己的即时消息服务器,那就自己动手吧;jabber 能满足您架自己的即时通讯服务器;如果您是高手,说不定也会弄一个类似TT公司呢;
1.2、jabber 应用范围;
jabber server 能在局域网中应用,当然也一样架一台internet 的jabber server 为您自己的用户服务;服务器端支持几乎所有的操作系统,从Linux、MACOS到Unix类的,同样也支持Windows平台;客户端也是一样,无所不包,无所不有… …
服务器端: Jabber Servers
客户端: Jabber Clients
2、jabber server的简单架设,安装篇;
我是在局域网中架设并测试的,而且功能也极为简单、安全性也没有评测(或者说没有安全性),就是简单的注册和相互通讯(聊天);
2.1、Jabber Server 测试架设环境和用户认证环境;
Slackware 10.1 ,其实在哪个发行版都是一样的,只要按官方文档上面说的做,一般都会成功;好象没有不成功的呢;我用的是mysql认证,也就是说用户注册和认证数据库调用的;当然jabber 支持多种认证,比如PostgreSQL、Berkeley DB … …
因为我不懂其它的认证方式,我对Mysql 也只是了解一点点;所以我就用了Mysql的方法;
另外如果在局域网中架Jabber Server ,得有DNS服务器;也就是说局域网中的机器相互能通过hostname 来访问;如果您不懂什么是DNS,或者不会DNS 的架设。我感觉也没有什么,现在几乎所有的路由器都有这个功能,点几下鼠标就能弄得起来;如果你只一台机器,我看架Jabber Server 也没有必要了;
所以本文架设Jabber Server 的前提条件是你懂DNS(至少你有一个路由器,并且能在路由器上指定DNS来解析每台机器的hostname);另外您还要懂一点Mysql服务器的架设和简单的应用;
2.2、Jabber Server 版本的选择;
我用的Jabber Server 的版本是 jabberd-2.0s10.tar.gz ;
http://jabberd.jabberstudio.org/2/#download
2.3、为Jabber Server添加一个系统用户,用来管理服务器的启动等;
一般的说来root超级用户是能对所有服务器程序进行管理的;但这样做有点不安全;所以尽可能的少用root权限来启动一个服务器;
[root@localhost ~]# groupadd jabber 注:添加jabber用户组;
[root@localhost ~]# useradd jabber 注:添加 jabber用户;
至于设置不设置jabber用户的密码,您看着办。如果您当前操作的普通用户,想通过su 命令切换到 root用户下,然后再通过 su jabber ,这样就不用密码也行;如果您认为这样切来切换去的有点麻烦,那你就设置一下jabber用户的密码;
[root@localhost ~]# passwd jabber 注:设置jabber 用户的密码;
2.4、编译安装Jabber Server所需要的软件环境;
在Linux中编译安装Jabber Server 需要编译工具;比如gcc 之类的,如果您没有编译环境, 就要找出自己所用发行版的光盘,把这些安装上;
Jabber Server 依赖 openssl ,您也得安装上;在您的Linux发版的安装盘中也应该有;
Jabber Server 依赖 Mysql ,因为我们要用Mysql 存储用户资料;这个不可缺少吧;在发行版的光盘也有;
libidn 这个软件包也在各大发行版中有;自己找找看;也可以自己编译安装;
参考文档:《Jabberd 2 Installation and Administration Guide》
2.5、解压编译安装Jabber Server;
[root@localhost ~]# tar zxvf jabberd-2.0s10.tar.gz
[root@localhost ~]# cd jabberd-2.0s10
[root@localhost jabberd-2.0s10] # ./configure –enable-ssl –enable-mysql –enable-idn \
–with-extra-include-path=/usr/include/mysql \
–with-extra-library-path=/usr/lib/mysql \
–prefix=/opt/jabberd2
[root@localhost jabberd-2.0s10] # make
[root@localhost jabberd-2.0s10] # make install
注意: 在./configure 中要指定您的Mysql的include所在的位置,也要指定 mysql的lib所在的位置;您应该知道这些东西在哪里;我的mysql 的include和 lib分别是/usr/include/mysql和/usr/lib/mysql
–prefix 用来指定把jabberd安装在哪个位置上。我是安装到了 /opt/jabberd2目录中;自己看着办吧。这样指定比较方便。当我们不需要jabberd的时候,就直接删除 /opt/jabberd2目录就行了。就是重装也方便;卸载就更方便了;
3、jabber server的简单配置;
3.1、创建Jabber Server 进程存放目录pid及日志存放目录log
[root@localhost ~]# mkdir -p /opt/jabberd2/var/jabberd/pid
[root@localhost ~]# mkdir -p /opt/jabberd2/var/jabberd/log
[root@localhost ~]# chown -R jabber:jabber /opt/jabberd2/var
说明:改变/opt/jabberd2/var权限,让用户jabber可以写数据到/opt/jabberd2/var及下级目录;
3.2、有关Mysql数据库的操作;
在我们的解压编译的Jabber Server 目录中 jabberd-2.0s10 ,有一个目录tools,里面有一个文件db-setup.mysql,就是创建数据库的脚本;
首先我们得启动Mysql 服务器;这个过程省略;
然后我们导入 db-setup.mysql;
[root@localhost jabberd-2.0s10] # cd tools
[root@localhost tools] # mysql -uroot -p < db-setup.mysql
Enter password: 在这里输入Mysql数据库的管理密码
经过上一步,我们就导入了一个jabberd2的数据库;下一步我们要进行授权;让jabberd2 数据库有一个专门的管理用户;
[root@localhost tools] # mysql -uroot -p
Enter password: 注:在这里输入Mysql数据库的管理密码
然后我们在 mysql 数据库中运行下面的一条指令;
mysql>GRANT select,insert,delete,update ON jabberd2.* \
to jabberd2beinan@localhost IDENTIFIED by ’123456′;
注解: 其中jabberd2beinan 是jabberd2数据库的管理员,这个可以自己定义;定义你自己喜欢的;其中123456是用户 jabberd2beinan用户的密码;
如果没有问题的话,我们从mysql退出后,就要吧用jabberd2beinan 用户来连接Mysql服务器了;
[root@localhost tools] # mysql -ujabberd2beinan -p
Enter password: 在这里输入jabberd2数据库管理员jabberd2beinan的密码;
mysql> show databases; 注:查看数据库;
+———-+
| Database |
+———-+
| jabberd2 |
| test |
+———-+
2 rows in set (0.0
0 sec)
mysql> quit
3.3、Jabber Server 的配置文件的修改;
以我的安装和配置环境为准,我是安装Jabber Server 在/opt/jabberd2目录中;配置文件在 /opt/jabberd2/etc/目录中;我们需要改的文件,有如下几个;
c2s.xml resolver.xml router-users.xml router.xml s2s.xml sm.xml
我只是简单的说一下我的配置,不一定对,但能用得起来;
注意:所有192.168.1.4的IP都是我架Jabber Server 这台机器的IP,您要根据自己的情况来进行改动;
3.31、c2s.xml 文件
第77行;
localhost
改为
linuxsir
重要:这个是极为重要的,linuxsir是服务器的hostname,并且能被局域网每台机器都能识别的,也就是我们前面所说要自己做DNS,或通过路由器来做解析;一般路由器都有这个功能;这个需要您自己来弄;
第81行;
0.0.0.0
改为
192.168.1.4
277和278行,是Mysql服务器认证的;
jabberd2
secret
改为:下面改动是根据您在Mysql数据库jabberd2授权给你所设置的用户名和密码;
jabberd2beinan
123456
3.32、resolver.xml 文件
不做改动,默认就行;
3.33、router-users.xml 文件
不做改动;如果您要改动,其它文件也要改。这个文档是简单架设。没有考虑的太多;大多是默认的配置;
我的建议是为了安全,你还是改一下用户和密码;也就是下面的;
jabberd
secret
把上面的改一改,最好改的比较安全一点;下面只是一个简单的例子;
jabberd1234
654321
如果router-users.xml中做了改动其它文件中的如下内容也要改动;
127.0.0.1
5347
jabberd
secret
也就是要改动上面的中的
jabberd1234
654321
3.34、router.xml 文件
不做改动,默认就好;
3.35、s2s.xml 文件
第77行;
0.0.0.0
改为
192.168.1.4
3.36、sm.xml 文件
第7行;
这是服务器hostname的设置,您所用的hostname要在局域网中被识别;这就涉及到DNS;现在路由器大多都有指定DNS的功能;这个需要您自己来弄;我的这台机器在路由器上做了DNS后,被指定解析为linuxsir;
localhost
改为
linuxsir
第88、89行;
这两行也是连接Mysql数据库服务器;也要改动;
jabberd2
secret
改为
jabberd2beinan
123456
4、Jabber Server 启动和管理;
我们在前面已经添加了 jabber这个用户,目的就是为了服务的安全性,让这个用户来添加和启动Jabber Server;
当然我们要切换到jabber这个用户,然后让jabber这个用户来启动jabberd服务器;
[root@localhost ~] #su jabber
[jabber@localhost ~] $ /opt/jabberd2/bin/jabberd -D
这个Debug模式运行,如果有什么错误,就能显示出来;如果不行,你就按几下回车,看看是不是有错误发生。如果没有,就Ctrl+C结束运行,然后转为后台运行;
[jabber@localhost ~] $ /opt/jabberd2/bin/jabberd&
[jabber@localhost ~] $ ps -aux |grep jabberd
jabber 7048 12.3 1.2 5072 3184 pts/0 R 05:33 0:00 perl -w -x /opt/jabberd2/bin/jabberd
jabber 7049 2.3 0.5 4656 1452 pts/0 S 05:33 0:00 /opt/jabberd2/bin/router -c /opt/jabberd2/etc/jabberd/router.xml
jabber 7050 0.6 0.4 4552 1252 pts/0 S 05:33 0:00 /opt/jabberd2/bin/resolver -c /opt/jabberd2/etc/jabberd/resolver.xml
jabber 7051 2.0 0.6 4796 1716 pts/0 S 05:33 0:00 /opt/jabberd2/bin/sm -c /opt/jabberd2/etc/jabberd/sm.xml
jabber 7052 0.6 0.5 4644 1340 pts/0 S 05:33 0:00 /opt/jabberd2/bin/s2s -c /opt/jabberd2/etc/jabberd/s2s.xml
jabber 7053 1.6 0.6 4752 1672 pts/0 S 05:33 0:00 /opt/jabberd2/bin/c2s -c /opt/jabberd2/etc/jabberd/c2s.xml
jabber 7055 0.0 0.2 2256 732 pts/0 R+ 05:33 0:00 grep jabberd
说明: 第一行是后台运行;第二行是查看是否jabberd已经启动起来了;如果出现类似上面的提示,这表示jabberd已经运行;
5、Jabber 客户端的应用;
5.1、Jabber 客户端的选择;
对于客户端的选择,您可以用gaim;也可能用其它的,我用的是gaim;请到 Jabber 客户端: Jabber Clients 去找适合自己;
如果您想用gaim ,可以到 http://gaim.sourceforge.net 上去下载;Windows版本和Linux版本都有;如果您用的是Linux,各大发行版都有这个软件包;安装上就行了;
5.2、客户机的DNS配置;
如果您是Linux,就得让/etc/resolv.conf 有DNS主机的设置;比如我的设置是
nameserver 192.168.1.1
192.168.1.1 这行就是DNS服务器的,我用的是路由器,路由器我配置DNS的时候,用的就是这个地址;
如果您是用Windows,也得在网卡设置IP那个界面上,写上这个吧;自己看着办吧;
5.3、Jabber 客户端之一Gaim的使用;
Gaim使用就简单了,我们可以通过Gaim来向局域网Jabber Server 申请ID;
第一步: 添加帐号;
点击[帐号]=>添加=》
协议:选择 Jabber
用户名: 先随便写一个您喜欢的,比如我写是的beinan
服务器:也就是我们前面设置的Jabber Server 那台机器的hostname;我的机器是linuxsir;
资源:不用管他;
密码:自己写一个吧;因为没有注册呢;这个不是重要的;
别名:就是昵称,比如大灰狼之类;
点击[显示主要选项]
Jabber 选项
可用则使用TLS 这个要选中,其它两个是 [强制旧SSL]和[允许不加密流上的纯文本验证],这两个就不要选中了;l
端口:5222
连接服务器:就是Jabber Server所在机器的IP地址,我这台机器是192.168.1.4
代理类型:不用改变,保持原来的状态就行;[使用全局代理设置]
第二步 注册帐号;
这些都添写好了,再点击[注册];
然后写上用户名和密码;他会提示注册成功;
第三步 修改帐户
我们还得从头再来,点击[帐户],然后选中您刚才注册的成功的那个帐户;点击修改;就按前面所说的来修改;只是在[显示主要选项]中的连接服务器改一改就行了。因为这个是空的;要改为你自己服务器的IP地址就行了;我的服务器是192.168.1.4。我就改成了192.168.1.4;
至于Windows用户的Gaim的使用同理;
6、一些疑问;
6.1、jabberd2能否和MSN、Yahoo Messager、ICQ等用户对聊功能;
能的;但要安装一些插件;在我看来这些插件有点难度。因为我测试过一些插件;但不能解决一些依赖关系;等解决了依赖关系,却不能应用;错误是的。
http://www.jabber.org/software/components.shtml
6.2、jabberd2能否支持客户端传文件功能;
如果是默认安装是不支持的,这也需要第三方插件;目前有三种方法吧;在jabber的主页上说,如果想要实现相互传文件功能,与客户端有关;我测试了好多种,但还是不行。psi据说是能行,我测试后也不行;可能依靠客户端传文件还是有点难度。或许不久就以解决?
如果通过服务器端解决呢?也是有可能的,有两种方法;proxy65和定义apache dav模块的办法;apache dav模块据说比较简单。但我没有试过。据有关洋人说,不太安全;proxy65的方法也有难度,他依赖太多的东西,比如python 、zope 、twist、pyopenssl … …多多;虽然也能解决依赖关系,
分类 : 编码知识 | 发表时间 20-01-2006
作者: os
http://bbs.islab.org
目录:
一. 介绍
二. 准备
1. 需要的软件包
2. 下载和解压缩Apache HTTP软件包.
3. 下载和解压缩modsecurity软件包.
4. 下载modsecurity规则文件
三. 安装Apache和Modsecurity
1. 安装Apache
2. 安装Modsecurity
四. Modsecurity配置文件
五. 更多
一. 介绍
mod_security是一个集入侵检测和防御引擎功能的开源web应用安全程序(或web应用程序防火墙).
它以Apache Web服务器的模块方式运行, 目标是增强web应用程序的安全性, 防止web应用程序
受到已知或未知的攻击.
本文使用的系统是Redhat linux高级服务器版3, 推荐大家使用modsecurity的最新稳定发行版,
现在是1.8.7, 安装方式是通过DSO(动态共享对象)把mod_security集成到Apache Web Server.
(提示, 本文的步骤在其它linux发行版上也是适用的.)
二. 准备
1. 需要的软件包
1). apache的源代码包
下载地址:
http://apache.justdn.org/httpd/apache_1.3.33.tar.gz
2). mod_security的源代码包
下载地址:
http://www.modsecurity.org/download/modsecurity-1.8.7.tar.gz
3). mod_security基本规则
http://fedoranews.org/jorge/mod_security/mod_security.conf
2. 下载和解压缩Apache HTTP软件包.
建议从apache的官方网站获得可靠的apache HTTP软件包.
下载网址: http://apache.justdn.org/httpd/apache_1.3.33.tar.gz
1) 创建apache软件包存放的目录.
#mkdir -p /usr/local/src/webserver
2) 使用wget命令获得源代码包.
#wget http://apache.tarchive.com/httpd/apache_1.3.33.tar.gz
(如不能下载, 可直接通过浏览器保存或ftp上传到webserver目录)
3) 确认下载软件的完整性.
首先, 我们下载和检查分离的签名文件apache_1.3.33.tar.gz.md5, 然后进行
比较软件包和软件包md5签名文件的md5 checksum.
检查apache_1.3.33.tar.gz.md5内容
# cat apache_1.3.33.tar.gz.md5
MD5 (apache_1.3.33.tar.gz) = 3dfd2c3778f37a2dfc22b97417a61407
检查apache_1.3.33.tar.gz的md5 checksum
# md5sum apache_1.3.33.tar.gz
3dfd2c3778f37a2dfc22b97417a61407 apache_1.3.33.tar.gz
比较上面两个步骤的md5 checksum内容是一致的, 从而可以确认apache软件包
的完整性.
4) 解压缩源代码包, 在webserver目录下会生成一个新的目录apache_1.3.33
#tar zpxf apache_1.3.33.tar.gz
3. 下载和解压缩modsecurity软件包.
建议从modsecurity官方网站获得可靠的软件包.
下载网址: http://www.modsecurity.org/download/index.html
1) 使用wget命令获得源代码包.
#wget http://www.modsecurity.org/download/modsecurity-1.8.7.tar.gz
(如不能下载, 可直接通过浏览器保存或ftp上传到webserver目录)
# ls -al modsecurity-1.8.7.tar.gz
-rw-r–r– 1 root root 313004 Mar 5 23:47 modsecurity-1.8.7.tar.gz
# pwd
/usr/local/src/webserver
2) 确认下载软件的完整性.
首先, 我们下载和检查分离的签名文件modsecurity-1.8.7.tar.gz.md5, 然后进行
比较软件包和软件包md5签名文件的md5 checksum.
下载modsecurity的签名文件
#wget http://www.modsecurity.org/download/modsecurity-1.8.7.tar.gz.md5
检查modsecurity-1.8.7.tar.gz.md5内容
#cat modsecurity-1.8.7.tar.gz.md5
0dd48656e451c711358c097dc80e0369 modsecurity-1.8.7.tar.gz
检查modsecurity-1.8.7.tar.gz的md5 checksum
# md5sum modsecurity-1.8.7.tar.gz
0dd48656e451c711358c097dc80e0369 modsecurity-1.8.7.tar.gz
比较上面两个步骤的md5 checksum内容是一致的, 从而可以确认modsecurity软件包
的完整性.
3) 解压缩源代码包, 在webserver目录下会生成一个新的目录modsecurity-1.8.7
#tar zpxf modsecurity-1.8.7.tar.gz
4. 下载modsecurity规则文件
#cd /usr/local/src/webserver
#wget http://fedoranews.org/jorge/mod_security/mod_security.conf
三. 安装Apache和Modsecurity
1. 安装Apache
请参考文章:
在Redhat Linux 9上通过DSO方式搭建Apache HTTP服务器
http://bbs.islab.org/showthread.php?t=370
注: 在Red Hat 9上安装Apache的步骤亦可用其它系统上.
2. 安装Modsecurity
到modsecurity的apache 1.X 模块目录运行apxs(你必须要root权限才能运行下面命令).
#cd /usr/local/src/webserver/modsecurity-1.8.7/apache1
[root@reakosys apache1]# /www/bin/apxs -cia mod_security.c
gcc -DLINUX=22 -DHAVE_SET_DUMPABLE -I/usr/include/gdbm -DUSE_HSREGEX -fpic
-DSHARED_MODULE -I/www/include -c mod_security.c
gcc -shared -o mod_security.so mod_security.o
[activating module `security' in /www/conf/httpd.conf]
cp mod_security.so /www/libexec/mod_security.so
chmod 755 /www/libexec/mod_security.so
cp /www/conf/httpd.conf /www/conf/httpd.conf.bak
cp /www/conf/httpd.conf.new /www/conf/httpd.conf
rm /www/conf/httpd.conf.new
复制modsecurity规则文件到apache的conf目录
#cd /usr/local/src/webserver
#cp mod_security.conf /www/conf/
创建日志目录
#mkdir – /var/log/httpd
修改apache配置文件
#vi /www/conf/httpd.conf
在文件末尾添加
Include conf/mod_security.conf
注: 到此为止, httpd.conf文件已包含下面三行代码(1,2条为自动, 3条手动添加)
LoadModule security_module libexec/mod_security.so
AddModule mod_security.c
Include conf/mod_security.conf
然后重启你的Apache Web Server..
# apachectl restart
/usr/sbin/apachectl restart: httpd not running, trying to start
/usr/sbin/apachectl restart: httpd started
检查一下是否生成日志文件
# ls -al
total 8
drwxr-xr-x 2 root root 4096 May 22 21:29 .
drwxr-xr-x 10 root root 4096 May 22 21:02 ..
-rw——- 1 root root 0 May 22 21:18 audit_log
-rw——- 1 root root 0 May 22 21:18 modsec_debug_log
modsecurity的配置文件mod_security.conf位于apache的配置目录conf中, 日志文件
是/var/log/httpd/audit_log.
modsecurity配置文件包含了一些非常基础的规则设置, 这对于一般的站点而言是足够了.
如果你有什么特殊的需求, 更多可以参考下面的网址:
http://www.modsecurity.org/documentation/index.html
下面将介绍mod_security.conf配置文件.
四. Modsecurity配置文件
# Turn the filtering engine On or Off
SecFilterEngine On
分析每一个http请求
# Make sure that URL encoding is valid
SecFilterCheckURLEncoding On
URL编码确认
# Only allow bytes from this range
SecFilterForceByteRange 32 126
字节范围检查, 以有效防止stack overflow attacks(栈溢出攻击).
# The audit engine works independently and
# can be turned On of Off on the per-server or
# on the per-directory basis
SecAuditEngine RelevantOnly
有效解决apache日志对某个用户或攻击者信息记录的不足. 如果要
对某一个用户或攻击者发出的一个请求的详细记录, 可以访问
/var/log/httpd/audit_log文件.
# The name of the audit log file
SecAuditLog /var/log/httpd/audit_log
SecFilterDebugLog /var/log/httpd/modsec_debug_log
SecFilterDebugLevel 0
设置调试模式下的输出文件.
# Should mod_security inspect POST payloads
#SecFilterScanPO
ST On
# Action to take by default
SecFilterDefaultAction “deny,log,status:406″
设置特别的行动, 406为行动名称, 前面的三个为行动参数.
# Redirect user on filter match
#SecFilter xxx redirect:http://www.webkreator.com
# Execute the external script on filter match
#SecFilter yyy log,exec:/home/ivanr/apache/bin/report-attack.pl
# Simple filter
#SecFilter 111
# Only check the QUERY_STRING variable
#SecFilterSelective QUERY_STRING 222
# Only check the body of the POST request
#SecFilterSelective POST_PAYLOAD 333
# Only check arguments (will work for GET and POST)
#SecFilterSelective ARGS 444
# Test filter
#SecFilter “/cgi-bin/keyword”
# Another test filter, will be denied with 404 but not logged
# action supplied as a parameter overrides the default action
#SecFilter 999 “deny,nolog,status:404″
# Prevent OS specific keywords
#SecFilter /etc/password
# Prevent path traversal (..) attacks
SecFilter “\.\./”
阻止目录周游攻击.
# Weaker XSS protection but allows common HTML tags
SecFilter “<( |\n)*script"
对不安全的(跨站点脚本)XSS进行保护, 但允许普通的HTML标识.
# Prevent XSS atacks (HTML/javascript injection)
SecFilter “<(.|\n)+>“
防止XSS攻击 (HTML/javascript注射)
# Very crude filters to prevent SQL injection attacks
SecFilter “delete[[:space:]]+from”
SecFilter “insert[[:space:]]+into”
SecFilter “select.+from”
防止SQL注射攻击
# Require HTTP_USER_AGENT and HTTP_HOST headers
SecFilterSelective “HTTP_USER_AGENT|HTTP_HOST” “^$”
需要 HTTP_USER_AGENT和HTTP_HOST头.
# Forbid file upload
#SecFilterSelective “HTTP_CONTENT_TYPE” multipart/form-data
# Only watch argument p1
#SecFilterSelective “ARG_p1″ 555
# Watch all arguments except p1
#SecFilterSelective “ARGS|!ARG_p2″ 666
# Only allow our own test utility to send requests (or Mozilla)
#SecFilterSelective HTTP_USER_AGENT “!(mod_security|mozilla)”
# Do not allow variables with this name
#SecFilterSelective ARGS_NAMES 777
# Do now allow this variable value (names are ok)
#SecFilterSelective ARGS_VALUES 888
# Stop spamming through FormMail
# note the exclamation mark at the beginning
# of the filter – only requests that match this regex will
# be allowed
#
#SecFilterSelective “ARG_recipient” “!@webkreator.com$”
#
# when allowing upload, only allow images
# note that this is not foolproof, a determined attacker
# could get around this
#
#SecFilterInheritance Off
#SecFilterSelective POST_PAYLOAD “!image/(jpeg|bmp|gif)”
#
五. 更多
关于作者: os, 操作系统研究和安全工程师.
思蓝安全论坛是一个致力于linux安全的论坛. 欢迎技术交流.
原文出处: 思蓝安全论坛
http://bbs.islab.org/showthread.php?t=760
版权声明: 引用或转载, 请注明作者与出处. 并请保留本文的连接.
如有问题或错误请提交到:
hthttp://bbs.islab.org/showthread.php?t=760
__________________
Simplifying Linux Security
http://zhaoke.net
分类 : 技术文摘 | 发表时间 19-01-2006
第一步:—-安装J2SDK:
到SUN官方站点(http://java.sun.com)下载J2SDK的安装文件:j2sdk-1_4_2_04-windows-i586-p.exe,下载之后安装好J2SDK;安装完之后,设置环境变量:我的电脑—属性—高级—环境变量;
选择—系统变量(S):
设置JAVA_HOME环境变量:
单击—新建,在变量名中输入:JAVA_HOME
在变量值中输入:D:\Java
(假设J2SDK安装在目录D:\Java下,反正就是J2SDK的安装目录。)
然后—确定,到此已经设置好JAVA_HOME环境变量。
设置CLASSPATH环境变量:
单击—新建,在变量名中输入:CLASSPATH
在变量值中输入:D:\Java\bin;.;D:\Java\lib;D:\Java\lib\dt.jar;D:\Java\lib\tools.jar
(中间的点号“.”和分号“;”必不可少。)
然后—确定,到此已经设置好CLASSPATH环境变量。
设置PATH环境变量:
单击—新建,在变量名中输入:PATH
在变量值中输入:D:\Java;.;D:\Java\bin
(中间的点号“.”和分号“;”必不可少。)
然后—确定,到此已经设置好JAVA_HOME环境变量。
三个环境变量设置好后,写一个简单的java程序来测试J2SDK是否已安装成功:
在D:\下新建一个目录test;然后写如下程序:
public class Test {
public static void main(String args[]) {
System.out.println(“This is a test program.”);
}
}
将上面的这段程序保存为文件名为Test.java的文件,保存在目录D:\test下。
然后打开命令提示符窗口,cd到你的test目录,然后键入下面的命令
javac Test.java
java Test
此时如果看到打印出来This is a test program.的话说明安装成功了,
如果没有打印出这句话,你需要仔细检查一下你的配置情况。
如果上面的J2SDK安装成功的话,接下来继续安装Tomcat:
第二步:—-安装Tomcat:
到tomcat官方站点(http://www.apache.org/dist/jakarta/tomcat-4/)下载tomcat:
jakarta-tomcat-4.1.30.exe,下载之后安装。(比如安装在D:\Tomcat下。)
安装完之后,设置环境变量:我的电脑—属性—高级—环境变量;
选择—系统变量(S):
设置CATALINA_HOME环境变量:
单击—新建,在变量名中输入:CATALINA_HOME
在变量值中输入:D:\Tomcat
然后—确定,到此已经设置好CATALINA_HOME环境变量。
设置CATALINA_BASE环境变量:
单击—新建,在变量名中输入:CATALINA_BASE
在变量值中输入:D:\Tomcat
然后—确定,到此已经设置好CATALINA_BASE环境变量。
然后修改环境变量中的CLASSPATH,把Tomat安装目录下的common\lib下的servlet.jar追加到CLASSPATH中去,
修改后的CLASSPATH如下:
CLASSPATH=D:\Java\bin;.;D:\Java\lib;D:\Java\lib\dt.jar;D:\Java\lib\tools.jar;
D:\Tomcat\common\lib\servlet.jar
接着可以启动tomcat,在IE中访问http://localhost:8080,如果看到tomcat的欢迎页面的话说明安装成功了。
如果上面的tomcat安装成功的话,接下来继续安装JSP访问SQL Server 2000的驱动程序:
第三步:—-安装JSP访问SQL Server 2000的驱动程序:
从微软的网站上下载驱动程序:SQL Server 2000 For JDBC 驱动程序,在Google中随便搜索就有。
然后将它安装好。(比如安装目录是D:\SQLDriverForJDBC。)
然后必须将安装目录中的lib目录下三个jar文件:
msbase.jar,mssqlserver.jar,msutil.jar拷贝到Tomcat目录下common\lib目录下,之后,修改环境变量中的CLASSPATH,
把SQL Server 2000 For JDBC 驱动程序安装目录下的
D:\SQLDriverForJDBC\lib\msbase.jar;D:\SQLDriverForJDBC\lib\mssqlserver.jar;
D:\SQLDriverForJDBC\msutil.jar;
追加到CLASSPATH中去,修改后的CLASSPATH如下:
CLASSPATH=D:\Java\bin;.;D:\Java\lib;D:\Java\lib\dt.jar;
_D:\Java\lib\tools.jar;D:\LubeeTomcat\common\lib\servlet.jar;
_D:\SQLDriverForJDBC\lib\msbase.jar;D:\SQLDriverForJDBC\lib\mssqlserver.jar;
D:\SQLDriverForJDBC\msutil.jar
必须重新启动Tomcat!
这样做的目的是,jsp页面在编译过程中不会出现找不到sql server driver类库的问题
写一个简单的用来测试连接SQL Server 2000的JSP代码
<%@ page import="java.lang.*, java.io.*, java.sql.*, java.util.*" contentType="text/html;charset=gb2312" %>
<% Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url=”jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs”;
//pubs 为你的数据库的
String user=”sa”;
String password=”admin”;
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql=”select job_id,job_desc from jobs”;
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) { %>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<% } %>
<% out.print("数据库操作成功,恭喜你"); %>
<% rs.close();
stmt.close();
conn.close();
%>
将上面的JSP代码保存为sql_test.jsp,放在/Root目录下。
在地址中输入:http://localhost:8080/sql_test.jsp,如果全部配置成功的话,将显示如下:
您的第一个字段内容为:1
您的第二个字段内容为:New Hire - Job not specified
您的第一个字段内容为:2
您的第二个字段内容为:Chief Executive Officer
您的第一个字段内容为:3
您的第二个字段内容为:Business Operations Manager
您的第一个字段内容为:4
您的第二个字段内容为:Chief Financial Officier
您的第一个字段内容为:5
您的第二个字段内容为:Publisher
您的第一个字段内容为:6
您的第二个字段内容为:Managing Editor
您的第一个字段内容为:7
您的第二个字段内容为:Marketing Manager
您的第一个字段内容为:8
您的第二个字段内容为:Public Relations Manager
您的第一个字段内容为:9
您的第二个字段内容为:Acquisitions Manager
您的第一个字段内容为:10
您的第二个字段内容为:Productions Manager
您的第一个字段内容为:11
您的第二个字段内容为:Operations Manager
您的第一个字段内容为:12
您的第二个字段内容为:Editor
您的第一个字段内容为:13
您的第二个字段内容为:Sales Representative
您的第一个字段内容为:14
您的第二个字段内容为:Designer
数据库操作成功,恭喜你
以上所有的内容涉及的相关条件:
操作系统:Windo
w 2000 Server
J2SDK版本:j2sdk-1_4_2_04-windows
Tomcat版本:jakarta-tomcat-4.1.30
本地数据库:SQL Server 2000
