Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
J
jumpserver
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
ops
jumpserver
Commits
db2d00f8
Commit
db2d00f8
authored
Sep 21, 2016
by
ibuler
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
implement a some server
parent
e020aaa3
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
116 additions
and
70 deletions
+116
-70
server.py
server.py
+72
-70
test_server.py
test_server.py
+44
-0
No files found.
server.py
View file @
db2d00f8
...
@@ -57,84 +57,87 @@ class Server(paramiko.ServerInterface):
...
@@ -57,84 +57,87 @@ class Server(paramiko.ServerInterface):
return
True
return
True
def
check_channel_pty_request
(
self
,
channel
,
term
,
width
,
height
,
pixelwidth
,
def
check_channel_pty_request
(
self
,
channel
,
term
,
width
,
height
,
pixelwidth
,
pixelheight
,
modes
):
pixelheight
,
modes
):
return
True
return
True
def
handle_ssh_request
(
client
,
addr
):
class
SSHServer
:
print
(
'Got a connection!'
)
def
__init__
(
self
,
host
,
port
):
self
.
host
=
host
self
.
port
=
port
self
.
sock
=
socket
.
socket
(
socket
.
AF_INET
,
socket
.
SOCK_STREAM
)
self
.
sock
.
setsockopt
(
socket
.
SOL_SOCKET
,
socket
.
SO_REUSEADDR
,
1
)
self
.
sock
.
bind
((
self
.
host
,
self
.
port
))
try
:
@staticmethod
t
=
paramiko
.
Transport
(
client
,
gss_kex
=
False
)
def
handle_ssh_request
(
client
,
addr
):
t
.
set_gss_host
(
socket
.
getfqdn
(
""
))
print
(
'Got a connection!'
)
try
:
t
.
load_server_moduli
()
except
:
print
(
'(Failed to load moduli -- gex will be unsupported.)'
)
raise
t
.
add_server_key
(
host_key
)
server
=
Server
()
try
:
t
.
start_server
(
server
=
server
)
except
paramiko
.
SSHException
:
print
(
'*** SSH negotiation failed.'
)
return
while
True
:
# wait for auth
chan
=
t
.
accept
(
20
)
if
chan
is
None
:
print
(
'*** No channel.'
)
return
print
(
'Authenticated!'
)
server
.
event
.
wait
(
10
)
if
not
server
.
event
.
is_set
():
print
(
'*** Client never asked for a shell.'
)
return
chan
.
send
(
'
\r\n\r\n
Welcome to my dorky little BBS!
\r\n\r\n
'
)
chan
.
send
(
'We are on fire all the time! Hooray! Candy corn for everyone!
\r\n
'
)
chan
.
send
(
'Happy birthday to Robot Dave!
\r\n\r\n
'
)
chan
.
send
(
'Username: '
)
f
=
chan
.
makefile
(
'rU'
)
username
=
f
.
readline
()
.
strip
(
'
\r\n
'
)
chan
.
send
(
'
\r\n
I don
\'
t like you, '
+
username
+
'.
\r\n
'
)
chan
.
close
()
except
Exception
as
e
:
print
(
'*** Caught exception: '
+
str
(
e
.
__class__
)
+
': '
+
str
(
e
))
traceback
.
print_exc
()
try
:
try
:
t
.
close
()
t
=
paramiko
.
Transport
(
client
,
gss_kex
=
False
)
except
:
t
.
set_gss_host
(
socket
.
getfqdn
(
""
))
pass
try
:
sys
.
exit
(
1
)
t
.
load_server_moduli
()
except
:
print
(
'(Failed to load moduli -- gex will be unsupported.)'
)
raise
t
.
add_server_key
(
host_key
)
server
=
Server
()
server
.
add_prompt
(
">>"
)
try
:
t
.
start_server
(
server
=
server
)
except
paramiko
.
SSHException
:
print
(
'*** SSH negotiation failed.'
)
return
while
True
:
# wait for auth
chan
=
t
.
accept
(
20
)
if
chan
is
None
:
print
(
'*** No channel.'
)
return
print
(
'Authenticated!'
)
server
.
event
.
wait
(
10
)
if
not
server
.
event
.
is_set
():
print
(
'*** Client never asked for a shell.'
)
return
chan
.
send
(
'
\r\n\r\n
Welcome to my dorky little BBS!
\r\n\r\n
'
)
chan
.
send
(
'We are on fire all the time! Hooray! Candy corn for everyone!
\r\n
'
)
chan
.
send
(
'Happy birthday to Robot Dave!
\r\n\r\n
'
)
chan
.
send
(
'Username: '
)
f
=
chan
.
makefile
(
'rU'
)
username
=
f
.
readline
()
.
strip
(
'
\r\n
'
)
chan
.
send
(
'
\r\n
I don
\'
t like you, '
+
username
+
'.
\r\n
'
)
chan
.
close
()
except
Exception
as
e
:
print
(
'*** Caught exception: '
+
str
(
e
.
__class__
)
+
': '
+
str
(
e
))
traceback
.
print_exc
()
try
:
t
.
close
()
except
:
pass
sys
.
exit
(
1
)
def
listen
(
self
):
self
.
sock
.
listen
(
5
)
while
True
:
try
:
client
,
addr
=
self
.
sock
.
accept
()
print
(
'Listening for connection ...'
)
threading
.
Thread
(
target
=
self
.
handle_ssh_request
,
args
=
(
client
,
addr
))
.
start
()
except
Exception
as
e
:
print
(
'*** Bind failed: '
+
str
(
e
))
traceback
.
print_exc
()
sys
.
exit
(
1
)
def
run_server
():
try
:
sock
=
socket
.
socket
(
socket
.
AF_INET
,
socket
.
SOCK_STREAM
)
sock
.
setsockopt
(
socket
.
SOL_SOCKET
,
socket
.
SO_REUSEADDR
,
1
)
sock
.
bind
((
''
,
2200
))
except
Exception
as
e
:
print
(
'*** Bind failed: '
+
str
(
e
))
traceback
.
print_exc
()
sys
.
exit
(
1
)
if
__name__
==
'__main__'
:
server
=
SSHServer
(
''
,
2200
)
try
:
try
:
sock
.
listen
(
100
)
server
.
listen
()
print
(
'Listening for connection ...'
)
except
KeyboardInterrupt
:
client
,
addr
=
sock
.
accept
()
t
=
threading
.
Thread
(
target
=
handle_ssh_request
,
args
=
(
client
,
addr
))
t
.
start
()
except
Exception
as
e
:
print
(
'*** Listen/accept failed: '
+
str
(
e
))
traceback
.
print_exc
()
sys
.
exit
(
1
)
sys
.
exit
(
1
)
if
__name__
==
'__main__'
:
run_server
()
\ No newline at end of file
test_server.py
0 → 100644
View file @
db2d00f8
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
import
socket
import
sys
import
threading
class
ThreadSocket
:
def
__init__
(
self
,
host
,
port
):
self
.
host
=
host
self
.
port
=
port
self
.
sock
=
socket
.
socket
(
socket
.
AF_INET
,
socket
.
SOCK_STREAM
)
self
.
sock
.
setsockopt
(
socket
.
SOL_SOCKET
,
socket
.
SO_REUSEADDR
,
1
)
self
.
sock
.
bind
((
self
.
host
,
self
.
port
))
def
listen
(
self
):
self
.
sock
.
listen
(
5
)
while
True
:
client
,
address
=
self
.
sock
.
accept
()
client
.
settimeout
(
60
)
threading
.
Thread
(
target
=
self
.
handle_client_request
,
args
=
(
client
,
address
))
.
start
()
def
handle_client_request
(
self
,
client
,
address
):
print
(
"Get client:
%
s"
%
str
(
address
))
while
True
:
try
:
data
=
client
.
recv
(
1024
)
print
(
"sleep :
%
s"
%
str
(
address
))
if
data
:
client
.
send
(
data
)
else
:
raise
IndexError
(
'Client has disconnected'
)
except
:
client
.
close
()
if
__name__
==
'__main__'
:
server
=
ThreadSocket
(
''
,
9000
)
try
:
server
.
listen
()
except
KeyboardInterrupt
:
sys
.
exit
(
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