libnet是一个开源的网络编程库,允许用户根据需要构造各种不同类型的数据报文,并发送到网络上。在传统的socket编程中,程序员的主要目标是通过TCP或UDP协议进行网络连接和通信,只需要提供数据报文需要承载的内容即可,报文本身的构造是由网络协议栈来控制的。程序员很少会需要自己控制TCP或UDP报文的格式。但是在特定的需求中,有时确实需要自己来构造特定的网络报文,包括控制发送和接收方的IP地址端口、控制报文头部的一些选项等等。libnet为我们提供了比较方便的处理接口,它主要是使用了原始的套接字(raw socket)来实现的。先前笔者需要做一个负载测试,要模拟大量来自不同IP的用户对服务器发送udp报文,以测试服务器能够承受的压力。测试程序借助libnet实现了对于“来自不同IP的UDP报文”的构造,实现了压力测试的程序。由于对libnet比较感兴趣,所以后续将会对其源代码进行分析,给出一些使用简介,希望对其他朋友有所帮助。