Libnet简单学习

2023-05-16

简单了解后,建议直接查看源码,以获得其他函数:libnet: libnet-functions.h File Reference

本文仅列举个别常用函数

libnet工作流程

(1)通过libnet_init()函数进行初始化,建立libnet context;

(2)从高层到低层建立报头。例如,建立UDP数据包时,调用函数的顺序如下:libnet_build_udp(), libnet_build_ipv4(), libnet_build_ethernet();

(3)调用libnet_write()写入数据包,发送;

(4)准备发送新的数据包,一般而言,有以下两种方式:

(4.1)调用libnet_clear_packet()清除之前发送的数据包,回到第(2)步;

(4.2)接着上次发送的数据包继续发送:即回到第(2)步,并使用相同函数更新数据包,但是现在所使用的数据包tag是上次发送数据包后所返回的tag;

(5)完成所有数据包发送工作,调用libnet_destroy()清除libnet context,退出。

一般函数

libnet_init

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

功能:数据包内存初始化及环境建立

参数:

injection_type:构造的类型,如下4种

LIBNET_LINK,链路层

LIBNET_RAW4,网络接口层(网络层)

LIBNET_LINK_ADV,链路层高级版本

LIBNET_RAW4_ADV,网络层高级版本

device:网络接口,如 "eth0",或IP地址,亦可为NULL (自动查询搜索) 

err_buf:存放出错的信息

---------------------------------------------------------------------------------------------------------------------------------

libnet_name2addr4

u_int32_t libnet_name2addr4(libnet_t *l, char *host_name, u_int8_t use_name)

功能:将点分十进制数串转换为网络字节序ip地址

参数:

l:libnet_init()返回的libnet *指针

host_name:

LIBNET_RESOLVE,对应主机名

LIBNET_DONT_RESOLVE,对应点分十进制IPv4地址

返回值:

成功:网络字节序 ip 地址

失败:-1

例子:

char* src_ip_str = "192.168.44.130";

unsigned long src_ip = 0;

src_ip = libnet_name2addr4(lib_net, src_ip_str, LIBNET_RESOLVE);

有多种格式转换函数

注意格式转换的灵活使用

// ip地址有两种表示格式,字符串或数字,以下函数用于对两种表示格式进行相互转换,其中use_name表示LIBNET_RESOLVE或LIBNET_DONT_RESOLVE

char * libnet_addr2name4(uint32_t in, uint8_t use_name);

uint32_t libnet_name2addr4(libnet_t *l, char *host_name, uint8_t use_name);

struct libnet_in6_addr libnet_name2addr6(libnet_t *l, const char *host_name, uint8_t use_name);

void libnet_addr2name6_r(struct libnet_in6_addr addr, uint8_t use_name, char *host_name, int host_name_len);

---------------------------------------------------------------------------------------------------------------------------------

libnet_write

int libnet_write(libnet_t *l);

功能:发送数据到网络

参数:l:libnet句柄

返回值:失败返回-1,成功返回其他。

---------------------------------------------------------------------------------------------------------------------------------

libnet_destroy

void libnet_destroy(libnet_t *l);

功能:释放资源

参数:l:libnet句柄

返回值:无

数据包构造函数

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数据包

参数:

sp:源端口号

dp:目的端口号

len:UDP包总长度(8+负载长度,UDP首部8B(LIBNET_UDP_H))

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

payload:负载,可设置为NULL

payload_s:负载长度,或为0

l:libnet句柄

ptag:协议标记

返回值:成功返回协议标记;失败返回-1

---------------------------------------------------------------------------------------------------------------------------------

libnet_build_tcp

libnet_ptag_t libnet_build_tcp(u_int16_t sp,

                                                u_int16_t dp,

                                                u_int32_t seq,

                                                u_int32_t ack,

                                                u_int8_t control,

                                                u_int16_t win,

                                                u_int16_t sum,

                                                u_int16_t urg,

                                                u_int16_t len,

                                                u_int8_t *payload,

                                                u_int32_t payload_s,

                                                libnet_t *l,

                                                libnet_ptag_t ptag );

功能:构造tcp 数据包

参数:

sp:源端口号

dp:目的端口号

seq:TCP序号

ack:ack确认号

control:TCP控制位

win:窗口大小

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

urg:紧急指针

len:tcp包长度

payload:负载,为给应用程序发送的文本内容,可设置为 NULL

payload_s:负载长度,或为0

l:libnet_init() 返回的 libnet * 指针

ptag:协议标记,第一次组新的发送包时,这里写 0,同一个应用程序,下一次再组包时,这个位置的值写此函数的返回值。

---------------------------------------------------------------------------------------------------------------------------------

libnet_build_tcp_options

libnet_ptag_t libnet_build_tcp_options(const uint8_t *options,

                                                             uint32_t options_s,

                                                             libnet_t *l,

                                                             libnet_ptag_t ptag)

设置TCP选项字段

---------------------------------------------------------------------------------------------------------------------------------

libnet_build_icmp_echo

icmp request/reply(Type=8,Type=0)

libnet_ptag_t libnet_build_icmpv6_echo(uint8_t type,

                                                                uint8_t code,

                                                                uint16_t sum,

                                                                uint16_t id,

                                                                uint16_t seq,

                                                                uint8_t *payload,

                                                                uint32_t payload_s,

                                                                libnet_t *l,

                                                                libnet_ptag_t ptag)

Type:8或0,表请求/回复报文

Code:据抓包,可取0

Sum:校验和,0

Id:据抓包,可取0

Seq:据抓包,可取0

---------------------------------------------------------------------------------------------------------------------------------

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 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包总长(20+UDP包长,IP数据包首部20B(LIBNET_IP_H))

tos:服务类型,一般不设

(参考https://blog.csdn.net/wangzhen209/article/details/74453548)

id:ip标识(相同的标识字段的值使分片后的各数据报片最后能正确地重装为原来的数据报)

flag:片偏移(分片时需要)

ttl:生存时间

prot:上层协议号,十进制,(可用内置常量)

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

src:源IP地址

dst:目的IP地址

payload:负载,可设置为NULL

payload_s:负载长度,或为0

l:libnet句柄

ptag:协议标记

返回值:成功返回协议标记;失败返回-1

---------------------------------------------------------------------------------------------------------------------------------

libnet_build_ipv4_options

libnet_ptag_t libnet_build_ipv4_options(const uint8_t *options,

                                                               uint32_t options_s,

                                                               libnet_t *l,

                                                               libnet_ptag_t ptag)

暂缺介绍

---------------------------------------------------------------------------------------------------------------------------------

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:目的mac

src:源mac

type:上层协议类型(当类型字段的值是0x0800时,就表示上层使用的是IP数据报)

payload:负载,即附带的数据

payload_s:负载长度

l:libnet句柄

ptag:协议标记

返回值:成功返回协议标记;失败返回-1

内置常量

数据包头大小常量

LIBNET_ARP_H 28

LIBNET_DNS_H 12

LIBNET_ETH_H 14

LIBNET_ICMP_H 4

LIBNET_ICMP_ECHO_H 8

LIBNET_ICMP_MASK_H 12

LIBNET_ICMP_UNREACH_H 8

LIBNET_ICMP_TIMXCEED_H 8

LIBNET_ICMP_REDIRECT_H 8

LIBNET_ICMP_TS_H 20

LIBNET_IGMP_H 8

LIBNET_IPV4_H 20

LIBNET_RIP_H 24

LIBNET_TCP_H 20

LIBNET_UDP_H 8

---------------------------------------------------------------------------------------------------------------------------------

数据包内存常量

LIBNET_PACKET TCP/UDP数据包头 + IP数据包头使用的内存

LIBNET_OPTS IP或TCP选项使用的内存

LIBNET_MAX_PACKET IP_MAXPACKET (65535字节)使用的内存

---------------------------------------------------------------------------------------------------------------------------------

随机数发生器常量

libnet_get_prand()函数使用:

LIBNET_PRAND_MAX 65535

LIBNET_PR2 0 - 2

LIBNET_PR8 0 - 255

LIBNET_PR16 0 - 32767

LIBNET_PRu16 0 - 65535

LIBNET_PR32 0 - 2147483647

LIBNET_PRu32 0 - 4294967295

---------------------------------------------------------------------------------------------------------------------------------

错误消息常量

(libnet_error()函数使用):

LIBNET_ERR_WARNING 警告类型消息

LIBNET_ERR_CRITICAL 紧急类型消息

LIBNET_ERR_FATAL 致命错误消息

---------------------------------------------------------------------------------------------------------------------------------

上层协议值常量

Build_ip用

IPPROTO_TCP

IPPROTO_ICMP

IPPROTO_UDP

------------------------

build_ethernet用

ETHERTYPE_IP

---------------------------------------------------------------------------------------------------------------------------------

部分函数使用的常量

函数:libnet_host_lookup()、libnet_host_lookup_r()和libnet_name_resolve()

LIBNET_DONT_RESOLVE 不将IP地址解析为FQDN名

LIBNET_RESOLVE 尝试将IP地址解析为FQDN名

参考

libnet 1.1核心功能及常用函数(备忘录)_csdidi的博客-CSDN博客

libnet的使用详解_Kopoo_的博客-CSDN博客_libnet

网络编程第三方库——Libnet库(发送)_陈小帅hh的博客-CSDN博客_libnet

UDP数据包结构_cang12345的博客-CSDN博客_udp数据包结构

IP数据报格式详解_believe209的博客-CSDN博客_ip数据报的格式

tcp数据包的介绍_一十六笔画生的博客-CSDN博客_tcp数据包

libnids,libnet,libicmp使用简介_ape_neu的博客-CSDN博客

libnet TCP示例_程序员_IT虾米网

libnet 函数列表_Mike江的博客-CSDN博客

网络安全工具开发函数库介绍之一——libnet_shuinieh的博客-CSDN博客

libnet的发多个数据包问题,高手的请进!我跪求了,做牛做马在所不辞!1000分求助!-CSDN论坛

源码:libnet: libnet-functions.h File Reference

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Libnet简单学习 的相关文章

  • Maven骨架

    Maven骨架 Maven骨架简单的来说就是一种模型 结构 xff0c Maven根据我们的不同的项目和需求 xff0c 提供了不同的模型 xff0c 这样就不需要我们自己建模型了 举个简单的例子 xff1a 就比如我们要做一套普通的楼房
  • 实现分页功能

    可以先看这个 xff08 1 xff09 https www baidu com link url 61 1O13jXHEC3F2wEP5jCw0KQZCsjW4S7LFdruGJxbJO7G8dkAFgLA2sNKe48F5vOjmP8G
  • jsp中select数据回显

    xff08 1 xff09 https blog csdn net qq 23190729 article details 76774801 utm medium 61 distribute pc relevant none task bl
  • 简单的jsp插入多条数据

    lt 64 page import 61 34 java sql Connection 34 gt lt 64 page import 61 34 java sql Statement 34 gt lt 64 page import 61
  • Servlet数据库连接池

    使用连接池连接数据库 首先在一下apache中的conf文件夹中的context xml文件添加下面这段配置信息 lt Resource name 61 34 jdbc message 34 auth 61 34 Container 34
  • 数据库连接池在TOMCAT中的几种配置方法

    https www cnblogs com jay36 p 7684000 html 还有 C3P0数据库连接池 阿里druid数据库连接池 https www cnblogs com fxbin p 11854367 html https
  • 在idea中的过滤器

    https blog csdn net u010835486 article details 80730745 案例 xff1a https www bilibili com video av543581547
  • Session

    概念 https www runoob com jsp jsp session html 使用 https www cnblogs com bhlsheji p 4015568 html 登录案例 https blog csdn net q
  • E: package ‘gcc‘ has no installation candidate

    E package gcc has no installation candidate 问题描述 第一次使用gcc编译c语言代码时出现command gcc not found but can be installed with sudo
  • ANOMALY: use of REX.w is meaningless (default operand size is 64)

    1 针对所有程序 注册表中增加项 计算机 HKEY LOCAL MACHINE SOFTWARE TEC Ocular 3 agent config 下 新建 字符串值 hookapi disins 数值数据 1 2 针对特定程序 注册表中
  • google启动错误

  • 安装dlib前需要先安装cmake 和boost。然后才能正确安装dlib

    pip install boost pip install cmake pip install dib
  • anconda国内镜像源

    1 为conda配置 xff08 清华 xff09 镜像源 使用conda进行安装时 xff0c 访问的是国外的网络 xff0c 所以下载和安装包时会特别慢 我们需要更换到国内镜像源地址 xff0c 这里我更换到国内的清华大学地址 xff0
  • Anaconda常用命令大全

    使用conda 首先我们将要确认你已经安装好了conda 配置环境 下一步我们将通过创建几个环境来展示conda的环境管理功能 使你更加轻松的了解关于环境的一切 我们将学习如何确认你在哪个环境中 xff0c 以及如何做复制一个环境作为备份
  • openCV错误模块‘cv2.face‘没有属性‘createEigenFaceRecognizer‘(openCV Error module 'cv2.face' has no at

    pip uninstall opencv contrib python pip install opencv contrib python no cache dir 功能也更改为此 load被替换为read import cv2 recog
  • Python enumerate() 函数

    enumerate 函数用于将一个可遍历的数据对象 如列表 元组或字符串 组合为一个索引序列 xff0c 同时列出数据和数据下标 xff0c 一般用在 for 循环当中 Python 2 3 以上版本可用 xff0c 2 6 添加 star
  • python3 opencv3 实现基本的人脸检测、识别功能

    encoding utf 8 老杨的猫 环境 PYCHARM xff0c python3 6 opencv3 import cv2 os import cv2 face as fc 此处有坑 找不到脸 这样引用程序可以运行 xff0c 欢迎
  • idea修改maven镜像

    https jingyan baidu com article c33e3f482455d2ea15cbb526 html https blog csdn net qq 32588349 article details 51461182 阿
  • Error:(1, 1) java: 非法字符: ‘\ufeff‘

    一 问题 用IDEA打开eclipse java项目编译时 xff0c 出现以下错误 xff1a Error 1 1 java 非法字符 ufeff Error 1 10 java 需要class interface或enum 二 原因分析
  • Zemax学习笔记(4)- 设计单透镜实例_1,设置

    Zemax学习笔记 xff08 4 xff09 设计单透镜 1 xff0c 设置 简介镜头分类参数和设计约束镜头数据编辑器定义系统设置定义视场设置波长插入表面输入镜头数据求解 设计单透镜分为3个部分 xff0c 设置 分析和优化 xff0c

随机推荐

  • libnet安装配置

    安装编译 1 下载安装包 http sourceforge net projects libnet dev 2 解压 tar zxvf libnet 1 2 rc3 tar gz 3 进去编译 configure make make ins
  • idea 创建Spring第一个项目

    1 知道什么是maven 网上一般说maven是一个构建工具 xff0c 其实是说得很准确的 xff0c 不过我觉得更准确的说法应该是一个自动化的构建工具 你可以这样说 xff1a 不用maven的时候所有的jar都不是你家的 xff0c
  • anconda 安装dlib

    pip install CMake pip install Boost 前面两个不知道有没有用 xff0c 我是直接安装了 pip install dlib 会直接报错 xff0c 所以要到网上下载whl文件来安装 xff0c 就可以了 用
  • nodejs学习五:sequelize数据库查询的Op方法

    span class token comment 查找users表数据name span span class token keyword const span op span class token operator span model
  • 使用diskpart修复EFI分区变主分区的问题

    diskgenius有时操作EFI分区会把EFI变成主分区 xff0c 太弱智了 xff0c 呵呵 xff0c 但是这个EFI分区本身有可能会变成主分区 xff0c 这样的话系统就无法识别了 xff0c Win8 1系统的diskpart可
  • 程序员会设计后是一种什么样的感觉

    我是一个iOS开发的程序员 xff0c 也是一个自由职业者 平时靠接一些外包和做自己的产品为生 做了这么多年 xff0c 给我的感觉是 xff1a 如果你只会写程序 xff0c 那么做自由职业者的空间要小很多 01 我为什么要学设计 做自己
  • win10笔记本使用virtualbox鼠标失灵

    win10笔记本使用virtualbox6时 xff0c 发现鼠标移动偏差极大 xff0c 完全无法操作虚拟机 解决方法 xff1a 虚拟机设置中将指点设备切换为USB触控板 xff0c 运行虚拟机后右下角鼠标处右键 xff0c 勾选鼠标集
  • SpringMVC的常用注解

    SpringMVC的常用注解 1 64 Controller 64 Controller 用于标记在一个类上 xff0c 使用它标记的类就是一个SpringMVC Controller 对象 2 64 RequestMapping 用于处理
  • Hive学习之修改表、分区、列

    修改表的语句允许改变现有表的结构 通过该语句可以增加列 分区 修改SerDe 增加表和SerDe的属性或者重命名表 与之类似 修改分区的语句可以改变指定分区的属性 重命名表 重命名表的语句如下 ALTER TABLE table name
  • sftp通过秘钥上传,修改文件

    sftp是通过openssh与服务端建立连接的 xff0c 默认端口为22 1 新建一个sftp的用户 xff0c 这里就叫sftp useradd span class hljs operator s span sbin nologin
  • 说说win32 控制台应用程序、win32 项目、mfc项目、空项目那些事儿

    首先 xff0c 说一下空项目 xff0c 大多数想单纯创建c 43 43 工程的新同学 xff0c 打开vs后很可能不知道选择创建什么工程 xff0c 这时候请相信我 xff0c 空项目是你最好的选择 因为空工程不包含任何的源代码文件 x
  • Docker常用命令,使用脚本在线或者离线安装Docker

    查看 停止 删除container 查看运行的容器 docker ps 查看所有容器 docker ps a 查看所有容器id docker ps aq 先停止运行container xff0c 再删除container xff0c 再删除
  • Spring配置数据源(XML)

    1 数据源 xff08 连接池 xff09 的作用 数据源 连接池 是提高程序性能如出现的 事先实例化数据源 xff0c 初始化部分连接资源 使用连接资源时从数据源中获取 使用完毕后将连接资源归还给数据源 常见的数据源 连接池 xff1a
  • Python开发GUI工具介绍,实战:将图片转化为素描画!

    阳光普照好刺眼 7月华为云社区与csdn联合举办了黑马程序员的征文活动 xff0c 由于规则简单 xff08 保证原创文章 内容为技术类为主 且文章篇幅1000字 43 即可 xff09 xff0c 所以兴高采烈的参加了活动 本来是抱着打酱
  • spring boot配置加载不出来?

    新建一个项目发现不能用 xff0c maven依赖加载不出来 xff0c 问题界面如下 xff1a 可以明确是maven依赖出了问题 xff0c 检查配置 1 xff09 检查本地仓库是否配置正确 xff1a span class toke
  • iOS NSAttributedString(属性字符串)

    NSAttributedString实际上就是一个字符串和一本字典 字典包含每一个字符的属性 xff1a 包括字体 大小 下划线 颜色等等 关键是要知道字典中每个key的含义以及相应value的取值范围 Character Attribut
  • 无人机姿态解算_互补滤波(1)

    一 基础知识 1 坐标系 xff1a 遵循右手定则 1 1 大地坐标系 xff08 地球坐标系 xff09 xff1a 北 xff08 x轴 xff09 东 xff08 y轴 xff09 地 xff08 z轴 xff09 xff0c 地就是
  • 学会 Go 中的时间处理

    作为程序员 xff0c 我们经常需要对时间进行处理 在 Go 中 xff0c 标准库 time 提供了对应的能力 本文将介绍 time 库中一些重要的函数和方法 xff0c 希望能帮助到那些一遇到 Go 时间处理问题就需要百度的童鞋 应对时
  • Ubuntu修改文件权限

    Linux内的一切皆文件 xff0c 所以对于Linux下文件的管理就十分的重要了 Linux下的文件权限分为三种 xff1a r xff08 读 xff09 xff0c w xff08 写 xff09 xff0c x xff08 执行 x
  • Libnet简单学习

    简单了解后 xff0c 建议直接查看源码 xff0c 以获得其他函数 xff1a libnet libnet functions h File Reference 本文仅列举个别常用函数 libnet工作流程 xff08 1 xff09 通