mirror of
https://github.com/splunk/DECEIVE.git
synced 2025-07-01 16:47:28 -04:00
Make peername and sockname calls more robust across platforms
For whatever reason, MacOS returns 4 values from conn.get_extra_info('peername') and conn.get_extra_info('sockname'), but Linux systems only return 2. On the Mac, it's only the first two that we need anyway. Now we retrieve them all, no matter how many there are, and just use the first two so it will work on both platforms.
This commit is contained in:
@ -49,8 +49,18 @@ class MySSHServer(asyncssh.SSHServer):
|
||||
|
||||
def connection_made(self, conn: asyncssh.SSHServerConnection) -> None:
|
||||
# Get the source and destination IPs and ports
|
||||
(src_ip, src_port, _, _) = conn.get_extra_info('peername')
|
||||
(dst_ip, dst_port, _, _) = conn.get_extra_info('sockname')
|
||||
peername = conn.get_extra_info('peername')
|
||||
sockname = conn.get_extra_info('sockname')
|
||||
|
||||
if peername is not None:
|
||||
src_ip, src_port = peername[:2]
|
||||
else:
|
||||
src_ip, src_port = '-', '-'
|
||||
|
||||
if sockname is not None:
|
||||
dst_ip, dst_port = sockname[:2]
|
||||
else:
|
||||
dst_ip, dst_port = '-', '-'
|
||||
|
||||
# Store the connection details in thread-local storage
|
||||
thread_local.src_ip = src_ip
|
||||
@ -314,6 +324,7 @@ def get_prompts(prompt: Optional[str], prompt_file: Optional[str]) -> dict:
|
||||
|
||||
#### MAIN ####
|
||||
|
||||
try:
|
||||
# Parse command line arguments
|
||||
parser = argparse.ArgumentParser(description='Start the SSH honeypot server.')
|
||||
parser.add_argument('-c', '--config', type=str, default='config.ini', help='Path to the configuration file')
|
||||
@ -401,3 +412,8 @@ asyncio.set_event_loop(loop)
|
||||
loop.run_until_complete(start_server())
|
||||
loop.run_forever()
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error: {e}", file=sys.stderr)
|
||||
traceback.print_exc()
|
||||
sys.exit(1)
|
||||
|
||||
|
Reference in New Issue
Block a user