Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
T
tun
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Railgun
tun
Commits
c03cebc2
Commit
c03cebc2
authored
Feb 01, 2025
by
nanamicat
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
not work
parent
657a3912
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
24 additions
and
8 deletions
+24
-8
Cargo.lock
Cargo.lock
+1
-1
src/main.rs
src/main.rs
+23
-7
No files found.
Cargo.lock
View file @
c03cebc2
# This file is automatically @generated by Cargo.
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
# It is not intended for manual editing.
version =
3
version =
4
[[package]]
[[package]]
name = "async-channel"
name = "async-channel"
...
...
src/main.rs
View file @
c03cebc2
use
socket2
::{
Domain
,
Protocol
,
SockAddr
,
Socket
,
Type
};
use
socket2
::{
Domain
,
Protocol
,
SockAddr
,
Socket
,
Type
};
use
std
::
error
::
Error
;
use
std
::
error
::
Error
;
use
std
::
io
::{
BufRead
,
Write
};
use
std
::
io
::{
BufRead
,
Read
,
Write
};
use
std
::
mem
::
{
transmute
,
MaybeUninit
}
;
use
std
::
mem
::
MaybeUninit
;
use
std
::{
env
,
thread
};
use
std
::{
env
,
thread
};
use
std
::
net
::
SocketAddrV4
;
#[repr(C)]
#[repr(C)]
pub
struct
Meta
{
pub
struct
Meta
{
...
@@ -34,9 +35,10 @@ impl Secret {
...
@@ -34,9 +35,10 @@ impl Secret {
fn
main
()
->
Result
<
(),
Box
<
dyn
Error
>>
{
fn
main
()
->
Result
<
(),
Box
<
dyn
Error
>>
{
let
local_id
:
u8
=
env
::
var
(
"LOCAL_ID"
)
?
.parse
()
?
;
let
local_id
:
u8
=
env
::
var
(
"LOCAL_ID"
)
?
.parse
()
?
;
let
remote_id
:
u8
=
env
::
var
(
"
LOCAL
_ID"
)
?
.parse
()
?
;
let
remote_id
:
u8
=
env
::
var
(
"
REMOTE
_ID"
)
?
.parse
()
?
;
let
local_secret
=
Secret
::
new
(
&
env
::
var
(
"LOCAL_SECRET"
)
?
);
let
local_secret
=
Secret
::
new
(
&
env
::
var
(
"LOCAL_SECRET"
)
?
);
let
remote_secret
=
Secret
::
new
(
&
env
::
var
(
"REMOTE_SECRET"
)
?
);
let
remote_secret
=
Secret
::
new
(
&
env
::
var
(
"REMOTE_SECRET"
)
?
);
let
mut
remote_address
:
&
SockAddr
;
let
mut
config
=
tun
::
Configuration
::
default
();
let
mut
config
=
tun
::
Configuration
::
default
();
config
config
...
@@ -50,13 +52,11 @@ fn main() -> Result<(), Box<dyn Error>> {
...
@@ -50,13 +52,11 @@ fn main() -> Result<(), Box<dyn Error>> {
config
.ensure_root_privileges
(
true
);
config
.ensure_root_privileges
(
true
);
});
});
let
mut
dev
=
tun
::
create
(
&
config
)
?
;
let
dev
=
tun
::
create
(
&
config
)
?
;
let
(
mut
reader
,
mut
writer
)
=
dev
.split
();
let
(
mut
reader
,
writer
)
=
dev
.split
();
// 创建用于接收的原始套接字,协议号为 144
// 创建用于接收的原始套接字,协议号为 144
let
socket
=
Socket
::
new
(
Domain
::
IPV4
,
Type
::
RAW
,
Some
(
Protocol
::
from
(
144
)))
?
;
let
socket
=
Socket
::
new
(
Domain
::
IPV4
,
Type
::
RAW
,
Some
(
Protocol
::
from
(
144
)))
?
;
let
local_id
=
0u8
;
let
remote_id
=
0u8
;
let
inbound
=
thread
::
spawn
(
move
||
{
let
inbound
=
thread
::
spawn
(
move
||
{
let
mut
recv_buf
=
[
MaybeUninit
::
uninit
();
1500
];
let
mut
recv_buf
=
[
MaybeUninit
::
uninit
();
1500
];
...
@@ -64,6 +64,7 @@ fn main() -> Result<(), Box<dyn Error>> {
...
@@ -64,6 +64,7 @@ fn main() -> Result<(), Box<dyn Error>> {
loop
{
loop
{
match
socket
.recv_from
(
&
mut
recv_buf
)
{
match
socket
.recv_from
(
&
mut
recv_buf
)
{
Ok
((
len
,
addr1
))
=>
{
Ok
((
len
,
addr1
))
=>
{
remote_address
=
&
addr1
;
println!
(
"recv from {:?}"
,
recv_buf
);
println!
(
"recv from {:?}"
,
recv_buf
);
// if let Some(packet) = Ipv4Packet::new(unsafe { transmute(&recv_buf[..len]) }) {
// if let Some(packet) = Ipv4Packet::new(unsafe { transmute(&recv_buf[..len]) }) {
// let (meta1, payload) = packet.payload().split_at_mut(size_of::<Meta>());
// let (meta1, payload) = packet.payload().split_at_mut(size_of::<Meta>());
...
@@ -83,7 +84,22 @@ fn main() -> Result<(), Box<dyn Error>> {
...
@@ -83,7 +84,22 @@ fn main() -> Result<(), Box<dyn Error>> {
}
}
});
});
let
outbound
=
thread
::
spawn
(
move
||
{
let
mut
recv_buf
=
[
0u8
;
1500
-
20
-
4
];
loop
{
match
reader
.read
(
&
mut
recv_buf
)
{
Ok
(
len
)
=>
{
println!
(
"recv from {:?}"
,
recv_buf
);
socket
.send_to
(
&
recv_buf
,
&
remote_address
);
}
Err
(
_
)
=>
{}
}
}
});
inbound
.join
();
inbound
.join
();
outbound
.join
();
Ok
(())
Ok
(())
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment