【网络编程】-什么是Libnet

一、Libnet介绍

Libnet是一个用于网络信息操作的开源C库,它提供了一组API,可用于创建和处理网络协议数据包。Libnet可以在不同的操作系统上运行,如Linux、FreeBSD、OpenBSD、Mac OS X和Windows等。它可以帮助开发人员快速构建定制的网络应用程序,包括网络安全工具、入侵检测系统和漏洞扫描器等。

Libnet的主要特点包括:

1. 提供多种网络协议支持,如TCP、UDP、ICMP、IP等。

2. 可以创建多种协议数据包,包括ARP、RIP、OSPF等。

3. 可以自定义协议数据包,以满足特定需求。

4. 支持IPv4和IPv6协议。

5. 可以在用户空间(user-space)和内核空间(kernel-space)之间交换数据包。

6. 对于网络数据包处理提供了高度的控制。

二、Libnet安装

sudo apt-get install libnet-dev

 三、开发举例

利用libnet函数的相关API开发步骤一般为:

        1、数据包内存初始化

//初始化
    libnet_t *net=libnet_init(LIBNET_LINK_ADV,"ens33",NULL);
    if(net == NULL)
    {
        perror("libnet_init\n");
        return 0;
    }
//创建标签
    libnet_ptag_t udp_tag = 0;  //创建UDP标签
    libnet_ptag_t ip_tag = 0;   //创建IP标签
    libnet_ptag_t mac_tag = 0;  //创建Mac标签
 libnet_init相关参数:

                libnet_t *libnet_init(int injection_type, char *device, char *err_buf)

                injection_type: 构造的类型(LIBNET_LINK,LIBNET_RAW4, LIBNET_LINK_ADV,LIBNET_RAW4_ADV);

                device:网络接口

                err_buf: 存放出错的信息       

        2、构建数据包

                ①构建UDP包:

                        libnet_ptag_tlibnet_build_udp(uint16_t sp, uint16_t dp, uint16_t len, uint16_t sum,const uint8_t* payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag);           

     库中函数说明:
参数说明:

                 sp: 源端口号

                dp:目的端口号

                len:udp 包总长度

                sum:校验和,设为 0,libnet 自动填充

                payload:负载,可设置为 NULL

                payload_s:负载长度,或为 0

                l:libnet 句柄

                ptag:协议标记

                ②构建IP包

libnet_ptag_t libnet_build_ipv4(uint16_t ip_len, uint8_t tos, uint16_t id, uint16_t frag,uint8_t ttl, uint8_t prot, uint16_t sum, uint32_t src, uint32_t dst,const uint8_t* payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag);

库中函数说明:

 参数说明:

ip_len:ip 包总长

tos:服务类型

id:ip 标识

flag:片偏移

ttl:生存时间

prot:上层协议

sum:校验和,设为 0,libnet 自动填充

src: 源 ip 地址

dst:目的 ip 地址

payload:负载,可设置为 NULL

payload_s:负载长度,或为 0

l: libnet 句柄

ptag:协议标记

                ③构建以太网数据包

libnet_ptag_t

libnet_build_ethernet(const uint8_t *dst, const uint8_t *src, uint16_t type,

const uint8_t* payload, uint32_t payload_s, libnet_t *l, libnet_ptag_t ptag);

                数据库说明:
                 参数说明:

dst:目的 mac

src:源 mac

type:上层协议类型

payload:负载,即附带的数据

payload_s:负载长度

l:libnet 句柄

ptag:协议标记

        3、发送数据

int libnet_write(libnet_t *l); 

        4、释放资源

void libnet_destroy(libnet_t *l);

                功能: 释放资源 参数: l: libnet 句柄 返回值: 无

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值