libnet库的组包顺序是从应用层–>链路层

1 安装

sudo apt-get install libnet1-dev

2 使用

头文件:#include <libnet.h>
编译时加:-lnet

利用libnet函数库开发应用程序的基本步骤:

  1. 数据包内存初始化
  2. 构造数据包
  3. 发送数据
  4. 释放资源

相关函数:

  1. 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:网络接口,如"eth0",或IP地址,亦可为NULL(自动查询搜索)err_buf: 存放出错的信息
返回值:
成功返回一个libnet句柄;失败返回NULL
  1. libnet_destroy
void libnet_destroy(libnet_t *l);
功能:释放资源
参数:l: libnet句柄
返回值:
  1. libnet_build_udp
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:负载,可设置为NULLpayload_s:负载长度,或为0l: libnet句柄ptag:协议标记(其值为0创建一个新的协议数据,不为0,修改由ptag表示的协议数据)
  1. libnet_build_ipv4
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 prot,u_int16 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:ip标识flag:片偏移ttl:生存时间prot:上层协议sum:校验和,设为0,libnet自动填充src: 源ip地址dst:目的ip地址payload:负载,可设置为NULLpayload_s:负载长度,或为0l: libnet句柄ptag:协议标记
返回值:成功返回协议标记;失败返回-1
  1. libnet_build_ethernet
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:目的macsrc:源mactype:上层协议类型payload:负载,即附带的数据payload_s:负载长度l:libnet句柄ptag:协议标记
返回值:成功返回协议标记;失败返回-1
  1. libnet_write
int libnet_write(libnet_t * l)
功能:发送数据到网络
参数:l:libnet句柄
返回值:失败返回-1,成功返回其他

2 例子

#include <iostream>
#include <libnet.h>using namespace std;int main()
{//初始化操作libnet_t *nethd = libnet_init(LIBNET_LINK_ADV,"ens33",NULL);if(nethd == NULL){cout << "nethd eroor" << endl;return -1;}//应用层数据cout << "请输入要发送的内容:" << endl;char data[256] = "";cin.getline(data,sizeof(data));int dataLen = strlen(data) + strlen(data)%2;//传输层libnet_ptag_t udp = libnet_build_udp(8000,9000,8+dataLen,0,(uint8_t*)data,dataLen,nethd,0);//网络层libnet_ptag_t ipv4 =  libnet_build_ipv4(20+8+dataLen,0,0,0,128,17,0,inet_addr("192.168.243.128"),inet_addr("192.168.243.1"),NULL,0,nethd,0);//链路层unsigned char dstMac[6] = {0x00,0x50,0x56,0xc0,0x00,0x08};unsigned char srcMac[6] = {0x00,0x0c,0x29,0xee,0x18,0x53};libnet_build_ethernet(dstMac,srcMac,0x0800,NULL,0,nethd,0);//发送libnet_write(nethd);/*********连续多次发送数据时************/for(int i = 0; i < 6; ++i){cout << "请输入要发送的内容:" << endl;cin.getline(data,sizeof(data));fflush(stdin);dataLen = strlen(data) + strlen(data)%2;//由于上面已经构建过一次各层格式了,这里改变的是dataLen,影响的是传输层和网络层,所有只需要再次构建这两层即可,//最后一个参数协议标记 值为0时创建一个新的协议数据,不为0,修改为由ptag表示的协议数据,代表还是在刚才那块内存上构建udp = libnet_build_udp(8000,9000,8+dataLen,0,(uint8_t*)data,dataLen,nethd,udp);ipv4 = libnet_build_ipv4(20+8+dataLen,0,0,0,128,17,0,inet_addr("192.168.243.128"),inet_addr("192.168.243.1"),NULL,0,nethd,ipv4);libnet_write(nethd);}/************************************///释放资源libnet_destroy(nethd);return 0;
}

libnet库的安装与使用相关推荐

  1. 网络编程第三方库——Libnet库(发送)

    一.概念 专业的构造和发送网络数据包的开发工具包,是个高层次的API函数库,允许开发者自己构造和发送网络数据包. 头文件:#include<libnet.h> 编译加:-lnet 二.Li ...

  2. Linux 网络编程—— libnet库详细使用指南

    概述 通过<原始套接字实例:发送 UDP 数据包>的学习,我们组 UDP 数据包时常考虑字节流顺序.校验和计算等问题,有时候会比较繁琐,那么,有没有一种更简单的方法呢?答案是:借助 lib ...

  3. IIS+PHP+MySQL+Zend Optimizer+GD库+phpMyAdmin安装配置[完整修正实用版]

    IIS+PHP+MySQL+Zend Optimizer+GD库+phpMyAdmin安装配置[完整修正实用版] IIS+PHP+MySQL+Zend Optimizer+GD库+phpMyAdmin ...

  4. Python+Anaconda中库的安装

    查看Anaconda中的Python的开发环境 (1)conda env list 不同环境中库的安装 方式一:  Pycharm+Anacond安装完成后的Python文件创建以及No module ...

  5. libevent库的安装与使用

    一.libevent库的安装 Libevent 使用源码安装的方式,源码下载地址:http://libevent.org/ 下载下来后,将 Libevent 的压缩包拷贝到 Linux 系统中,然后按 ...

  6. python3.7如何安装库_Python3.7版库的安装以及常用方法(十分简单)

    首先你的python里面必须要有pip,有的话你就可以直接在cmd窗口的python所在主目录下输入pip install "你要安装的库". 下面以 matplotlib为例. ...

  7. 六丶青龙的依赖库+拉库+互助安装及使用教程

    六丶青龙的依赖库+互助安装及使用教程 没有服务器的先自行购买,这里推荐腾讯云2H4G8M首年70–点击购买 青龙面板安装教程 QQ交流:1014549449 --------------点击跳转 青龙 ...

  8. python安装库-python 安装库

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 安装插件使用命令 pip install opencv-python下载 ...

  9. python第三方库下载-3、python第三方库的安装方式

    前言:在学习Python过程中,经常要用到很多第三方库,面对各种不同情况,Python为我们提供了多种安装方法,这里主要介绍三种方法:pycharm在线安装.pip在线安装(强烈推荐).离线安装. 方 ...

  10. 下面不属于python第三方库的安装方法的是-python第三方库的pip安装方法

    安装python第三方库的三种方法 方法1:使用pip命令 方法2:集成安装方法 方法3:文件安装方法 一.pip命令安装方法(需要联网): pip安装方法简单讲就是使用python自带的pip安装工 ...

最新文章

  1. python使用kafka原理详解真实完整版_转:Kafka史上最详细原理总结 ----看完绝对不后悔...
  2. 软考经过 之 天助自助者
  3. python填写excel-Python|读、写Excel文件(三种模块三种方式)
  4. 计算机二级python用什么书-计算机二级python考什么?
  5. 知识点讲解二:关于requests里的timeout()
  6. 基于内存数据库的分布式数据库架构
  7. python在txt中的替换数据清洗_数据清洗过程中常见的排序和去重操作
  8. hive的错误编码+解决方案汇总(持续更新中)
  9. 1439: 2.4.5 Fractions to Decimals 分数化小数
  10. Oracle收购Sun
  11. spring boot 的使用(一)
  12. 最后一个页面:构建电影详情页面
  13. MySQL查询数据表中数据记录(包括多表查询)
  14. 基于FTP服务器搭建yum源
  15. 通往互联网架构师之路---全栈工程师
  16. RS232 RS485 TTL USB 电平
  17. Docker 配置国内镜像加速器
  18. 华为云服务器 登录与配置 Mysql
  19. 微信公众号如何推广运营
  20. php车秘,2020秘趣导航自动收录网站导航源码原版 自动审核|批量检查友链有效性...

热门文章

  1. 【第三课】Arcgis软件详细介绍
  2. 分布式定时任务调度框架
  3. 征途LINUX服务端脚本技术,征途脚本高手进阶编写教程
  4. android dagger2 单例,Dagger2进阶-单例
  5. android字体颜色渐变色,android背景颜色渐变
  6. 黑苹果固态硬盘_三款小软件解决MacOS黑苹果下电脑固态硬盘测速难题
  7. 统计学中p值计算公式_统计学中的P值应该怎么计算
  8. 抖音前期定位养号的8点具体建议
  9. 5G仿真-蒙特卡洛仿真方法
  10. 内网远程工具vnc 内网远程工具vnc选择与安装