Форум программистов, компьютерный форум, киберфорум
Python: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 21.05.2022
Сообщений: 22

tcpServer не получает данные

14.07.2022, 05:36. Показов 676. Ответов 8

Студворк — интернет-сервис помощи студентам
Проблема такая: Нужно написать программу-сервер, которая может принимать несколько подключений. Когда клиент подключается к серверу, он отправляет серверу симметричный ключ, который зашифрован открытым ключом. Сервер должен расшифровать симметричный ключ своим закрытым ключом и отправить расшифрованный ключ обратно клиенту.

Мой алгоритм таков: При подключении, клиент отправляет строку "1001" серверу, в ответ на которую тот посылает открытый ключ. Клиент шифрует данные и отправляет серверу, дальше все по условию. Но по какой-то причине мой сервер просто не принимает данные после "1001"! Прошу помочь разобраться.

Код сервера:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives import hashes
import socketserver
 
 
class ClientHandler(socketserver.BaseRequestHandler):
    def handle(self):
        data = self.request.recv(4096)
        print(data)
 
        if data.decode() == "1001":
            with open("public_key.key", "rb") as file:
                key = file.read()
            self.request.sendall(key)
            print("[+] Public key was sent")
        else:
            print("[+] Encrypted key is recieved")
 
            with open("pub_priv_pair.key", "rb") as key_file:
                private_key = serialization.load_pem_private_key(
                        key_file.read(),
                        password=None)
                print("[+] Private key is read")
            
            decrypted_key = private_key.decrypt(
                data,
                padding.OAEP(
                        mgf=padding.MGF1(algorithm=hashes.SHA256()),
                        algorithm=hashes.SHA256(),
                        label=None))
            print("[+] Symmetric key is decrypted")
 
            self.request.sendall(decrypted_key.encode())
            print("[+] Decrypted key was sent")
 
 
if __name__ == "__main__":
    HOST, PORT = "", 8000
    tcpServer = socketserver.TCPServer((HOST, PORT), ClientHandler)
    try:
        tcpServer.serve_forever()
    except:
        print("There was an error")
Код клиента:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives import hashes
from cryptography.fernet import Fernet
import sys
import socket
 
 
def get_public_key(socket):
    with open("public_key.key", "wb") as file:
        file.write(socket.recv(3072))
        print("[+] Public key was written")
    
    with open("public_key.key", "rb") as file:
        public_key = serialization.load_pem_public_key(
            file.read(),
            backend=default_backend()
        )
    return public_key
 
 
def encrypt_symmetric_key(public_key):
    symmetricKey = Fernet.generate_key()
    encrypted_key = public_key.encrypt(
        symmetricKey,
        padding.OAEP(
            mgf=padding.MGF1(algorithm=hashes.SHA256()),
            algorithm=hashes.SHA256(),
            label=None
        )
    )
    print("[+] Symmetric key is encrypted")
    return encrypted_key
 
 
IP = sys.argv[1]
if __name__ == "__main__":
    clientSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    clientSocket.connect((IP, 8000))
    clientSocket.send("1001".encode())
    encrypted_key = encrypt_symmetric_key(get_public_key(clientSocket))
    clientSocket.send(encrypted_key)
    print("[+] Encrypted key is sent")
    decrypted_key = clientSocket.recv(3072).decode()
    print("[+] Decrypted key is received")
    print(decrypted_key)
Сервер работает на машине Kali Linux, а клиент на Ubuntu.

Вывод программы на Kali:
b'1001'
[+] Public key was sent

Вывод программы на Ubuntu:
[+] Public key was written
[+] Symmetric key is encrypted
[+] Encrypted key is sent
[+] Decrypted key is received
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.07.2022, 05:36
Ответы с готовыми решениями:

Можно ли получить ПОТОКОВЫЕ данные из открытой книги Excel, который одновременно получает данные из Power Query
Ситуация такая. Открытый лист Excel получает данные раз в минуту с Power Query из sql-сервера. В таблице Excel каждый раз делается расчет...

$.getJSON не получает данные
Доброго времени суток! Делаю выборку данных с помощью календаря в БД, задаю дату начал и конца, вывожу alert, но он получается пустой, если...

HttpURLConnection не получает данные на планшете
Добрый день. Столкнулся со странной ситуацией, которую никак не могу понять. String path = "path"; ...

8
5012 / 1038 / 146
Регистрация: 29.01.2013
Сообщений: 6,108
14.07.2022, 15:41
Я плохо понимаю, что тут происходит, но хорошо понимаю, что тестировать софт на kali не следует. клиент-сервер для начала можно тестить вообще на одной машине
Kali - вообще не для повседневных задач.
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5905 / 3358 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
14.07.2022, 18:35
Проблема в том, что у Вас сервер принимает одно сообщение и handler этого соединения завершается. Если нужно читать больше, чем одно сообщение - этого недостаточно.
1
1 / 1 / 0
Регистрация: 21.05.2022
Сообщений: 22
14.07.2022, 18:44  [ТС]
Так тут дело вообще не в Kali. У меня вопрос по коду((

Добавлено через 1 минуту
Цитата Сообщение от Jabbson Посмотреть сообщение
Проблема в том, что у Вас сервер принимает одно сообщение и handler этого соединения завершается. Если нужно читать больше, чем одно сообщение - этого недостаточно.
А как принимать больше сообщений?
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5905 / 3358 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
14.07.2022, 18:44
в цикле можно, например
0
1 / 1 / 0
Регистрация: 21.05.2022
Сообщений: 22
14.07.2022, 18:47  [ТС]
Цитата Сообщение от Jabbson Посмотреть сообщение
в цикле можно, например
Не подскажете, где можно посмотреть пример? Или какой кусок кода нужно поместить в цикл?
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5905 / 3358 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
14.07.2022, 18:50
первая ссылка, что была в гугле - https://realpython.com/python-sockets/#echo-server
видите, где "while True" - это цикл на принятие сообщение
0
1 / 1 / 0
Регистрация: 21.05.2022
Сообщений: 22
14.07.2022, 20:08  [ТС]
Цитата Сообщение от Jabbson Посмотреть сообщение
первая ссылка, что была в гугле - https://realpython.com/python-sockets/#echo-server
видите, где "while True" - это цикл на принятие сообщение
Благодарю, попытаюсь разобраться
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5905 / 3358 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
14.07.2022, 20:09
Цитата Сообщение от slyuqi Посмотреть сообщение
Благодарю, попытаюсь разобраться
Всегда пожалуйста. Там не должно быть сложно, пару строк добавить в код.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.07.2022, 20:09
Помогаю со студенческими работами здесь

RedBeanPHP не получает данные из таблицы
Дело в том, что я использую RedBeanPHP. И я строю запросы таким образом: $userID = $_GET; R::selectDatabase('database'); ...

$_FILE не получает данные формы
<article> <div class="blockNews"><img src="data:image/jpeg;base64, <?php echo base64_encode($article->picture)?>" class="articleIMG"> ...

Клиент не получает найденные данные
Сервер: #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<iostream> #include<winsock2.h> using namespace std; ...

Сервер не получает данные с $_POST
Записываю данные яваскриптом в поле так var formData = $('#Upload_data'); var imgData = canvas.toDataURL("image/png"); ...

Ajax не получает данные от сервера
При первом клике на ссылку данные не приходят при втором клике данные приходят. Ток начинаю разбираться с history api. Буду благодарен за...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Непрерывная интеграция для пакета Python
Mr. Docker 22.06.2025
Было 4 часа утра пятницы, когда я выпустил новую версию нашей внутренней библиотеки для обработки данных. Релиз 0. 5. 2 содержал небольшой фикс для обработки дат в ISO формате, что может пойти не так?. . .
Продвинутый ETL на C# из OLTP БД в хранилище
stackOverflow 22.06.2025
Работая в сфере корпоративной аналитики, я постоянно сталкиваюсь с одним и тем же - нужны чистые, структурированные и, главное, свежие данные. Без них современные аналитические системы, машинное. . .
Мастер-класс по микросервисам на Node.js
Reangularity 21.06.2025
Node. js стал одной из самых популярных платформ для микросервисной архитектуры не случайно. Его неблокирующая однопоточная модель и событийно-ориентированный подход делают его идеальным для. . .
Управление Arduino из WPF приложения
Wired 21.06.2025
Зачем вообще связывать Arduino с WPF-приложением? Казалось бы, у Arduino есть собственная среда разработки, своя экосистема, свои способы управления. Однако при создании серьезных проектов. . .
Звёздная пыль
kumehtar 20.06.2025
Я просто это себе представляю: как создавался этот мир. Как энергия слипалась в маленькие частички. Как они собирались в первые звёзды, как во вселенной впервые появился Свет. Как эти звёзды. . .
Создание нейросети с PyTorch
AI_Generated 19.06.2025
Ключевое преимущество PyTorch — его питоновская натура. В отличие от TensorFlow, который изначально был построен как статический вычислительный граф, PyTorch предлагает динамический подход. Это. . .
JWT аутентификация в ASP.NET Core
UnmanagedCoder 18.06.2025
Разрабатывая веб-приложения, я постоянно сталкиваюсь с дилеммой: как обеспечить надежную аутентификацию пользователей без ущерба для производительности и масштабируемости? Классические подходы на. . .
Краткий курс по С#
aaLeXAA 18.06.2025
Здесь вы найдете все необходимые функции чтоб написать програму на C# Задание 1: КЛАСС FORM 1 public partial class Form1 : Form { Spisok listin = new Spisok(); . . .
50 самых полезных примеров кода Python для частых задач
py-thonny 17.06.2025
Эффективность работы разработчика часто измеряется не количеством написаных строк, а скоростью решения задач. Готовые сниппеты значительно ускоряют разработку, помогают избежать типичных ошибок и. . .
C# и продвинутые приемы работы с БД
stackOverflow 17.06.2025
Каждый . NET разработчик рано или поздно сталкивается с ситуацией, когда привычные методы работы с базами данных превращаются в источник бессонных ночей. Я сам неоднократно попадал в такие ситуации,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
OSZAR »