hexinject使用教程

hexinject 是一款专注于网络数据包捕获与注入的工具,支持以十六进制或原始数据格式处理网络流量。其核心功能包括两大模式:嗅探模式 (捕获并解析网络数据包,以十六进制形式展示)和注入模式(手动构造或修改十六进制格式的数据包,发送到指定网络接口)。

与普通嗅探工具(如 tcpdump)不同,hexinject 更侧重于数据包的底层字节级操作,适合需要精确控制数据包结构的场景(如网络协议分析、漏洞验证、自定义数据包测试等)。通过 hexinject,用户可以直接查看数据包的十六进制原始数据,或手动编写十六进制代码构造特殊数据包,实现对网络行为的精细干预。

主要应用场景:

-- 网络协议逆向工程:分析未知协议的数据包结构(通过十六进制格式);

-- 漏洞利用与验证:构造含特定 payload 的恶意数据包,测试目标系统的漏洞;

-- 自定义数据包测试:发送非标准格式的数据包,验证网络设备或程序的兼容性;

-- 教学演示:展示网络数据包的底层结构(十六进制与协议字段的对应关系)。

二、工具基础信息

项目 详情
工具名称 hexinject(十六进制数据包注入/嗅探工具)
当前版本 1.6
核心功能 1. 嗅探模式:捕获网络数据包并以十六进制格式输出;2. 注入模式:将十六进制或原始数据格式的数据包注入网络
数据格式支持 十六进制(默认)、原始二进制数据(通过 -r 参数启用)
依赖环境 libpcap(数据包捕获与注入底层库)
运行权限 必须 root 权限(需操作网络接口、构造原始数据包)

三、命令参数说明(中文翻译与解析)

参数 英文说明 中文翻译与解析
模式选择参数(必选,二选一)
-s sniff mode 嗅探模式:捕获网络数据包并以十六进制(默认)或原始格式输出
-p inject mode 注入模式:从标准输入读取十六进制(默认)或原始格式数据,构造并发送数据包
数据格式参数
-r raw mode (instead of the default hexadecimal mode) 原始模式:使用原始二进制数据格式(默认是十六进制格式);嗅探时输出原始字节,注入时读取原始字节数据
通用参数(嗅探与注入模式均可用)
-f <filter> custom pcap filter 自定义 pcap 过滤规则(同 tcpdump 语法),仅捕获/注入符合条件的数据包;示例:-f "tcp port 80"
-i <device> network device to use 指定网络接口(如 eth0、wlan0);需通过 -I 参数查看可用接口
-I list all available network devices 列出所有可用的网络接口,用于确认 -i 参数的接口名称
仅嗅探模式可用参数
-F <file> pcap file to use as device (sniff mode only) 从 pcap 文件读取数据包(而非实时接口),用于离线分析;示例:-F traffic.pcap
-c <count> number of packets to capture 指定捕获的数据包数量,达到后自动停止;默认持续捕获直到手动中断(Ctrl+C)
仅注入模式可用参数
-t <time> sleep time in microseconds (default 100) 数据包发送间隔时间(微秒),默认 100 微秒;批量注入时控制发送速率
-C disable automatic packet checksum 禁用自动计算校验和,使用手动指定的校验和(适用于需要自定义校验和的场景)
-S disable automatic packet size fields 禁用自动设置数据包长度字段,使用手动指定的长度值(需确保与实际数据长度一致,否则可能被丢弃)
接口模式参数
-P disable promiscuous mode 禁用混杂模式,仅捕获目标为当前主机的数据包;默认开启混杂模式(捕获所有经过接口的数据包)
-M put the wireless interface in monitor mode (experimental: use airmon-ng instead of this...) 将无线接口置于监控模式(实验性功能,官方建议使用 airmon-ng 替代);用于捕获无线原始帧
其他参数
-h help screen 显示帮助信息,列出所有参数及用法

四、工具安装与环境准备

4.1 安装方式(Kali Linux)

hexinject 已预装在 Kali Linux 中,若未安装或版本过旧,可通过以下命令安装:

复制代码
# 更新软件源
sudo apt update

# 安装 hexinject
sudo apt install hexinject -y

# 验证安装(查看版本)
hexinject -h
# 输出首行显示 "HexInject 1.6" 表示安装成功

4.2 依赖检查与补充

hexinject 依赖 libpcap 库,若运行时提示缺失,需手动安装:

复制代码
# 安装 libpcap 依赖
sudo apt install libpcap-dev -y

4.3 环境配置

  1. 获取 root 权限

    hexinject 需要构造原始数据包和操作网络接口,必须以 root 权限运行,命令前需加 sudo

  2. 确认网络接口

    复制代码
    # 列出所有可用网络接口
    sudo hexinject -I
    # 输出示例:eth0、wlan0、lo 等,记录需使用的接口名称
  3. (可选)开启混杂模式

    默认情况下,嗅探模式会自动开启混杂模式。若需手动控制:

    复制代码
    # 手动开启 eth0 接口的混杂模式
    sudo ip link set eth0 promisc on
    
    # 验证混杂模式(输出含 "PROMISC")
    ip link show eth0

五、核心使用教程(场景化示例)

5.1 场景 1:嗅探模式------捕获并查看数据包的十六进制格式

适用场景:实时捕获网络数据包,以十六进制形式查看其原始结构,分析协议字段(如 Ethernet 帧头、IP 头、TCP 头等的字节组成)。

命令 1:基础嗅探(默认参数)

复制代码
# 在 eth0 接口捕获数据包,以十六进制格式输出,持续捕获直到 Ctrl+C
sudo hexinject -s -i eth0

命令 2:指定过滤规则(仅 TCP 80 端口)

复制代码
# 仅捕获 eth0 接口上 TCP 80 端口(HTTP)的数据包,显示十六进制格式
sudo hexinject -s -i eth0 -f "tcp port 80"

命令 3:限制捕获数量并保存到文件

复制代码
# 捕获 eth0 接口的前 10 个数据包,十六进制格式输出到文件 hex_packets.txt
sudo hexinject -s -i eth0 -c 10 > hex_packets.txt

命令 4:原始模式嗅探(输出二进制数据)

复制代码
# 以原始二进制格式捕获数据包(非十六进制),用于后续二进制分析
sudo hexinject -s -i eth0 -r -c 5 > raw_packets.bin

输出解读

十六进制模式下,输出格式为每行 16 字节,左侧为十六进制值,右侧为 ASCII 字符(不可打印字符以 . 表示),示例:

复制代码
0000  52:54:00:12:34:56 08:00:27:f8:b1:7a 08:00 45:00  RT....'..z..E.
0010  00:3c 00:01 00:00 40:06 7d:37 c0:a8 01:0a c0:a8  .<....@.}7......
0020  01:01 00:50 04:d2 00:00 00:00 00:00 50:02 20:00  ...P........P. .
0030  7d:38 00:00                                     }8..

左侧 0000、0010 等为偏移量,中间为十六进制字节,右侧为对应 ASCII 字符。

5.2 场景 2:注入模式------发送自定义十六进制数据包

适用场景:手动构造十六进制格式的数据包(如自定义 Ethernet 帧、IP 包),注入到网络中,用于测试目标设备对特殊数据包的响应。

前提准备

需了解目标协议的数据包结构(如 Ethernet 帧头占 14 字节,包含目标 MAC、源 MAC、类型字段等),并编写符合格式的十六进制代码。以下为一个简单的 Ethernet 测试帧示例(目标 MAC:ff:ff:ff:ff:ff:ff 广播,源 MAC:08:00:27:f8:b1:7a,类型:0x0800 表示 IPv4,数据部分:41424344 即 "ABCD"):

复制代码
ffffffffffff080027f8b17a080041424344

命令 1:基础注入(从终端输入十六进制数据)

复制代码
# 在 eth0 接口注入十六进制数据包,输入上述示例数据后按 Ctrl+D 发送
sudo hexinject -p -i eth0
# 终端会等待输入,粘贴或输入十六进制字符串后按 Ctrl+D 发送

命令 2:从文件读取十六进制数据并批量注入

复制代码
# 1. 创建包含十六进制数据的文件(每行一个数据包)
echo "ffffffffffff080027f8b17a080041424344" > inject_data.hex
echo "ffffffffffff080027f8b17a080056575859" >> inject_data.hex  # 第二个数据包

# 2. 从文件读取并注入,间隔 1000 微秒(1 毫秒)
sudo hexinject -p -i eth0 -t 1000 < inject_data.hex

命令 3:原始模式注入(发送二进制文件)

复制代码
# 1. 将十六进制数据转换为二进制文件(需 xxd 工具)
echo "ffffffffffff080027f8b17a080041424344" | xxd -r -p > raw_packet.bin

# 2. 以原始模式注入二进制文件
sudo hexinject -p -i eth0 -r < raw_packet.bin

验证注入效果

在另一台主机或同一主机的其他接口上用 tcpdump 捕获,确认数据包已发送:

复制代码
# 在目标主机执行,监听 eth0 接口的广播包
sudo tcpdump -i eth0 ether broadcast -X
# 输出应包含注入的数据包内容(如 41:42:43:44 对应 "ABCD")

5.3 场景 3:高级应用------捕获数据包修改后重新注入

适用场景:捕获现有网络数据包,修改其中部分字段(如 IP 地址、端口号),重新注入网络,实现数据包篡改(如模拟中间人攻击中的流量修改)。

操作步骤

  1. 捕获目标数据包并保存为十六进制格式

    复制代码
    # 捕获一个 HTTP GET 请求数据包,保存到文件 original.hex
    sudo hexinject -s -i eth0 -f "tcp port 80 and tcp[13] & 0x08 != 0" -c 1 > original.hex
    # 过滤规则解释:tcp[13] & 0x08 != 0 表示仅捕获带 PSH 标志的 TCP 包(通常为数据传输包)
  2. 编辑十六进制数据(修改目标字段)

    复制代码
    # 用文本编辑器打开文件(如 nano)
    nano original.hex
    # 示例:找到 HTTP 路径字段,将 "/index.html" 修改为 "/admin.html"(对应十六进制需同步修改)
    # 原数据:2f696e6465782e68746d6c(对应 "/index.html")
    # 修改为:2f61646d696e2e68746d6c(对应 "/admin.html")
  3. 禁用自动校验和(因修改数据后需重新计算)

    复制代码
    # 注入修改后的数据包,禁用自动校验和(手动修改的校验和可能无效,需工具重新计算)
    sudo hexinject -p -i eth0 -C < original.hex
  4. 验证修改效果

    在目标服务器上查看访问日志,确认是否收到修改后的路径请求(如 /admin.html)。

5.4 场景 4:离线分析------从 pcap 文件提取十六进制数据包

适用场景:分析已保存的 pcap 数据包文件(如用 tcpdump 捕获的流量),提取其中数据包的十六进制格式,用于协议分析或构造相似数据包。

命令

复制代码
# 从 traffic.pcap 文件中提取前 3 个数据包,以十六进制格式输出
sudo hexinject -s -F traffic.pcap -c 3

扩展应用

将 pcap 文件中的数据包转换为十六进制后,可筛选特定数据包(如包含登录凭证的 HTTP 包),修改后重新注入,用于重放攻击测试:

复制代码
# 提取 pcap 中的第 5 个数据包,保存为 hex 格式,修改后注入
sudo hexinject -s -F traffic.pcap -c 1 -f "tcp port 80" > replay.hex  # 提取
nano replay.hex  # 修改关键字段(如会话 ID)
sudo hexinject -p -i eth0 -C < replay.hex  # 重放注入

六、常见问题与解决方法

常见问题 可能原因 解决方法
嗅探模式下无输出,捕获不到数据包 1. 接口选择错误(未监听有流量的接口);2. 过滤规则过严格(无匹配流量);3. 未开启混杂模式(仅捕获本地流量) 1. 用 sudo hexinject -I 确认接口,换用正确接口(如 -i eth0);2. 去除过滤规则,捕获所有流量;3. 确保未使用 -P 参数(默认开启混杂模式)
注入模式提示"Invalid hex string" 输入的十六进制字符串包含非十六进制字符(如 g、h 等),或长度为奇数(十六进制需成对出现) 1. 检查输入的字符串,确保仅包含 0-9、a-f、A-F;2. 确保长度为偶数(如 "a1b2" 正确,"a1b" 错误)
注入的数据包未被目标接收 1. 数据包格式错误(如校验和无效、长度字段与实际不符);2. 目标主机防火墙拦截;3. 接口或网络不通 1. 禁用自动校验和(-C)和自动长度(-S),让工具重新计算;2. 关闭目标主机防火墙;3. 用 ping 确认攻击者与目标网络连通
无线监控模式(-M)启动失败 1. 无线网卡不支持监控模式;2. 工具的 -M 参数为实验性功能,兼容性差 1. 用 airmon-ng 替代:sudo airmon-ng start wlan0 开启监控模式;2. 指定监控接口(如 wlan0mon):sudo hexinject -s -i wlan0mon
从 pcap 文件提取时提示"File not found" 1. -F 参数指定的 pcap 文件路径错误;2. 文件无读取权限 1. 确认文件路径正确(如 -F ./traffic.pcap);2. 赋予文件读取权限:chmod 644 traffic.pcap

七、使用注意事项与法律风险

  1. 法律合规要求

    hexinject 可用于构造恶意数据包或篡改网络流量,仅允许在自身网络或获得明确授权的测试环境中使用。未经允许向第三方网络注入数据包或篡改流量,可能违反《网络安全法》《刑法》中关于非法控制计算机信息系统、破坏网络秩序的规定,需承担法律责任。

  2. 技术门槛提示

    使用 hexinject 需要熟悉网络协议的底层结构(如 Ethernet、IP、TCP 等协议的字节级格式),错误的数据包构造可能导致网络异常或被目标设备丢弃,建议先通过 Wireshark 等工具学习数据包结构。

  3. 网络影响控制

    批量注入数据包可能占用网络带宽或干扰正常通信,测试时应限制数据包数量和发送速率(通过 -t 参数),测试完成后立即停止注入。

  4. 隐私保护

    嗅探模式可能捕获包含敏感信息的数据包(如账号密码、私人通信),即使在授权测试中,也需严格保密并在测试后删除相关数据,避免隐私泄露。

相关推荐
i建模2 小时前
Ubuntu系统中安装NVIDIA驱动
linux·运维·ubuntu
IpdataCloud2 小时前
网络安防实战:如何用IP查询工具精准定位风险IP?
网络·经验分享·tcp/ip·网络安全
qcwl662 小时前
深入理解Linux进程与内存 学习笔记#3
linux·笔记·学习
无籽西瓜a2 小时前
TCP三次握手与四次挥手详解含图解
java·服务器·网络·tcp/ip
千里马-horse2 小时前
Linux 系统中安装 ktlint
linux·运维·服务器
feng_you_ying_li2 小时前
linux攻略计划启动,首先是linux的基本介绍(1)
linux·运维·服务器
Du_chong_huan2 小时前
1.4 分组交换网中的时延、丢包和吞吐量 | 计算机网络核心原理拆解
网络·智能路由器
张3蜂2 小时前
Ubuntu Linux 与 Ubuntu with Rosetta:深入解析两者的区别与适用场景
linux·运维·ubuntu
廿一夏2 小时前
搭建Ubuntu 虚拟机与部署docker
linux·ubuntu·docker