Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
92 changes: 92 additions & 0 deletions client.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
import socket
import threading

class Client(socket.socket):

def __init__(self):
self.sock = socket.socket()
self.lock = threading.Lock()

@property
def sending(msg, sock):
sock.send(msg.encode())

@property
def receiving(sock):
sock.recv(1024).decode()

def register(self, sock):
name = input()
self.sending(name, sock)
password = input()
self.sending(password, sock)

def login(self,sock, msg):
print(msg)
password = input()
self.sending(password, sock)
mes = self.receiving(sock)
if mes == "Welcome":
pass
else:
self.login(sock, "Input correct password")

def connection(self):
self.host = input("Input host: ")
port= input("Input port: ")
if self.host=="":
self.host = "127.0.0.1"
if port == "":
self.port=9090
else:
self.port=int(port)
self.sock.connect((self.host, self.port))
print("Connection")

def hi(self):
data = self.receiving(self.sock)
if data == "Register":
self.register(self.sock)
elif data == "Login":
self.login(self.sock, "Input passwd")
data = self.receiving(self.sock)
print(data)

def chatting(self):
print("Input quit if you want to exit")
send1 = threading.Thread(target=self.send_msg_to_chat)
recv1 = threading.Thread(target=self.recv_msg_from_chat)

send1.start()
recv1.start()

def recv_msg_from_chat(self):
while True:
data = self.receiving(self.sock)
if not data:
continue
else:
print(data)

def send_msg_to_chat(self):
with self.lock:
msg=input()
while msg!="quit":
self.sending(msg, self.sock)
msg=input()

def closing(self):
self.sock.close()
print("Stop connecting")

def run(self):
self.connection()
self.hi()
self.chatting()

sock = Client()
sock.run()




47 changes: 47 additions & 0 deletions port.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
from queue import Queue
import socket
import threading

host = "127.0.0.1"
queue = Queue()
open_ports = []

def portscan(port):
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((host, port))
return True
except:
return False

def get_ports(count):
for port in range(count):
queue.put(port)

def worker():
while not queue.empty():
port=queue.get()
if portscan(port):
print("Port {} is openned!".format(port))
open_ports.append(port)

import time
import sys

def run(threads, count):
get_ports(count)
thread_list=[]
for i in range(threads):
thread = threading.Thread(target=worker)
thread_list.append(thread)
time.sleep(0.001)
sys.stdout.write("\r%d%%" % i)
sys.stdout.flush()
sys.stdout.write('\n')
for thread in thread_list:
thread.start()
for thread in thread_list:
thread.join()
print("Open ports are: ", open_ports)

run(100, 1024)
146 changes: 146 additions & 0 deletions server.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
import socket
import sys
import logging
import threading

log_file = logging.FileHandler('myserver.log')
console_out= logging.StreamHandler()

logging.basicConfig(handlers = (log_file, console_out), format = '[%(asctime)s | %(levelname)s] : %(message)s', datefmt='%m.%d.%Y %H:%M:%S', level = logging.INFO)

class Server(socket.socket):

def __init__(self):
self.sock = socket.socket()
self.port = 9090
self.host = '127.0.0.1'
self.threads=[]
self.lock = threading.Lock()
self.data=""

@property
def sending(msg, sock):
sock.send(msg.encode())

@property
def receiving(sock):
sock.recv(1024).decode()

def close_server(self):
logging.info("Stop server")

#Очистка логов
with open('myserver.log', 'w'):
pass

self.sock.close()
sys.exit()

#Очистка файла идентификации
f = open('clients.txt', 'r+')
f.truncate()


def register(self, conn, addr):
self.sending("Input your name")
name = self.receiving(conn)
self.sending("Input your password")
password = self.receiving(conn)
with open('clients.txt', 'w') as file:
file.write("{addr[0]}:{name}:{password}:\n")

def login(self, conn, addr):
with open('clients.txt', 'r+') as file:
for line in file:
if addr[0] in line:
line=line.split(":")
password = line[2]

self.sending("Type password")
passwd = self.receiving(conn)
if passwd == password:
conn.sending("Welcome", conn)
self.receiving(conn)
else:
conn.sending("Wrong password", conn)
self.login(conn, addr)

def bind(self):
while True:
try:
sock.bind(('', self.port))
break
except:
self.port+=1
logging.info("Server started")

def listen(self, count):
self.sock.listen(count)

#пауза
socket.settimeout(0.1)

logging.info("Server is listenning")

def connecting(self):
thread = threading.Thread(target=self.connecting)
self.threads.append(thread)

conn, addr = self.sock.accept()
logging.info("Client connection")
thread.start()

self.hi(conn, addr)

def hi(self, conn, addr):
with open('clients.txt', 'r+') as file:
for line in file:
if addr[0] not in line:
self.sending("Register", conn)
self.register(conn, addr)
else:
self.sending("Login", conn)
self.login(conn, addr)

with open('clients.txt', 'r+') as file:
for line in file:
if addr[0] in line:
line=line.split(":")
name = line[1]

msg = "Hello " + name
self.sending(msg, conn)

self.chatting(conn)

def chatting(self, conn, addr):

send=threading.Thread(target=self.send_msg_to_chat, args=[conn])
recv = threading.Thread(target = self.recv_msg_from_chat, args=[conn, addr])

send.start()
recv.start()

def recv_msg_from_chat(self, conn, addr):
while True:
data = self.receiving(conn)
logging.info("Receive message")
self.data = self.data + data + '\n'

def send_msg_to_chat(self, conn):
while True:
with self.lock:
self.sending(self.data, conn)
logging.info("Send message to clients")

sock = Server()

try:
sock.bind()
print(port)
sock.listen(5)
while True:
sock.connecting()
except:
sock.close_server()