打从搭建winpcap环境以来,把玩了也差不多快一个多星期了,感触最多的就是书到用时方恨少。学习计算机知识也快5年了,从刚进入校园到现在,接触了不少知识,把玩了不少语言唯一的遗憾就是没能深入进去。很多时候我都在思考一个问题:那就是软件开发人员与软件测试人员除了对应用程序需要清晰的了解之外,是否还需要对支撑应用软件运行的平台(操作系统),共享库等各方面知识有深入的了解?
好比是吃了鸡蛋我们需要去了解了这个鸡蛋是怎么生出来的么?
每每编程了最让我深恶痛绝的就是一些莫名其妙的故障,引用一句流行网络语:真是整的我蛋痛。每次碰到这些莫名其妙的故障时,我是恨不得把自己的脑子变成硬盘,然后插上USB把电脑上的资料统统的存进来。对于那些从事软件系统架构设计与分析、软件故障问题定位与软件性能评测的高级开发人员与高级测试人员来说,没有深入的了解就没有他们的今天。
这是我深深感悟到的:浅尝辄止的学习是不可能在技术上有所成就的。那么,现在摆在我们面前的问题就是如何进行这种有效地、深入的学习?我个人的小窍门就是“站在巨人的肩膀上”。现在linux平台下,我们几乎可以查看任何源代码,所以从资源角度上来讲这一学习方法并不存在难度。但是在windows平台下,资源首先就阻止了你的前进。不过pcap系列开发包就是开源,包括利用pcap开发包开发的软件像基于winpcap开发包开发的目前比较流行的wireshark也是开源的,这就给我们提供了这个比较学习资源。学习一个多星期来,发现通过对winpcap开源库与wireshark开源软件的源代码进行深入分析,可以显著加快学习的步伐。
winpcap本身带有内核的协议驱动程序NPF、用户层的库packet.dll与wpcap.dll,通过对winpcap开源库和开源软件的源代码分析,至少可以带来很多收获,包括:
1.对内核协议驱动程序具有更深入的了解
2.分享别人的经验
3.深入了解内核层和用户层的交互
4.熟悉该系列软件的架构体系
.................................................
学习pcap编程要求并不是很高,我总结了下大概需要:
熟悉C语言。不太需要对C语言很精通,但是基本语法和数据结构得了解
网络基本知识,这个也不需要很深入,熟悉TCP/IP一个常用数据包的包头结构,一些网络术语要看的明白。
仅此~~~~
感兴趣的同道中人,欢迎过来交流