Linux使用libnet的详解
投稿:zxhpj
1、libnet简介
在libnet出现以前,如果要构造数据包并发送到网络中,程序员要通过一些复杂的接口来处理。libnet的出现,为程序员提供了一个简单而易于使用的编程接口,可以帮助程序员方便地构造网络数据包,编写网络应用程序。
libnet是一个与libpcap类似的数据包注入器,可以用来编写有关网络测试、网络故障诊断和网络安全等方面的应用程序和工具。
许多网络工具 (如snort,Nmap)都是利用它来实现其部分功能。
libnet提供一系列的接口函数,实现和封装了数据包的构造和发送过程。利用它可以亲自构造从应用层到链路层的各层协议的数据包头,并将这些包头与有效数据有序地组合在一起发送出去。当然,它也是基于TCP/IP协议网络模型的。
全部源代码包括18,000行代码,109个导出函数,其中包括67个建包函数。这使得它支持现有的TCP/IP族的所有协议。
2、libnet的特点
libnet是一个小型的接口函数库,主要用C语言写成,提供了低层网络数据报的构造、处理和发送功能。libnet的开发目的是建立一个简单统一的网络编程接口以屏蔽不同操作系统低层网络编程的差别,使得程序员将精力集中在解决关键问题上。
它具有以下特点:
(1)高层接口:libnet被用于提取低 层数据报转移的专用体系结构细节。
(2)低层数据报构建:libnet的一个主要特点就是它完全控制每个数据报的头 域。
(3)可移植性的接口:与具体的操作系统平台无关。libnet目前可以在Windows、Linux、OS、FreeBSD、Solaris等操作系统上运行,并且提供了统一的接口。
(4)数据包构造:libnet提供了一系列的TCP/IP数据报文的构造函数以方便用户使用。
(5)数据包的处理:libnet提供了一系列处理底层网络编程的辅助函数,利用这些辅助函数,帮助用户简化那些烦琐的事务性的编程工作。
(6)数据包发送:libnet允许用户在两种不同的数据包发送方法中选择。
(7)libnet支持TCP/IP协议族中的所有协议。
libnet函数库提供的接口函数包含 15 种数据包生成器和两种数据包发送器(IP 层和数据链路层)。
提供的接口函数包括:
1)内存管理(分配和释放)函数
2)地址解析函数
3)各种协议类型的数据包构造函数
4)数据包发送函数(IP层和链路层)
5)一些辅助函数,如产生随机数、错误报告、端口列表管理等。
利用libnet函数库开发应用程序的基本步骤:
1)数据包内存初始化
2)构造数据包
3)发送数据
4)释放资源