Update CLRadio-Hybrid-A-1-ii-Integra.py
This commit is contained in:
145
CLRadio-Hybrid-A-1-ii-Integra.py
Normal file
145
CLRadio-Hybrid-A-1-ii-Integra.py
Normal file
@@ -0,0 +1,145 @@
|
||||
import socket
|
||||
import threading
|
||||
from pathlib import Path
|
||||
import sys
|
||||
|
||||
# ----- GLOBALS & LOCKS ----- #
|
||||
# This prevents the Receiver and Sender from printing over each other
|
||||
print_lock = threading.Lock()
|
||||
|
||||
# ----- KNOWN CONNECTION FILE LOGIC (Compatibility Kept) ----- #
|
||||
|
||||
def read_specific_line(filename, line_number):
|
||||
try:
|
||||
with open(filename, 'r') as file:
|
||||
for index, line in enumerate(file):
|
||||
if index == line_number:
|
||||
current_line = line.rsplit(": ", 1)
|
||||
return current_line[1].strip()
|
||||
except Exception:
|
||||
return None
|
||||
return None
|
||||
|
||||
def known_connection_file(mode, nick=None, ip_addr=None, no_of_ip_chosen=None):
|
||||
file_path = Path("known_connections.txt")
|
||||
if not file_path.exists():
|
||||
with open(file_path, 'w') as f: f.write("")
|
||||
|
||||
if mode == "read":
|
||||
with open(file_path, 'r') as f:
|
||||
for i, line in enumerate(f, 1):
|
||||
print(f"[{i}] {line}", end="")
|
||||
elif mode == "select":
|
||||
return read_specific_line(file_path, no_of_ip_chosen - 1)
|
||||
elif mode == "write":
|
||||
with open(file_path, 'a') as f:
|
||||
f.write(f"{nick}: {ip_addr}\n")
|
||||
elif mode == "clear":
|
||||
with open(file_path, 'w') as f: f.write("")
|
||||
|
||||
# ----- THE RECEIVER THREAD (Runs in background) ----- #
|
||||
|
||||
def background_receiver():
|
||||
host = '0.0.0.0'
|
||||
port = 443
|
||||
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
||||
try:
|
||||
s.bind((host, port))
|
||||
except PermissionError:
|
||||
with print_lock:
|
||||
print("\n[!] ERROR: Process Needs Elevation.")
|
||||
return
|
||||
|
||||
s.listen(5)
|
||||
|
||||
while True:
|
||||
c, addr = s.accept()
|
||||
with print_lock:
|
||||
print(f"\n[+] {addr}")
|
||||
|
||||
while True:
|
||||
try:
|
||||
data = c.recv(1024).decode()
|
||||
if not data:
|
||||
break
|
||||
with print_lock:
|
||||
# The \r ensures we clear any partially typed input line
|
||||
print(f"\r [R] {addr[0]}: {data}\n > ", flush=True)
|
||||
except Exception:
|
||||
break
|
||||
c.close()
|
||||
|
||||
# ----- THE MAIN SENDER LOGIC ----- #
|
||||
|
||||
def port_selection():
|
||||
with print_lock:
|
||||
print("\n" + "="*60)
|
||||
print(" P7-InfraNET CLRadio-Hybrid A-1-ii Integra | P7MJ")
|
||||
print("="*60)
|
||||
print("[1] Connect to IPv4")
|
||||
print("[2] Wait for a connection")
|
||||
print("[x] Exit App")
|
||||
choice = input(" > ")
|
||||
if choice == "x": sys.exit()
|
||||
if choice == "1":
|
||||
known_connection_file("read")
|
||||
print("[n] New profile\n[d] Delete all profiles")
|
||||
sub_choice = input("\n > ")
|
||||
if num.isdigit():
|
||||
return known_connection_file("select", no_of_ip_chosen=int(num))
|
||||
elif sub_choice == "n":
|
||||
nick = input("Profile Nickname > ")
|
||||
ip = input("Profile IPv4 > ")
|
||||
known_connection_file("write", nick, ip)
|
||||
return None
|
||||
elif sub_choice == "3":
|
||||
areusure = input("ARE YOU SURE? This is irreversible! [Yes/cancel]")
|
||||
if areusure == "Yes":
|
||||
known_connection_file("clear")
|
||||
return None
|
||||
if choice == "2":
|
||||
print("Waiting...", end = "\r")
|
||||
return None
|
||||
|
||||
def run_app():
|
||||
# Start background receiver immediately
|
||||
recv_thread = threading.Thread(target=background_receiver, daemon=True)
|
||||
recv_thread.start()
|
||||
|
||||
while True:
|
||||
target_ip = None
|
||||
while not target_ip:
|
||||
target_ip = port_selection()
|
||||
|
||||
try:
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
s.settimeout(5)
|
||||
s.connect((target_ip, 443))
|
||||
s.settimeout(None)
|
||||
|
||||
with print_lock:
|
||||
print(f"\r[!] Connected to {target_ip}. Type 'exit' to disconnect.", flush=True)
|
||||
|
||||
while True:
|
||||
msg = input(" [S] ")
|
||||
if msg.lower() == 'exit':
|
||||
break
|
||||
try:
|
||||
s.send(msg.encode())
|
||||
except Exception:
|
||||
print("[!] FATAL: Connection lost at second to last message!")
|
||||
break
|
||||
s.close()
|
||||
except Exception as e:
|
||||
print(f"[!] Could not connect to {target_ip}: {e}")
|
||||
|
||||
if __name__ == '__main__':
|
||||
while True:
|
||||
try:
|
||||
run_app()
|
||||
except KeyboardInterrupt:
|
||||
input("\n[!] User terminated application! Press ENTER to continue...")
|
||||
sys.exit(0)
|
||||
|
||||
Reference in New Issue
Block a user