3个不稳定版本
0.4.1 | 2024年4月10日 |
---|---|
0.4.0 | 2023年7月10日 |
0.3.3 | 2023年1月29日 |
0.3.2 |
|
0.1.0 |
|
#2159 in 网络编程
1,065 个月下载量
在 5 crates 中使用
29KB
688 行
socks5-proto
本crate提供SOCKS5协议的基本抽象和异步读写函数。
查看socks5-server以获取一个精细粒度、相对低级的异步SOCKS5服务器库。
示例
use socks5_proto::{
handshake::{
Method as HandshakeMethod, Request as HandshakeRequest, Response as HandshakeResponse,
},
Address, Error, ProtocolError, Reply, Request, Response,
};
use tokio::{io::AsyncWriteExt, net::TcpListener};
#[tokio::main]
async fn main() -> Result<(), Error> {
let listener = TcpListener::bind("127.0.0.1:5000").await?;
let (mut stream, _) = listener.accept().await?;
let hs_req = HandshakeRequest::read_from(&mut stream).await?;
if hs_req.methods.contains(&HandshakeMethod::NONE) {
let hs_resp = HandshakeResponse::new(HandshakeMethod::NONE);
hs_resp.write_to(&mut stream).await?;
} else {
let hs_resp = HandshakeResponse::new(HandshakeMethod::UNACCEPTABLE);
hs_resp.write_to(&mut stream).await?;
let _ = stream.shutdown().await;
return Err(Error::Protocol(
ProtocolError::NoAcceptableHandshakeMethod {
version: socks5_proto::SOCKS_VERSION,
chosen_method: HandshakeMethod::NONE,
methods: hs_req.methods,
},
));
}
let req = match Request::read_from(&mut stream).await {
Ok(req) => req,
Err(err) => {
let resp = Response::new(Reply::GeneralFailure, Address::unspecified());
resp.write_to(&mut stream).await?;
let _ = stream.shutdown().await;
return Err(err);
}
};
match req.command {
_ => todo!(), // process request
}
}
许可证
GNU通用公共许可证v3.0
依赖项
~2.4–4MB
~66K SLoC