OK、SSLソケット接続を介してサーバーとクライアントの間で通信を行ったり来たりしようとしています。これを行うための最良の方法は、それぞれに2つのスレッドを実装し、各スレッドがそれぞれサーバーとクライアントとして機能することでした.しかし、このコードを実装すると(明らかに、他のサーバー/クライアントで反対の対応するポートを使用します) :
#secserv.py
import socket
from OpenSSL import SSL
import threading
import time
class SecureIn(threading.Thread):
context = SSL.Context(SSL.SSLv23_METHOD)
context.use_privatekey_file('key')
context.use_certificate_file('cert')
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s = SSL.Connection(context, s)
s.bind(('', 5570))
def run(self):
while True:
self.s.listen(5)
(connection, address) = self.s.accept()
print repr(connection.recv(5570))
class SecureOut(threading.Thread):
time.sleep(6)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('localhost', 12345))
sslSocket = socket.ssl(s)
print repr(sslSocket.server())
print repr(sslSocket.issuer())
def run(self):
sslSocket.write('Hello secure socket\n')
s.close()
si = SecureIn()
si.start()
time.sleep(6)
so = SecureOut()
so.start()
次のエラーが表示されます。
Traceback (most recent call last):
File "secserv.py", line 25, in <module>
class SecureOut(threading.Thread):
File "secserv.py", line 28, in SecureOut
s.connect(('localhost', 12345))
File "/usr/lib/python2.7/socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 111] Connection refused
別の方法として、すべてのクライアントにブロードキャスト メッセージを送信するスタンドアロン サーバーを取得しようとしました。高低を検索しましたが、SSLソケットでそれを行う有効な方法が見つからないようです。通常のソケットのみです。s.write()
どちらかを試すか、s.sendall()
このエラーが発生すると:
Traceback (most recent call last):
File "secserv.py", line 19, in <module>
s.write('hello client\n')
OpenSSL.SSL.Error: [('SSL routines', 'SSL_write', 'uninitialized')]
このコードから:
import socket
from OpenSSL import SSL
context = SSL.Context(SSL.SSLv23_METHOD)
context.use_privatekey_file('key')
context.use_certificate_file('cert')
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s = SSL.Connection(context, s)
s.bind(('', 12345))
while True:
s.listen(5)
(connection, address) = s.accept()
print repr(connection.recv(12345))
#This could also be s.sendall()
s.write('hello client\n')
私を助けてください StackOverFlow、あなたは私の唯一の希望です。これは簡単なはずですが、この時点で私の脳は非常に緊張していて、もう考えることができません.
また、私はPythonにかなり慣れていないので、クラスなどを操作/ロードする方法について、私が理解できない何かがある可能性が非常に高いです。
編集:OK、このコードが悪いことはわかっています。これは市場に出回る製品ではなく、ライブで実行されることはありません。これは私がコンセプトを機能させようとしているだけであり、そのコンセプトは、サーバーとクライアントがpython ssl接続を介して互いにメッセージを送信することです.
これがひどいコードであることはわかっていますが、サーバーにメッセージを送り返す方法を知る必要があるだけです。これを試みるたびに最後にエラーが発生するからです。