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 环境配置
-
获取 root 权限 :
hexinject 需要构造原始数据包和操作网络接口,必须以 root 权限运行,命令前需加
sudo。 -
确认网络接口 :
# 列出所有可用网络接口 sudo hexinject -I # 输出示例:eth0、wlan0、lo 等,记录需使用的接口名称 -
(可选)开启混杂模式 :
默认情况下,嗅探模式会自动开启混杂模式。若需手动控制:
# 手动开启 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 地址、端口号),重新注入网络,实现数据包篡改(如模拟中间人攻击中的流量修改)。
操作步骤:
-
捕获目标数据包并保存为十六进制格式 :
# 捕获一个 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 包(通常为数据传输包) -
编辑十六进制数据(修改目标字段) :
# 用文本编辑器打开文件(如 nano) nano original.hex # 示例:找到 HTTP 路径字段,将 "/index.html" 修改为 "/admin.html"(对应十六进制需同步修改) # 原数据:2f696e6465782e68746d6c(对应 "/index.html") # 修改为:2f61646d696e2e68746d6c(对应 "/admin.html") -
禁用自动校验和(因修改数据后需重新计算) :
# 注入修改后的数据包,禁用自动校验和(手动修改的校验和可能无效,需工具重新计算) sudo hexinject -p -i eth0 -C < original.hex -
验证修改效果 :
在目标服务器上查看访问日志,确认是否收到修改后的路径请求(如 /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 |
七、使用注意事项与法律风险
-
法律合规要求 :
hexinject 可用于构造恶意数据包或篡改网络流量,仅允许在自身网络或获得明确授权的测试环境中使用。未经允许向第三方网络注入数据包或篡改流量,可能违反《网络安全法》《刑法》中关于非法控制计算机信息系统、破坏网络秩序的规定,需承担法律责任。
-
技术门槛提示 :
使用 hexinject 需要熟悉网络协议的底层结构(如 Ethernet、IP、TCP 等协议的字节级格式),错误的数据包构造可能导致网络异常或被目标设备丢弃,建议先通过 Wireshark 等工具学习数据包结构。
-
网络影响控制 :
批量注入数据包可能占用网络带宽或干扰正常通信,测试时应限制数据包数量和发送速率(通过 -t 参数),测试完成后立即停止注入。
-
隐私保护 :
嗅探模式可能捕获包含敏感信息的数据包(如账号密码、私人通信),即使在授权测试中,也需严格保密并在测试后删除相关数据,避免隐私泄露。