概述:
libnet发原始套接字数据的库
安装:
sudo apt-get install libnet-dev
2.头文件
头文件:#include <libnet.h>
编译时加:-lnet
3.开发流程
1.数据包内存初始化
2.构造数据包
3.发送数据
4.释放资源
4.相关函数
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:网络接口,如"eth0",或IP地址,亦可为NULL(自动查询搜索)
err_buf: 存放出错的信息
返回值:
成功返回一个libnet句柄;失败返回NULL
void libnet_destroy(libnet_t*l);
功能: 释放资源
参数: l:libnet句柄
返回值: 无
libnet_ptag_t libnet_build_udp(u_int16_t sp,u_int16_t dp,u_int16_t len,u_int16_t sum,u_int8_t *payload,u_int32_t payload_s,libnet_t *l,libnet_ptag_t ptag)
功能:
构造udp数据包
返回值:
成功返回协议标记;失败返回-1
参数:
sp: 源端口号
dp:目的端口号
len:udp包总长度
sum:校验和,设为0,libnet自动填充
payload:负载,可设置为NULL
payload_s:负载长度,或为0
l: libnet句柄
ptag:协议标记(其值为0创建一个新的协议数据,不为0,修改由ptag表示的协议数据)
libnet_ptag_t libnet_build_ipv4(u_int16_t ip_len, u_int8_t tos,
u_int16_t id, u_int16_t flag,
u_int8_t ttl, u_int8_t port,
u_int16_t sum, u_int32_t src,
u_int32_t dst, u_int8_t *payload,
u_int32_t payload_s, libnet_t *l,
libnet_ptag_t ptag);功能:构造一个IPv4数据包
参数:ip_len:ip包总长
tos:服务类型
id:id表示
flag:片偏移
ttl:生存时间
prot:上层协议
sum:校验和,设为0,libnet自动填充
src:源IP地址
dst:目的IP地址
payload:负载,可设置为NULL
payload_s:负载长度,或为0,
l:libnet句柄
ptag:协议标记返回值:成功返回协议标记;失败返回-1
libnet_ptag_t libnet_build_ethernet(
u_int8_t *dst,
u_int8_t *src,
u_int16_t type,
u_int8_t *payload,
u_int32_t payload_s,
libnet_t *l,
libnet_ptag_t ptag);功能:构造一个以太网数据包
参数:dst:目的mac
src:源mac
type:上层协议类型
payload:负载,即附带的数据
payload_s:负载长度
l:libnet句柄
ptag:协议标记返回值:成功返回协议标记;失败返回-1
int libnet_write(libnet_t *l);
功能:发送数据到网络
参数:l:libnet句柄
返回值:失败返回-1,成功返回其他。
网友评论