1个不稳定版本
0.1.0 | 2023年1月31日 |
---|
#49 in #ipv4
每月 187次下载
11KB
177 行
ip-spoofing
库,用于发送伪造的IPv4头部和UDP/TCP-SYN数据包以执行L3/L4攻击
简而言之,此库允许您在网络中伪造IP地址。为了更好地理解,建议阅读cloudflare的文章: 大型DDoS的真实原因 - IP伪造
可以在OSI模型的L3(网络层)上执行
今天,并非所有ISP都检查IPv4头部的完整性。因此,在实际网络中,有2种伪造IP地址的选项
-
网络层IP伪造
例如,您有一台地址为
195.174.232.102
的服务器,而提供商拥有IP范围195.174.224.0 - 195.174.239.255
,这意味着您可以使用该范围内的任何地址 -
无限IP伪造
这允许您伪造任何IP地址,您可以假装拥有地址
8.8.8.8
(谷歌公共DNS)
伪造的唯一限制是您可以发送数据包,但无法从服务器接收响应。
您可以在本地网络上检查此库是否工作。要攻击真实网络,您需要特定的提供商,允许两种伪造选项之一。
代码示例
您可以在examples/
目录中看到其他代码示例。
use ip_spoofing::{self, RawSocket, ReusablePacketWriter};
/// This example shows how to generate fake UDP packet
/// that delivers `b"hey"` bytes from "8.8.8.8:1234" to "127.0.0.1:5678".
///
/// I.e. the attacker changes its IPv4 address to 8.8.8.8 (Google Public DNS)
fn main() -> ip_spoofing::Result<()> {
let socket = RawSocket::new()?;
let mut writer = ReusablePacketWriter::new();
socket.send_fake_udp_packet(
&mut writer,
[8, 8, 8, 8], //source IPv4 address
1234, //source port
[127, 0, 0, 1], //destination IPv4 address
5678, //destination port
b"hey", //data
64, //TTL on most Linux machines is 64
)?;
Ok(())
}
有用链接
-
IPv4互联网协议维基百科文章描述了IPv4头部
-
rickettm/SendIP仓库提供了允许发送任意IP数据包的命令行工具
SendIP项目的有用C代码
依赖关系
~5MB
~109K SLoC