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
b27ecb5c
Commit
b27ecb5c
authored
Aug 16, 2022
by
nanamicat
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master'
parents
7be6874f
b4c07601
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
11 additions
and
7 deletions
+11
-7
CMakeLists.txt
CMakeLists.txt
+1
-1
Dockerfile
Dockerfile
+2
-2
main.cpp
main.cpp
+8
-4
No files found.
CMakeLists.txt
View file @
b27ecb5c
cmake_minimum_required
(
VERSION 3.2
2
)
cmake_minimum_required
(
VERSION 3.2
1
)
project
(
tun
)
set
(
CMAKE_CXX_STANDARD 23
)
...
...
Dockerfile
View file @
b27ecb5c
FROM
alpine AS builder
FROM
alpine
:3.15
AS builder
RUN
apk
--no-cache
add build-base cmake linux-headers boost-dev boost-static
WORKDIR
/usr/src/app
...
...
main.cpp
View file @
b27ecb5c
...
...
@@ -30,11 +30,15 @@ void inbound(int raw, int tun) {
sockaddr_in
address
{.
sin_family
=
AF_INET
};
socklen_t
address_length
;
size_t
packet_length
;
while
((
packet_length
=
recvfrom
(
raw
,
buffer
,
sizeof
(
buffer
),
0
,
(
sockaddr
*
)
&
address
,
&
address_length
))
>=
0
)
{
// std::cout << "received " << packet_length << " bytes from " << inet_ntoa(address.sin_addr) << std::endl;
while
((
packet_length
=
recvfrom
(
raw
,
buffer
,
sizeof
(
buffer
),
0
,
(
sockaddr
*
)
&
address
,
&
address_length
))
>=
0
)
{
auto
*
packet
=
(
iphdr
*
)
buffer
;
auto
overhead
=
packet
->
ihl
*
4
;
auto
payload
=
buffer
+
overhead
;
// auto inner = (iphdr *) payload;
// std::cout << "packet_length " << packet_length
// << " tot_len " << ntohs(packet->tot_len)
// << " inner->tot_len " << ntohs(inner->tot_len)
// << " from " << inet_ntoa(address.sin_addr) << std::endl;
auto
payload_length
=
packet_length
-
overhead
;
decrypt_package
(
payload
,
payload_length
);
if
(
write
(
tun
,
payload
,
payload_length
)
<
0
)
{
...
...
@@ -52,7 +56,7 @@ void outbound(int raw, int tun) {
size_t
packet_length
;
while
((
packet_length
=
read
(
tun
,
buffer
,
sizeof
(
buffer
)))
>=
0
)
{
encrypt_package
(
buffer
,
packet_length
);
if
(
sendto
(
raw
,
buffer
,
packet_length
,
0
,
(
sockaddr
*
)
&
address
,
sizeof
(
address
))
<
0
)
{
if
(
sendto
(
raw
,
buffer
,
packet_length
,
0
,
(
sockaddr
*
)
&
address
,
sizeof
(
address
))
<
0
)
{
perror
(
"outbound write"
);
}
}
...
...
@@ -82,7 +86,7 @@ int main(int argc, char *argv[]) {
strncpy
(
ifr
.
ifr_name
,
args
[
"dev"
].
as
<
std
::
string
>
().
c_str
(),
IFNAMSIZ
);
remote
=
inet_addr
(
args
[
"IP"
].
as
<
std
::
string
>
().
c_str
());
auto
raw
=
socket
(
AF_INET
,
SOCK_RAW
,
IPPROTO_IPIP
);
auto
raw
=
socket
(
AF_INET
,
SOCK_RAW
,
144
);
if
(
raw
<
0
)
{
perror
(
"socket init error"
);
return
-
1
;
...
...
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