finetune clone connection

This commit is contained in:
adator
2024-09-20 23:12:57 +02:00
parent ee039322d4
commit 2c0510b2a3
4 changed files with 35 additions and 19 deletions

View File

@@ -416,6 +416,7 @@ class Clones:
realname: str realname: str
channels: list channels: list
vhost: str = None vhost: str = None
init: bool = True
connected: bool = False connected: bool = False
UID_CLONE_DB: list[CloneModel] = [] UID_CLONE_DB: list[CloneModel] = []

View File

@@ -146,6 +146,7 @@ class Connection:
self.IrcSocket.shutdown(socket.SHUT_WR) self.IrcSocket.shutdown(socket.SHUT_WR)
self.IrcSocket.shutdown(socket.SHUT_RD) self.IrcSocket.shutdown(socket.SHUT_RD)
self.currentCloneObject.init = False
self.Base.logs.info(f"<<{self.currentCloneObject.nickname}>> Clone Disconnected ...") self.Base.logs.info(f"<<{self.currentCloneObject.nickname}>> Clone Disconnected ...")
except AssertionError as ae: except AssertionError as ae:
@@ -177,12 +178,15 @@ class Connection:
if error_value == 'Closing': if error_value == 'Closing':
self.Base.logs.info(f"<<{self.currentCloneObject.nickname}>> {response} ...") self.Base.logs.info(f"<<{self.currentCloneObject.nickname}>> {response} ...")
self.currentCloneObject.connected = False self.currentCloneObject.connected = False
else:
self.Base.logs.info(f"<<{self.currentCloneObject.nickname}>> {response} ...")
# self.signal = False # self.signal = False
match response[1]: match response[1]:
case '376': case '376':
# End of MOTD # End of MOTD
self.currentCloneObject.connected = True self.currentCloneObject.connected = True
self.currentCloneObject.init = False
for channel in self.channels: for channel in self.channels:
self.send2socket(f"JOIN {channel}") self.send2socket(f"JOIN {channel}")
@@ -192,6 +196,7 @@ class Connection:
case '422': case '422':
# Missing MOTD # Missing MOTD
self.currentCloneObject.connected = True self.currentCloneObject.connected = True
self.currentCloneObject.init = False
for channel in self.channels: for channel in self.channels:
self.send2socket(f"JOIN {channel}") self.send2socket(f"JOIN {channel}")

View File

@@ -1,5 +1,5 @@
from dataclasses import dataclass, fields, field from dataclasses import dataclass, fields, field
import random, faker, time import random, faker, time, logging
from datetime import datetime from datetime import datetime
from typing import Union from typing import Union
from core.irc import Irc from core.irc import Irc
@@ -130,7 +130,7 @@ class Clone():
clone_to_kill: list[str] = [] clone_to_kill: list[str] = []
for clone in self.Clone.UID_CLONE_DB: for clone in self.Clone.UID_CLONE_DB:
if not clone.connected and clone.alive: if not clone.connected and clone.alive and not clone.init:
clone_to_kill.append(clone.nickname) clone_to_kill.append(clone.nickname)
clone.alive = False clone.alive = False
@@ -165,6 +165,24 @@ class Clone():
found = True found = True
break break
def thread_create_clones_with_interval(self, number_of_clones:int, channels: list, connection_interval: float):
for i in range(number_of_clones):
nickname, username, realname = self.generate_names()
self.Base.create_thread(
self.thread_create_clones,
(nickname, username, realname, channels, 6697, True)
)
time.sleep(connection_interval)
self.Base.create_thread(
self.thread_change_hostname
)
# self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} :{str(number_of_clones)} clones joined the network')
self.Base.create_thread(self.thread_clone_clean_up, (5, ), run_once=True)
def thread_create_clones(self, nickname: str, username: str, realname: str, channels: list, server_port: int, ssl: bool) -> None: def thread_create_clones(self, nickname: str, username: str, realname: str, channels: list, server_port: int, ssl: bool) -> None:
Connection(server_port=server_port, nickname=nickname, username=username, realname=realname, channels=channels, CloneObject=self.Clone, ssl=ssl) Connection(server_port=server_port, nickname=nickname, username=username, realname=realname, channels=channels, CloneObject=self.Clone, ssl=ssl)
@@ -189,6 +207,7 @@ class Clone():
def generate_names(self) -> tuple[str, str, str]: def generate_names(self) -> tuple[str, str, str]:
try: try:
logging.getLogger('faker').setLevel(logging.CRITICAL)
fake = faker.Faker('en_GB') fake = faker.Faker('en_GB')
# nickname = fake.first_name() # nickname = fake.first_name()
# username = fake.last_name() # username = fake.last_name()
@@ -259,7 +278,7 @@ class Clone():
case 'clone': case 'clone':
if len(cmd) == 1: if len(cmd) == 1:
self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} :/msg {dnickname} clone connect 6') self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} :/msg {dnickname} clone connect 6 2.5')
self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} :/msg {dnickname} clone kill [all | nickname]') self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} :/msg {dnickname} clone kill [all | nickname]')
self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} :/msg {dnickname} clone join [all | nickname] #channel') self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} :/msg {dnickname} clone join [all | nickname] #channel')
self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} :/msg {dnickname} clone list') self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} :/msg {dnickname} clone list')
@@ -271,25 +290,16 @@ class Clone():
case 'connect': case 'connect':
try: try:
number_of_clones = int(cmd[2]) number_of_clones = int(cmd[2])
for i in range(number_of_clones): connection_interval = int(cmd[3]) if len(cmd) == 4 else 0.5
nickname, username, realname = self.generate_names()
self.Base.create_thread( self.Base.create_thread(
self.thread_create_clones, self.thread_create_clones_with_interval,
(nickname, username, realname, [], 6697, True) (number_of_clones, [], connection_interval)
) )
self.Base.create_thread(
self.thread_change_hostname
)
self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} :{str(number_of_clones)} clones joined the network')
self.Base.create_thread(self.thread_clone_clean_up, (5, ), run_once=True)
except Exception as err: except Exception as err:
self.Logs.error(f'{err}') self.Logs.error(f'{err}')
self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} :/msg {dnickname} clone connect [number of clone you want to connect]') self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} :/msg {dnickname} clone connect [number of clone you want to connect] [Connection Interval]')
self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} :Exemple /msg {dnickname} clone connect 6') self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} :Exemple /msg {dnickname} clone connect 6 2.5')
case 'kill': case 'kill':
try: try:

View File

@@ -1,3 +1,3 @@
{ {
"version": "5.2.7" "version": "5.2.8"
} }