ike-scan使用教程

ike-scan是Kali Linux中一款专注于IKE(Internet Key Exchange,互联网密钥交换协议)的扫描工具,主要用于探测网络中支持IPsec VPN的设备。它通过发送IKE协议数据包并分析响应,实现对目标设备的识别、指纹提取、预共享密钥(PSK)破解辅助等功能,是网络安全测试中针对IPsec VPN设备的重要工具。

IKE协议是IPsec VPN的核心协议,负责在通信双方之间建立安全关联(SA)、协商加密算法、交换密钥等,ike-scan正是通过与目标设备的IKE协议交互,获取设备类型、支持的加密套件、厂商信息等关键数据。

二、目标主机指定方式

使用ike-scan时,需通过命令行或文件指定目标主机,支持多种格式,具体如下表所示:

指定方式 格式示例 说明
IP地址 192.168.1.100 单个IP地址,直接指定目标主机
主机名 vpn.example.com 通过DNS解析为IP地址,若使用--nodns选项则不支持
IP网段/子网掩码位数 192.168.1.0/24 指定整个网段,包含网络地址和广播地址
IP地址范围 192.168.1.3-192.168.1.27 指定连续的IP地址范围,包含起始和结束IP
IP网段:子网掩码 192.168.1.0:255.255.255.0 通过网段和子网掩码指定目标网络
文件读取 --file=targets.txt 从文件中读取目标,每行一个IP或主机名;使用"-"表示从标准输入读取

三、核心选项说明

ike-scan提供丰富的选项,用于控制扫描行为、协议参数、输出格式等,以下按功能分类整理为表格:

3.1 基础控制选项

选项 简写 参数说明 默认值/备注
--help -h 显示帮助信息并退出
--version -V 显示工具版本并退出
--file=<fn> -f <fn> 从指定文件<fn>读取目标主机 无;文件中每行一个IP/主机名,"-"表示标准输入
--verbose -v 显示详细进度信息,多次使用增强详细程度 1级:显示扫描阶段完成、无效Cookie包;2级:显示每个收发包;3级:扫描前显示主机/厂商ID列表
--quiet -q 不解析返回的数据包 输出更简洁,减少协议信息
--multiline -M 将负载解析结果拆分为多行显示 每个负载解析结果单独一行,以TAB开头,提升可读性
--random -R 随机化目标主机列表顺序 使用Knuth洗牌算法,避免按顺序扫描被检测
--nodns -N 不使用DNS解析主机名 使用此选项时,所有目标必须指定为IP地址
--timestamp 为接收的数据包显示时间戳 每个响应包均附带时间信息,便于日志分析
--shownum 显示响应主机的序号 在IP地址前显示主机 ordinal 序号,适用于多包发送到同一目标的场景

3.2 网络参数选项

选项 简写 参数说明 默认值/备注
--sport=<p> -s <p> 设置UDP源端口为<p> 默认500;0表示随机;--nat-t选项会将默认改为4500;1024以下端口需root权限
--dport=<p> -d <p> 设置UDP目标端口为<p> 默认500(ISAKMP标准端口);--nat-t选项会将默认改为4500
--retry=<n> -r <n> 设置每个主机的总尝试次数为<n> 默认3次
--timeout=<n> -t <n> 设置初始超时时间为<n>毫秒 默认500ms;后续超时时间按--backoff系数倍增
--backoff=<b> -b <b> 设置超时退避系数为<b> 默认1.5;例:3次重试时,超时依次为500ms、750ms、1125ms
--bandwidth=<n> -B <n> 设置期望的出站带宽为<n> 默认56000bps;K=千位/秒,M=兆位/秒(十进制,如64K=64000)
--interval=<n> -i <n> 设置最小数据包间隔为<n> 默认毫秒;u=微秒,s=秒;与--bandwidth互斥,二选一
--sourceip=<s> 设置出站数据包的源IP为<s> "random"表示每个包随机源IP;需raw socket支持和root权限;使用后无法接收响应
--bindip=<s> 设置绑定的IP地址为<s> 出站包从<s>发出,同时用于接收响应
--tcp[=<n>] -T[<n>] 使用TCP传输而非UDP;<n>指定TCP类型 默认类型1(Checkpoint RAW IKE over TCP);类型2为Cisco封装IKE over TCP;仅支持单个目标
--tcptimeout=<n> -O <n> 设置TCP连接超时为<n>秒 默认10秒;仅适用于TCP传输模式
--nat-t 使用RFC 3947 NAT穿越封装 添加非ESP标记,默认源/目标端口改为4500;可通过--sport/--dport后续修改端口

3.3 IKE协议参数选项

选项 简写 参数说明 默认值/备注
--lifetime=<s> -l <s> 设置IKE生命周期为<s>秒 默认28800秒;十进制=4字节值,十六进制=自适应长度;"none"表示不添加该属性;可与--trans搭配使用
--lifesize=<s> -z <s> 设置IKE流量生命周期为<s>KB 默认0;十进制=4字节值,十六进制=自适应长度;可与--trans搭配使用
--auth=<n> -m <n> 设置认证方式为<n> 默认1(PSK,预共享密钥);RFC定义1-5;Checkpoint混合模式64221;GSS/Kerberos 65001;XAUTH 65001-65010;不适用于IKEv2
--vendor=<v> -e <v> 设置厂商ID字符串为十六进制值<v> 可多次使用,发送多个厂商ID负载
--trans=<t> -a <t> 使用自定义转换集<t>替代默认集 可多次使用;支持两种格式: 1. 新格式:(attr=value,...),如(1=1,2=2,3=1,4=2)(DES-CBC、SHA1、PSK、DH Group2) 2. 旧格式:enc[/len],hash,auth,group,如5,2,1,2(3DES-CBC、SHA1、PSK、DH Group2);不适用于IKEv2
--aggressive -A 使用IKE主动模式(默认为主模式) 可搭配--dhgroup、--id、--idtype;主动模式下所有转换集需相同DH组
--id=<id> -n <id> 设置标识值为<id> 仅适用于主动模式;可指定字符串(如test)或十六进制(如0xdeadbeef)
--idtype=<n> -y <n> 设置标识类型为<n> 默认3(ID_USER_FQDN);仅适用于主动模式;参考RFC 2407 4.6.2
--dhgroup=<n> -g <n> 设置Diffie-Hellman组为<n> 默认2;适用于主动模式和IKEv2;支持值:1,2,5,14-21;主动模式下自定义转换集需匹配此组
--gssid=<n> -G <n> 使用GSS ID(十六进制字符串<n>) 使用转换属性类型16384(参考draft-ietf-ipsec-isakmp-gss-auth-07.txt);Windows 2000可能用32001;需搭配--auth=65001(Kerberos认证)
--noncelen=<n> -c <n> 设置nonce负载长度为<n>字节 默认20字节;仅适用于主动模式;RFC要求8-256字节,工具不强制;缩短可加速PSK破解
--headerlen=<n> -L <n> 设置ISAKMP头部长度为<n>字节 默认自动填充正确值;支持"+n"(比正确值大n)、"-n"(比正确值小n)、"n"(固定值);可用于测试设备对错误长度的响应
--mbz=<n> -Z <n> 为保留(MBZ)字段设置值<n> 默认0;取值0-255;会使数据包不符合RFC标准,仅用于测试设备兼容性
--headerver=<n> -E <n> 指定ISAKMP头部版本为<n> 默认0x10(v1.0);取值0-255;非默认值会使数据包不符合RFC标准,用于测试设备对异常版本的响应
--certreq=<c> -C <c> 添加证书请求负载,值为十六进制<c> 首字节为证书类型,其余为证书颁发机构(参考RFC 2408 3.10);证书类型定义见RFC 2408 3.9
--doi=<d> -D <d> 设置SA DOI(域标识符)为<d> 默认1(IPsec);一般无需修改,除非测试设备对非标准DOI的响应
--situation=<s> -S <s> 设置SA情境值为<s> 默认1;含义取决于DOI,IPsec DOI中1表示SIT_IDENTITY_ONLY;用于测试设备对非标准情境的响应
--protocol=<p> -j <p> 设置提案协议ID为<p> 默认1;含义取决于DOI,IPsec DOI中1表示PROTO_ISAKMP;用于测试设备对非标准协议ID的响应
--transid=<t> -k <t> 设置转换ID为<t> 默认1;含义取决于DOI,IPsec DOI中1表示KEY_IKE;用于测试设备对非标准转换ID的响应
--spisize=<n> 设置提案SPI大小为<n>字节 默认0(无SPI);非零时会添加指定大小的随机SPI到提案负载
--hdrflags=<n> 设置ISAKMP头部标志为<n> 默认0;标志定义见RFC 2408 3.1
--hdrmsgid=<n> 设置ISAKMP头部消息ID为<n> 默认0;IKE第一阶段应设为0
--cookie=<n> 设置ISAKMP发起者Cookie为十六进制值<n> 默认自动生成唯一值;使用此选项时仅能指定单个目标(需唯一Cookie匹配响应)
--exchange=<n> 设置交换类型为<n> 默认主模式(2)或主动模式(4);仅支持这两种模式,其他值仅修改头部字段,不调整负载;定义见RFC 2408 3.1
--nextpayload=<n> 设置ISAKMP头部的下一个负载类型为<n> 默认自动设置为正确值;可手动指定修改
--randomseed=<n> 使用<n>作为伪随机数生成器种子 默认使用不可预测值;用于需要数据包可重复的场景(如包含随机数据的负载)
--rcookie=<n> 设置ISAKMP响应者Cookie为十六进制值<n> 默认0
--ikev2 -2 使用IKE版本2 实验性功能;发送RFC 4306定义的IKEv2格式包;响应自动按IKEv1/IKEv2解析;仅支持默认提案

3.4 指纹与破解选项

选项 简写 参数说明 默认值/备注
--showbackoff[=<n>] -o[<n>] 显示退避指纹表;可选参数<n>为接收最后一个包后的等待时间(秒) 默认等待60秒;用于通过退避模式识别远程主机的IKE实现;短选项格式:-o25(无空格)
--fuzz=<n> -u <n> 设置模式匹配模糊值为<n>毫秒 默认500ms;允许观察到的退避时间与参考时间的最大差异;值越大容错越高,但误报风险增加;模式文件中的值可覆盖此设置
--patterns=<f> -p <f> 使用IKE退避模式文件<f> 默认/usr/share/ike-scan/ike-backoff-patterns;仅在--showbackoff时使用
--vidpatterns=<f> -I <f> 使用厂商ID模式文件<f> 默认/usr/share/ike-scan/ike-vendor-ids;用于厂商ID指纹识别
--pskcrack[=<f>] -P[<f>] 破解主动模式预共享密钥;可选参数<f>为输出文件 输出PSK参数供psk-crack工具离线破解;默认输出到标准输出;短选项格式:-Pfile(无空格);仅支持单个目标;仅适用于主动模式

四、使用教程

4.1 基础扫描:探测目标IPsec设备

扫描单个目标主机,检测是否运行IKE服务:

复制代码
ike-scan 192.168.1.1

扫描整个网段(如192.168.1.0/24):

复制代码
ike-scan 192.168.1.0/24

从文件读取目标列表扫描(文件targets.txt每行一个IP):

复制代码
ike-scan --file=targets.txt

4.2 详细信息获取:显示厂商与协议细节

使用详细模式(-v)扫描,获取更多协议交互信息:

复制代码
ike-scan -v 192.168.1.1

显示多行走负载解析结果(-M),便于阅读复杂响应:

复制代码
ike-scan -M 192.168.1.1

识别设备厂商(通过厂商ID指纹):

复制代码
ike-scan --vidpatterns=/usr/share/ike-scan/ike-vendor-ids 192.168.1.1

4.3 主动模式扫描与PSK破解准备

使用主动模式(-A)扫描,获取更多协商信息:

复制代码
ike-scan -A 192.168.1.1

导出主动模式PSK破解参数到文件(供psk-crack使用):

复制代码
ike-scan -A --pskcrack=psk_data.txt 192.168.1.1

使用指定ID和ID类型的主动模式扫描:

复制代码
ike-scan -A --id=vpnuser --idtype=3 192.168.1.1

4.4 指纹识别:通过退避模式识别设备类型

启用退避指纹分析,识别目标设备的IKE实现:

复制代码
ike-scan --showbackoff 192.168.1.1

指定退避模式文件并延长等待时间(30秒):

复制代码
ike-scan --showbackoff=30 --patterns=custom-patterns.txt 192.168.1.1

4.5 高级扫描:自定义协议参数

使用自定义加密套件(3DES、SHA1、PSK、DH Group2):

复制代码
ike-scan --trans=(1=5,2=2,3=1,4=2) 192.168.1.1

设置非默认IKE生命周期(3600秒)并扫描:

复制代码
ike-scan --lifetime=3600 192.168.1.1

使用NAT-T穿越模式(端口4500)扫描:

复制代码
ike-scan --nat-t 192.168.1.1

4.6 速率控制与网络参数调整

限制扫描带宽为128Kbps,避免网络拥塞:

复制代码
ike-scan --bandwidth=128K 192.168.1.0/24

增加重试次数(5次)和超时时间(1000ms):

复制代码
ike-scan --retry=5 --timeout=1000 192.168.1.1

随机化目标扫描顺序,避免被检测:

复制代码
ike-scan --random 192.168.1.0/24

五、注意事项

  • 使用ike-scan扫描目标网络需获得合法授权,未经允许的扫描可能违反法律法规。
  • 部分选项(如低端口、raw socket)需要root权限,建议使用sudo执行。
  • IKEv2支持为实验性功能,可能存在兼容性问题。
  • 主动模式和PSK破解仅适用于支持主动模式的设备,部分设备默认使用主模式。
  • 扫描结果的准确性受网络环境(如防火墙、NAT)影响,复杂环境下可能需要调整参数重试。
相关推荐
半个俗人2 小时前
07.postman newman生成测试报告
测试工具·postman
疯狂吧小飞牛8 小时前
GPG基础指令
linux·服务器·网络
C++ 老炮儿的技术栈8 小时前
volatile使用场景
linux·服务器·c语言·开发语言·c++
todoitbo9 小时前
用虚拟局域网打通 Win/Mac/Linux 三端:跨设备协作的实用方案
linux·运维·macos
源远流长jerry9 小时前
RDMA 基本操作类型详解:从双端通信到单端直访
linux·网络·tcp/ip·ip
Sylvia-girl10 小时前
Linux下的基本指令1
linux·运维·服务器
wyt53142911 小时前
Redis的安装教程(Windows+Linux)【超详细】
linux·数据库·redis
17(无规则自律)11 小时前
【Linux驱动实战】:字符设备之ioctl与mutex全解析
linux·c语言·驱动开发·嵌入式硬件
天赐学c语言12 小时前
Linux - 应用层自定义协议与序列/反序列化
linux·服务器·网络·c++