基于 libnet 网络编程介绍与分析
2008-04-15 15:57
当前,基于 的网络编程已成为当今不可替代的编程方法,它将网络
通讯当作文件描述符进行处理,把对这个“网络文件”(即 套接字)的操
作抽象成一种类似于文件操作的方式进行。从实现细节上,这种工作方式根
据 的网络通讯模型,封装了一系列的实现,使得我们只需要使用一个
指定的参数,就可以实现在基于所需协议的数据的发送和接收。
但是,如果我们对那些系统自动给我们做的工作感兴趣,希望与发送的数
据作“面对面”的接触, 则会是一个不错的选择。
是 系统同台上网络安全工具开发的重要的库,它和
、 一起,给网络安全工具的开发人员提供了一组丰富而且完全
的武器,使之得以很方便地编写出结构化强、健壮性好、可移植性高等特点
的程序。
提供一系列的接口函数,实现和封装了数据包的构造和发送过程。
利用它可以亲自构造从应用层到链路层的各层协议的数据包头,并将这些包
头与有效数据有序地组合在一起发送出去。当然,它也是基于 协议族模
型的。
当前的版本是 ,相对于 版本有比较大的变化。
全部源代码包括 行代码, 个导出函数,其中包括 个建包函
数。这使得它支持现有的 族的所有协议。此外,它支持多平
台,!"#$%$&'()$*+ 都能使用。
下图是它支持的协议:
库可以被划分为 , 个功能部分:内存管理、地址解析、包处理、以
及其他一些支持函数。
★内存管理函数
单数据包内存初始化及环境建立:
--./-01*21***-(345
资源释放:
6662-*0.-45
★地址解析函数
地址解析:
1*-*7,.(-8-(--(-745
-7*,.-1*1-7(--(-745
*(--*-7*.-1*1-7
(--(-745
2-*7-*.*(--**(--
(-7
1*1-71-7-45
获取接口设备 地址:
666(-8--9-*,.-45
666*(--*-9-*.-45
获取接口设备硬件地址: