2012-09-17 6 views
3

프로토 타입을 준비하려고하는데 연결하는 데 문제가 있습니다. 클라이언트와 서버 모두 OpenSSL을 사용하고 있습니다. socket.error : [Errno 111] Connection refused

#!/usr/bin/env python 

import SocketServer 
import json 
from OpenSSL import SSL 
import os 
import socket 

TERMINATION_STRING = "Done" 

CERTIFICATE_PATH = os.getcwd() + '/CA/certs/01.pem' 
KEY_PATH = os.getcwd() + '/CA/private/key.pem' 

class SSLThreadingTCPServer(SocketServer.ThreadingTCPServer): 
    def __init__(self, address, handler): 
     SocketServer.ThreadingTCPServer.__init__(self, address, handler) 

     ctx = SSL.Context(SSL.SSLv23_METHOD) 

     #ctx.use_privatekey_file(KEY_PATH) 
     #ctx.use_certificate_file(CERTIFICATE_PATH) 
     self.socket = SSL.Connection(ctx, socket.socket(self.address_family, self.socket_type)) 

     print "Serving:", address[0], "on port:", address[1] 



class MemberUpdateHandler(SocketServer.BaseRequestHandler): 
    def setup(self): 
     print self.client_address, "connected" 

    def handle(self): 
     data = "" 
     while True: 
      data += self.request.recv(1024).encode('utf-8').strip 
      if data[-4:] == "Done": 
       print "Done" 
       break 

      dataStrings = data.split(' ') 
      for item in dataStrings: 
       print item 
if __name__ == "__main__": 
    ADDRESS = 'localhost' 
    PORT = 42424 
    HOST = (ADDRESS, PORT) 

    s = SSLThreadingTCPServer(HOST, MemberUpdateHandler) 
    s.serve_forever() 

그리고 클라이언트 : 마지막으로

#!/usr/bin/env python 

from OpenSSL import SSL 
import socket 
import os 

HOST = 'localhost' 
PORT = 42424 
ADDRESS = (HOST, PORT) 

CERTIFICATE_FILE = os.getcwd() + '/CA/certs/02.pem' 

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

ctx = SSL.Context(SSL.SSLv23_METHOD) 
sslSock = SSL.Connection(ctx, sock) 
sslSock.connect(ADDRESS) #THIS IS WHERE IT FAILS 

items = "this is a test Done" 

sslSock.sendall(items) 

sslSock.close() 

오류 : 어떤 도움을 주시면 감사하겠습니다

File "SSLClient.py", line 19, in <module> sslSock.connect(ADDRESS) 
File "<string>", line 1, in connect 
socket.error: [Errno 111] Connection refused 

. 나는 뭔가를 놓치고있는 느낌을 받았지만 네트워크 프로그래밍에 익숙하지 않았습니다. 서버가 실행되는 동안

netstat -tpn 출력 : 당신이 당신의 하위 클래스에서

SocketServer.ThreadingTCPServer.__init__(self, address, handler)

전화

(Not all processes could be identified, non-owned process info 
will not be shown, you would have to be root to see it all.) 

Active Internet connections (w/o servers) 
Proto Recv-Q Send-Q Local Address   Foreign Address   State  PID/Program name 
tcp  0  0 198.183.6.199:59724  74.125.227.0:80   ESTABLISHED 2128/google-chrome 
tcp  0  0 198.183.6.199:49758  74.125.227.16:80  ESTABLISHED 2128/google-chrome 
tcp  0  0 198.183.6.199:39299  69.30.156.16:443  ESTABLISHED 2128/google-chrome 
tcp  0  0 198.183.6.199:44128  23.0.38.218:80   TIME_WAIT - 
tcp  0  0 198.183.6.199:41272  64.34.119.101:80  ESTABLISHED 2128/google-chrome 
tcp  0  0 198.183.6.199:39420  69.30.156.26:443  ESTABLISHED 2128/google-chrome 
tcp  0  0 198.183.6.199:39418  69.30.156.26:443  ESTABLISHED 2128/google-chrome 
tcp  0  0 198.183.6.199:41218  64.34.119.101:80  ESTABLISHED 2128/google-chrome 
tcp  0  0 198.183.6.199:56224  198.183.6.22:22   ESTABLISHED 3156/ssh 
tcp  0  0 198.183.6.199:54281  74.125.227.10:443  ESTABLISHED 2128/google-chrome 
tcp  0  0 198.183.6.199:46349  69.30.156.11:443  ESTABLISHED 2128/google-chrome 
tcp  0  0 198.183.6.199:54380  74.125.227.62:443  ESTABLISHED 2128/google-chrome 
tcp  0  0 198.183.6.199:42252  75.126.125.212:80  ESTABLISHED 2128/google-chrome 
tcp  0  0 198.183.6.199:39300  69.30.156.16:443  ESTABLISHED 2128/google-chrome 
tcp  0  0 198.183.6.199:53321  74.125.227.15:443  ESTABLISHED 2128/google-chrome 
tcp  0  0 198.183.6.199:60669  74.125.227.0:80   ESTABLISHED 2128/google-chrome 
tcp  0  0 198.183.6.199:54285  74.125.227.10:443  ESTABLISHED 2128/google-chrome 
tcp  0  0 198.183.6.199:37783  74.125.137.125:5222  ESTABLISHED 2128/google-chrome 
tcp  0  0 198.183.6.199:897  198.183.6.22:2049  ESTABLISHED - 
tcp  0  0 198.183.6.199:45040  69.171.248.16:443  ESTABLISHED 2128/google-chrome 
tcp  0  0 198.183.6.199:54286  74.125.227.10:443  ESTABLISHED 2128/google-chrome 
tcp  0  0 198.183.6.199:54284  74.125.227.10:443  ESTABLISHED 2128/google-chrome 
tcp  0  0 198.183.6.199:38499  74.125.227.21:443  ESTABLISHED 2128/google-chrome 
tcp  0  0 198.183.6.199:54157  173.194.33.47:443  ESTABLISHED 2128/google-chrome 
tcp  0  0 198.183.6.199:44312  70.84.101.150:6667  ESTABLISHED 5776/xchat 
tcp  0  0 198.183.6.199:46074  69.30.156.32:80   ESTABLISHED 2128/google-chrome 
tcp  0  0 198.183.6.199:39298  69.30.156.16:443  ESTABLISHED 2128/google-chrome 
tcp  0  0 198.183.6.199:58444  74.125.227.16:443  ESTABLISHED 2128/google-chrome 
tcp  0  0 198.183.6.199:39056  198.183.6.100:993  ESTABLISHED 3180/thunderbird-bi 
tcp  0  0 198.183.6.199:54283  74.125.227.10:443  ESTABLISHED 2128/google-chrome 
tcp  0  0 198.183.6.199:54910  173.194.64.116:80  ESTABLISHED 2128/google-chrome 
tcp  0  0 198.183.6.199:10050  198.183.6.231:34955  TIME_WAIT - 
tcp  0  0 198.183.6.199:56503  72.247.172.20:80  ESTABLISHED 2128/google-chrome 
tcp  0  0 198.183.6.199:52454  173.194.64.95:443  ESTABLISHED 2128/google-chrome 
tcp  0  0 198.183.6.199:968  198.183.6.11:2049  ESTABLISHED - 
tcp  0  0 198.183.6.199:39419  69.30.156.26:443  ESTABLISHED 2128/google-chrome 
tcp  0  0 198.183.6.199:52088  74.125.227.0:443  ESTABLISHED 2128/google-chrome 
tcp  0  0 198.183.6.199:33184  198.183.6.1:6667  ESTABLISHED 5776/xchat 
tcp  0  0 198.183.6.199:39417  69.30.156.26:443  ESTABLISHED 2128/google-chrome 
+0

:

는 요약에 서버를 변경해보십시오. 포트 번호는 0-65535입니다. – Neal

+0

포트 번호를 범위 내로 변경했지만 여전히 오류가 발생합니다. – Lunchbox

+0

당신이 어떤 운영체제를 사용하고 있고, 서버가 돌아가고있는 동안'netstat -tpn'의 결과는 무엇입니까? 방화벽을 구성 했습니까? – phihag

답변

2

에서, ThreadingTCPServer 소켓을 생성하고 바인드을/수신합니다. 그 후에 SSL 소켓을 만들려면

self.socket = SSL.Connection(ctx, socket.socket(self.address_family, self.socket_type)) 

을 입력하십시오. 이 소켓은 연결되지 않습니다.

SocketServer.ThreadingTCPServer.__init__(self, address, handler, bind_and_activate=False)

주 마지막 인자 : 당신이 필요가있는 무엇을 다르게 슈퍼 클래스의 생성자를 호출합니다. 이렇게하면 수퍼 클래스가 자신이 만든 소켓을 바인딩하지 못하게됩니다. 그런 다음 소켓을 만든 후 self.server_bind()self.server_activate()을 호출하여 만든 소켓이 올바르게 설정되어 있는지 확인하십시오. 당신의 포트 번호가 너무 높으면, 하나를 들어

class SSLThreadingTCPServer(SocketServer.ThreadingTCPServer): 
    def __init__(self, address, handler): 
     SocketServer.ThreadingTCPServer.__init__(self, address, handler, bind_and_activate=False) 

     ctx = SSL.Context(SSL.SSLv23_METHOD) 

     #ctx.use_privatekey_file(KEY_PATH) 
     #ctx.use_certificate_file(CERTIFICATE_PATH) 
     self.socket = SSL.Connection(ctx, socket.socket(self.address_family, self.socket_type)) 
     self.server_bind() 
     self.server_activate() 


     print "Serving:", address[0], "on port:", address[1] 
+0

감사합니다. 연결이 거부 된 문제가 해결되었습니다. 이제 핸드 쉐이크를 완료 할 수 없습니다. 진행! – Lunchbox

+0

'Debian 4.7.2-5 x64'에서 저에게 잘 돌아 가지 않았습니다. 'netstat -tpn'에 대한 호출이 아무런 관심을 보이지 않았습니다. –

관련 문제