Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
wsssh
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexlab
wsssh
Commits
1114c673
Commit
1114c673
authored
Sep 17, 2025
by
Stefy Lanza (nextime / spora )
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Send server SSH version immediately after tunnel_ack in wssshc to prevent timeouts
parent
797e3f15
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
48 additions
and
4 deletions
+48
-4
tunnel.c
wssshtools/tunnel.c
+48
-4
No files found.
wssshtools/tunnel.c
View file @
1114c673
...
@@ -150,26 +150,70 @@ void handle_tunnel_request(SSL *ssl, const char *request_id, int debug) {
...
@@ -150,26 +150,70 @@ void handle_tunnel_request(SSL *ssl, const char *request_id, int debug) {
fflush
(
stdout
);
fflush
(
stdout
);
}
}
// Send client version to target SSH server
const
char
*
client_version
=
"SSH-2.0-OpenSSH_9.9p1 Debian-3
\r\n
"
;
size_t
version_len
=
strlen
(
client_version
);
if
(
send
(
ssh_sock
,
client_version
,
version_len
,
0
)
<
0
)
{
perror
(
"Send client version failed"
);
return
;
}
// Receive server version
char
server_version_buf
[
256
];
int
bytes_read
=
recv
(
ssh_sock
,
server_version_buf
,
sizeof
(
server_version_buf
)
-
1
,
0
);
if
(
bytes_read
<=
0
)
{
perror
(
"Receive server version failed"
);
return
;
}
server_version_buf
[
bytes_read
]
=
'\0'
;
if
(
debug
)
{
printf
(
"[DEBUG - Tunnel] Received server version: %s"
,
server_version_buf
);
fflush
(
stdout
);
}
// Send tunnel_ack back to server
// Send tunnel_ack back to server
char
ack_msg
[
256
];
char
ack_msg
[
256
];
snprintf
(
ack_msg
,
sizeof
(
ack_msg
),
"{
\"
type
\"
:
\"
tunnel_ack
\"
,
\"
request_id
\"
:
\"
%s
\"
}"
,
request_id
);
snprintf
(
ack_msg
,
sizeof
(
ack_msg
),
"{
\"
type
\"
:
\"
tunnel_ack
\"
,
\"
request_id
\"
:
\"
%s
\"
}"
,
request_id
);
if
(
debug
)
{
if
(
debug
)
{
printf
(
"[DEBUG - WebSockets] Sending tunnel_ack: %s
\n
"
,
ack_msg
);
printf
(
"[DEBUG - WebSockets] Sending tunnel_ack: %s
\n
"
,
ack_msg
);
fflush
(
stdout
);
fflush
(
stdout
);
}
}
if
(
!
send_websocket_frame
(
ssl
,
ack_msg
))
{
if
(
!
send_websocket_frame
(
ssl
,
ack_msg
))
{
fprintf
(
stderr
,
"Send tunnel_ack failed
\n
"
);
fprintf
(
stderr
,
"Send tunnel_ack failed
\n
"
);
return
;
return
;
}
}
// Send server version as tunnel_response immediately
// Convert to hex
size_t
hex_size
=
(
size_t
)
bytes_read
*
2
+
1
;
if
(
hex_size
>
256
)
hex_size
=
256
;
char
hex_data
[
256
];
for
(
int
i
=
0
;
i
<
bytes_read
&&
(
size_t
)
i
*
2
<
hex_size
-
1
;
i
++
)
{
sprintf
(
hex_data
+
i
*
2
,
"%02x"
,
(
unsigned
char
)
server_version_buf
[
i
]);
}
hex_data
[
bytes_read
*
2
]
=
'\0'
;
char
response_msg
[
512
];
snprintf
(
response_msg
,
sizeof
(
response_msg
),
"{
\"
type
\"
:
\"
tunnel_response
\"
,
\"
request_id
\"
:
\"
%s
\"
,
\"
data
\"
:
\"
%s
\"
}"
,
request_id
,
hex_data
);
if
(
debug
)
{
printf
(
"[DEBUG - WebSockets] Sending server version immediately: %s
\n
"
,
response_msg
);
fflush
(
stdout
);
}
if
(
!
send_websocket_frame
(
ssl
,
response_msg
))
{
fprintf
(
stderr
,
"Send server version failed
\n
"
);
return
;
}
// Start bidirectional forwarding between WebSocket and SSH server
// Start bidirectional forwarding between WebSocket and SSH server
thread_args_t
*
thread_args
=
malloc
(
sizeof
(
thread_args_t
));
thread_args_t
*
thread_args
=
malloc
(
sizeof
(
thread_args_t
));
if
(
thread_args
)
{
if
(
thread_args
)
{
thread_args
->
ssl
=
ssl
;
thread_args
->
ssl
=
ssl
;
thread_args
->
debug
=
debug
;
thread_args
->
debug
=
debug
;
pthread_t
thread
;
pthread_t
thread
;
pthread_create
(
&
thread
,
NULL
,
forward_ws_to_ssh_server
,
thread_args
);
pthread_create
(
&
thread
,
NULL
,
forward_ws_to_ssh_server
,
thread_args
);
pthread_detach
(
thread
);
pthread_detach
(
thread
);
...
...
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