120 lines
3.3 KiB
Python
120 lines
3.3 KiB
Python
import sqlite3
|
||
import os
|
||
import paramiko
|
||
from typing import Callable
|
||
|
||
|
||
def create_database():
|
||
conn = sqlite3.connect("config.db")
|
||
cursor = conn.cursor()
|
||
cursor.execute("""
|
||
CREATE TABLE IF NOT EXISTS config (
|
||
tg_bot_token TEXT NOT NULL,
|
||
chat_id TEXT NOT NULL,
|
||
cb TEXT NOT NULL,
|
||
ma INTEGER NOT NULL,
|
||
delay INTEGER NOT NULL,
|
||
port INTEGER NOT NULL
|
||
)
|
||
""")
|
||
conn.commit()
|
||
conn.close()
|
||
|
||
|
||
kf = "server_key.pem"
|
||
|
||
|
||
def generate_rsa_key(key_filename=kf, key_size=2048):
|
||
key = paramiko.RSAKey.generate(key_size)
|
||
key.write_private_key_file(key_filename)
|
||
print(f"Key generated: {key_filename}")
|
||
print("Goodbye!")
|
||
|
||
|
||
def delete_existing_key():
|
||
delete_input = input(
|
||
f"Key {kf} exists. Delete it? (y/n): ").strip().lower()
|
||
if delete_input == 'y':
|
||
os.remove(kf)
|
||
print(f"Key {kf} deleted.")
|
||
generate_rsa_key()
|
||
else:
|
||
print('Okay, goodbye!')
|
||
|
||
|
||
def prompt_for_key_generation():
|
||
if os.path.exists(kf):
|
||
delete_existing_key()
|
||
else:
|
||
generate_rsa_key()
|
||
|
||
|
||
def handle_user_input():
|
||
user_input = input("Enter 1 to generate the key or 0 to exit: ").strip()
|
||
if user_input == "1":
|
||
prompt_for_key_generation()
|
||
elif user_input == "0":
|
||
print("Bye")
|
||
else:
|
||
print("Invalid input. Please try again.")
|
||
|
||
|
||
def main1():
|
||
handle_user_input()
|
||
|
||
|
||
def save_config(tg_bot_token, chat_id, cb, ma, delay, port):
|
||
conn = sqlite3.connect("config.db")
|
||
cursor = conn.cursor()
|
||
cursor.execute("DELETE FROM config")
|
||
cursor.execute("""
|
||
INSERT INTO config (tg_bot_token, chat_id, cb, ma, delay, port)
|
||
VALUES (?, ?, ?, ?, ?, ?)
|
||
""", (tg_bot_token, chat_id, cb, ma, delay, port))
|
||
conn.commit()
|
||
conn.close()
|
||
|
||
|
||
def check(prompt: str, condition: Callable[[int], bool], default=None) -> int:
|
||
while True:
|
||
try:
|
||
raw = input(prompt + ": ").strip()
|
||
|
||
if not raw and default is not None:
|
||
return default
|
||
|
||
value = int(raw)
|
||
if condition(value):
|
||
return value
|
||
print("Incorrect value, please try again..")
|
||
except ValueError:
|
||
print("You must enter an integer value.")
|
||
|
||
|
||
def main():
|
||
print("Сonfigure honeypot for yourself:")
|
||
|
||
while True:
|
||
tg_bot_token = input("Telegram Bot Token: ").strip()
|
||
if not tg_bot_token:
|
||
print("Token can't be blank")
|
||
else:
|
||
break
|
||
|
||
chat_id = check("Telegram Chat ID (botapi) ", lambda x: x < 0)
|
||
cb = "SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.10"
|
||
ma = check("Max Attempts (leave blank for default value of 3)",
|
||
lambda x: x > 0, default=3)
|
||
delay = check("Delay (in ms(leave blank for default value of 929)) ",
|
||
lambda x: x >= 0, default=929)
|
||
port = check("Port (leave blank for default value of 22)",
|
||
lambda x: 0 < x < 65536, default=22)
|
||
|
||
save_config(tg_bot_token, chat_id, cb, ma, delay, port)
|
||
print("The configuration is saved, now you can run honeypot")
|
||
|
||
|
||
if __name__ == "__main__":
|
||
create_database()
|
||
main()
|
||
main1()
|