7个版本
0.1.6 | 2022年12月23日 |
---|---|
0.1.5 | 2022年12月22日 |
0.1.4 | 2020年8月17日 |
#252 in HTTP服务器
185KB
356 行
RServer
RServer是一个异步库/应用程序,用于截获/嗅探TCP请求、修改头信息和响应。
安装
要安装RServer,请使用以下命令
cargo install rserver
示例
如何使用RServer截获/嗅探TCP请求。RServer默认运行在8080端口。
要运行RServer,使用以下命令
rserver
请将浏览器/系统代理设置为主机127.0.0.1和端口8080(RServer的默认端口)以使用Rserver截获所有请求。
如果您想直接测试RServer安装而不进行上述步骤,请运行以下命令
https_proxy=127.0.0.1:8080 curl https://www.google.com
用法
rserver [OPTIONS]
FLAGS:
--help Prints help information
-V, --version Prints version information
OPTIONS:
--enable-proxy <enable-proxy> Enable proxy flag [default: false]
-h, --host <host> Server host [default: 127.0.0.1]
-p, --port <port> Server port [default: 8080]
--proxy-host <proxy-host> Proxy host
--proxy-port <proxy-port> Proxy port
要使用rsever Rust库,请参阅以下示例
use rserver::Config;
use rserver::Server;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let config = Config::default();
let server = Server::new(config);
server.start().await
}
变更日志
- 异步服务器。
- 添加HTTPS / CONNECT方法支持。
- 小错误修复和其他改进。
- 模块化代码
内部API
如何读取流数据并返回流数据和其长度。
/// Read the stream data and return stream data & its length
fn read_stream(stream: &mut TcpStream) -> (Vec<u8>, usize) {
let buffer_size = 512;
let mut request_buffer = vec![];
// let us loop & try to read the whole request data
let mut request_len = 0usize;
loop {
let mut buffer = vec![0; buffer_size];
match stream.read(&mut buffer) {
Ok(n) => {
if n == 0 {
break;
} else {
request_len += n;
// we need not read more data in case we have read less data than buffer size
if n < buffer_size {
// let us only append the data how much we have read rather than complete existing buffer data
// as n is less than buffer size
request_buffer.append(&mut buffer[..n].to_vec()); // convert slice into vec
break;
} else {
// append complete buffer vec data into request_buffer vec as n == buffer_size
request_buffer.append(&mut buffer);
}
}
}
Err(e) => {
println!("Error in reading stream data: {:?}", e);
break;
}
}
}
(request_buffer, request_len)
}
待办事项
- 修改/替换请求头
- 修改/替换响应头
依赖项
~5–12MB
~121K SLoC