Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
thc-ipv6 — IPv6攻击工具包 | Kitploit
工具/GitHubGitHub/vanhauser-thc/thc-ipv6
侦察漏洞分析漏洞利用IDS/IPS规避模糊测试网络安全无线安全渗透测试实用工具与框架红队
GitHubvanhauser-thc/thc-ipv6

thc-ipv6

IPv6攻击工具包

1.2k2294个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
查看仓库

THC-IPV6-ATTACK-TOOLKIT (c) 2005-2022 [email protected] https://github.com/vanhauser-thc/thc-ipv6

root@kitploit:~
	根据AGPLv3许可(见LICENSE文件)

简介

这段代码的灵感来自于我接触IPv6后,对它了解得越来越多——然后发现没有任何工具可以用来玩弄(读作:“黑客”)它。起初我尝试用libnet实现,但后来发现IPv6的实现只是部分完成——而且很差。我尝试添加缺失的代码,但嗯,并不那么容易,所以我节省了时间,快速编写了自己的库。

限制

此代码目前仅在以下环境运行:

  • Linux 2.6.x 或更新版本(因为使用了/proc)
  • 以太网 但这对所有Linux用户来说意味着,它将覆盖你98%的使用场景。 欢迎补丁!(在主题行中添加“antispam”以通过我的反垃圾邮件保护,否则邮件将被退回)

构建

你必须安装libpcap-dev才能构建这些工具。 此外,建议也安装libssl-dev和libnetfilter-queue-dev。

可以通过以下命令安装(Kali、Debian、Ubuntu): sudo apt-get install libpcap-dev libssl-dev libnetfilter-queue-dev

你可以通过运行以下命令来构建工具: make all

你可以通过运行以下命令来安装工具和现有手册页: make install

工具

THC IPV6 ATTACK TOOLKIT 已经包含了许多有效的攻击工具:

  • parasite6:ICMPv6邻居请求/通告欺骗器,将你置于中间人位置,类似于ARP mitm(以及parasite)
  • alive6:一种有效的活跃扫描,将检测所有监听此地址的系统
  • dnsdict6:并行化的DNS IPv6字典暴力破解器
  • fake_router6:以最高优先级在网络中宣布自己为路由器
  • redir6:通过巧妙的ICMPv6重定向欺骗器,智能地将流量重定向给你(中间人)
  • toobig6:具有与redir6相同智能的MTU缩小器
  • detect-new-ip6:检测加入网络的新IPv6设备,你可以运行脚本自动扫描这些系统等。
  • dos-new-ip6:检测新IPv6设备并告知它们所选IP在网络中冲突(拒绝服务)。
  • trace6:非常快速的traceroute6,支持ICMP6回显请求和TCP-SYN
  • flood_router6:用随机路由器通告淹没目标
  • flood_advertise6:用随机邻居通告淹没目标
  • fuzz_ip6:IPv6模糊测试器
  • implementation6:对IPv6执行各种实现检查
  • implementation6d:用于在防火墙后检查实现6的监听守护进程
  • fake_mld6:在网络中宣布自己加入你选择的多播组
  • fake_mld26:同上,但用于MLDv2
  • fake_mldrouter6:伪造MLD路由器消息
  • fake_mipv6:如果IPSEC不需要认证,将移动IP窃取到你的IP
  • fake_advertiser6:在网络中宣布自己
  • smurf6:本地smurf攻击
  • rsmurf6:远程smurf攻击,目前已知仅对Linux有效
  • exploit6:针对目标的已知IPv6漏洞测试
  • denial6:针对目标的一系列拒绝服务测试
  • thcping6:发送一个精心构造的ping6数据包
  • sendpees6:由[email protected]编写的工具,生成包含大量CGA(加密相关;-)的邻居请求,以保持CPU繁忙。不错。 以及大约25个以上的工具,等待你去发现 :-)

只需不带选项运行工具,它们会显示帮助和命令行选项。

库

库 thc-ipv6-lib.c 是所有工具的核心和灵魂——也是你可能想要编写的内容的核心。 实现非常简单,通常只需2-4行代码即可创建完整的IPv6/ICMPv6数据包,内容由你选择。

你使用的基本结构是 (thc_ipv6_hdr *) 例如: thc_ipv6_hdr *my_ipv6_packet; int my_ipv6_packet_len; 而且你永远不需要操作其选项/字段。

每当你想要构建一个IPv6数据包时,只需编写: my_ipv6_packet = thc_create_ipv6_extended(interface, prefer, &my_ipv6_packet_len, src6, dst6, ttl, length, label, class, version); 如果失败,返回NULL(仅当my_ipv6_packet_len或dst6不存在或malloc失败时)。 thc_create_ipv6_extended的参数是: (char*) interface - 你要发送数据包的接口 (int) prefer - 可以是PREFER_LINK(使用链路本地地址)或 PREFER_HOST(使用主机IPv6地址),以及 PREFER_GLOBAL(使用公共(互联网)IP6地址)(默认) (int ) &my_ipv6_packet_len - 将要创建的数据包大小 (unsigned char) src6 - 源IP6(可选 - 如果为NULL则自动选择) (unsigned char*) dst6 - 目标IP6(网络格式,16字节长) 通常是thc_resolve6("ipv6.google.com")的结果 (int) ttl - 数据包的TTL(可选 - 0将设置为255) (int) length - 将在头部设置的长度(可选 - 0 = 实际长度) (int) label - 流标签(0即可) (int) class - 数据包的类别(0即可) (int) version - IP6版本(可选 - 0将设置为版本6) 成功时返回malloc的结构,失败时返回NULL。 完成后用free()释放。

现在你可以在其上设置扩展头部: thc_add_hdr_route(my_ipv6_packet, &my_ipv6_packet_len, routers, routerptr); thc_add_hdr_fragment(my_ipv6_packet, &my_ipv6_packet_len, offset, more_frags, id); thc_add_hdr_dst(my_ipv6_packet, &my_ipv6_packet_len, buf, buflen); thc_add_hdr_hopbyhop(my_ipv6_packet, &my_ipv6_packet_len, buf, buflen); thc_add_hdr_nonxt(my_ipv6_packet, &my_ipv6_packet_len, hdropt); thc_add_hdr_misc(my_ipv6_packet, &my_ipv6_packet_len, type, len, buf, buflen); 函数说明: _route:添加路由转发头部(类似IP源路由) (int) routers - routerptr中的路由器数量 (char**) routerptr - 一个char[routers + 1]结构,包含网络格式的路由器目标地址。参见alive6.c示例。 _fragment:添加分片头部 (int) offset - 数据应写入的偏移量(注意:此处以字节为单位,而非8字节块) (int) more_frags - 如果是最后一个分片设为0,其他分片设为1 (int) id - 数据包的ID(所有分片相同) _dst:添加目标选项头部 (char) buf - 字符缓冲区。你需要自己控制此缓冲区,写入你想要的内容。 (int) buflen - buf的长度 _hopbyhop:添加逐跳选项头部 (char*) buf - 字符缓冲区。你需要自己控制此缓冲区,写入你想要的内容。 (int) buflen - buf的长度 _nonxt:指定之后将不会有任何头部 (int) hdropt - 此选项当前被忽略 _misc:添加杂项头部。如果你想设计一个无效或不存在的扩展头部,可以使用此函数。 (int) type - 指定头部的类型ID (int) len - 头部广告的长度(可选 - -1将设置为正确值) (char*) buf - 字符缓冲区。你需要自己控制此缓冲区,写入你想要的内容。 (int) buflen - buf的长度 这些函数成功时返回(int)0,错误时返回-1。

最后,你可以添加流或数据报头部。 thc_add_icmp6(my_ipv6_packet, &my_ipv6_packet_len, type, code, flags, buf, buflen, checksum); thc_add_tcp(my_ipv6_packet, &my_ipv6_packet_len, source_port, destination_port, sequence_number, ack_number, flags, window_size urgent_pointer, options, optione_length, data, data_length); thc_add_udp(my_ipv6_packet, &my_ipv6_packet_len, source_port, destination_port, checksum, data, data_length); thc_add_data6(my_ipv6_packet, &my_ipv6_packet_len, type, buf, buflen); _icmp6:添加ICMP6数据包头 (int) type:ICMP6类型 (int) code:ICMP6代码 (int) flags:ICMP6标志 (char*) buf - 字符缓冲区。你需要自己控制此缓冲区,写入你想要的内容。 (int) buflen - buf的长度 _tcp|_udp:添加TCP或UDP头部 (ushort) source_port:源端口 (ushort) destination_port:目标端口 (uint) sequence_number:TCP序列号 (uint) ack_number:TCP确认号 (ushort) checksum:UDP校验和,0 = 生成校验和(对于TCP,校验和总是计算) (uchar) flags:TCP标志:TCP_SYN、TCP_ACK、TCP_FIN、TCP_RST、TCP_PSH等 (uint) window_size:TCP窗口大小 (uint) urgent_pointer:TCP紧急指针(通常为0) (char*) options:TCP选项缓冲区,可以为NULL (uint) options_length:TCP选项缓冲区的长度 (char*) data:协议携带的数据 (uint) data_length:数据缓冲区的长度 _data6:添加杂项头部 (int) type:协议ID (char*) buf - 字符缓冲区。你需要自己控制此缓冲区,写入你想要的内容。 (int) buflen - buf的长度 这些函数成功时返回(int)0,错误时返回-1。

完成后,创建并发送数据包。 thc_generate_pkt(interface, srcmac, dstmac, my_ipv6_packet, &my_ipv6_packet_len); thc_send_pkt(interface, my_ipv6_packet, &my_ipv6_packet_len); 或者合并为一个函数: thc_generate_and_send_pkt(interface, srcmac, dstmac, my_ipv6_packet, &my_ipv6_packet_len);

thc_generate_and_send_pkt:生成实际且最终的IPv6数据包,然后发送它。 (char*) interface - 发送数据包的接口 (unsigned char*) srcmac - 要使用的源MAC(网络格式) (可选,如果为NULL则使用真实MAC) (unsigned char*) dstmac - 要使用的目标MAC(网络格式) (可选,如果为NULL则查找真实MAC) thc_generate_pkt和thc_send_pkt一起提供相同功能。通常只在以下情况使用: thc_generate_pkt(...); while(1) thc_send_pkt(...); 这些函数成功时返回(int)0,错误时返回-1。

完成后,使用以下代码释放内存: thc_destroy_packet(my_ipv6_packet);

有一些重要的辅助函数你会需要: thc_resolve6(destinationstring); 这将IPv6地址或DNS名称解析为IPv6网络地址。 在thc_create_ipv6_extended()中用于dst6。不需要时结果必须用free()释放。 thc_inverse_packet(my_ipv6_packet, &my_ipv6_packet_len); 这个巧妙的函数交换源和目标地址,交换ICMP头部类型(回显请求 -> 回显应答等),并重新计算校验和。如果你不知道这有什么用,去玩你的xbox吧 :-)

如果你只想快速完成,有一些预定义的ICMPv6创建函数,可以用一行代码发送impc6数据包: thc_ping6(interface, src, dst, size, count); thc_neighboradv6(interface, src, dst, srcmac, dstmac, flags, target); thc_neighborsol6(interface, src, dst, target, srcmac, dstmac); thc_routeradv6(interface, src, dst, srcmac, default_ttl, managed, prefix, prefixlen, mtu, lifetime); thc_routersol6(interface, src, dst, srcmac, dstmac); thc_toobig6(interface, src, srcmac, dstmac, mtu, my_ipv6_packet, my_ipv6_packet_len); thc_paramprob6(interface, src, srcmac, dstmac, code, pointer, my_ipv6_packet, my_ipv6_packet_len); thc_unreach6(interface, src, srcmac, dstmac, icmpcode, my_ipv6_packet, my_ipv6_packet_len); thc_redir6(interface, src, srcmac, dstmac, newrouter, newroutermac, my_ipv6_packet, my_ipv6_packet_len); thc_send_as_fragment6(interface, src, dst, type, buf, buflen, frag_len); 这些函数正如你所期望的那样工作,所以我太懒^H^H^H^H^H忙了,不再详细描述。

以下函数为结果指针分配内存,因此请记住在不需要时释放这些函数的结果指针: thc_ipv6_dummymac() thc_ipv62notation() thc_ipv62string() thc_string2ipv6() thc_string2notation() thc_resolve6() thc_get_own_ipv6() thc_get_own_mac() thc_get_multicast_mac() thc_get_mac() thc_lookup_ipv6_mac() thc_look_neighborcache() thc_generate_key() thc_generate_cga() thc_generate_rsa()

查看示例用法会很有帮助。最好的例子来自thc-ipv6包中的工具,尤其是implementation6.c和fake_*6.c——玩得开心,并回传代码,以便社区可以在此基础上继续构建。

检测

大多数工具很容易被IDS或专门的检测软件检测到。这是有意为之,以便更容易检测恶意使用。这些工具要么指定固定的数据包签名,要么泛泛地嗅探数据包(例如,因此也会响应发送到不存在的MAC地址的ICMPv6邻居请求,因此非常容易检测)。如果你不希望这样,修改代码。

补丁、错误、提示等

发送至 vh (at) thc (dot) org(并在主题行中添加“antispam”) 或者通过GitHub提交:https://github.com/vanhauser-thc/thc-ipv6

玩得开心!

下载工具