2009-08-07 3 views
1

OpenSSL 라이브러리에 pyOpenSSL 인터페이스를 사용하고 있지만 필요한 일부 기능이 누락되어 있으며 이러한 메서드를 지원하도록 수정하지 못하게하고 있습니다 (다양한 원인).개체의 내부 구조에서 포인터에 액세스

그래서 내가 성취하고자하는 것은 OpenSSL 객체 포인터를 검색하는 것입니다. 그 후에, 나는 ctypes을 통해 빠진 함수를 호출 할 수있을 것이다. 가장 좋은 방법은 무엇입니까?

이미 id()를 사용하여 pyOpenSSL 개체에 대한 포인터를 얻을 수 있음을 알게되었습니다. 어떻게하면 ssl 변수에 액세스 할 수 있습니까? pyOpenSSL/connections.h에서

: 당신이 그들과 함께 아무것도 할 수

typedef struct { 
     PyObject_HEAD 
     SSL     *ssl; 
     ssl_ContextObj  *context; 
     PyObject   *socket; 
     PyThreadState  *tstate; 
     PyObject   *app_data; 
    } ssl_ConnectionObj; 

답변

3

포인터는 정말, 파이썬 훨씬 이해가되지 않습니다. 그것들은 정수 일뿐입니다. id 메소드를 사용하여 객체의 주소를 알 수 있습니다. 하지만 그게 바로 그 주소입니다. 포인터가 아니므로 아무 것도 할 수 없습니다.

다음과 같이 표시 될 수도 있습니다. Python의 모든 것이 포인터입니다. pyOpenSSL 객체 에 대한 변수는 포인터입니다. 그러나 pyOpenSSL 객체에 대한 포인터이며, 연결 구조에 대한 포인터는 아닙니다. 해당 구조체에 직접 액세스 할 가능성은 거의 없습니다.

그럼 대신 무엇을하고 싶은지 말해야합니다. 어쩌면 또 다른 해결책이있을 것입니다.

+0

pyOpenSSL에서 사용할 수없는 SSL_set_verify 함수를 사용하고 싶습니다. (SSL 연결이 아닌 컨텍스트 개체에만 set_verify가 있습니다) pyOpenSSL을 수정하고 싶지 않습니다. (우분투 패키지를 사용하고 싶습니다. 8.04 패치를 제공하더라도 수정되지 않는 LTS). – math

+0

일반적으로 노출되지 않는 기능은 사용할 수 없습니다. pyOpenSSL을 사용하지 않고 그냥 ctypes를 사용하면이 작업을 수행 할 수 있습니다. ctypes에 익숙하지는 않지만 pyOpenSSL에서 올바른 핸들을 얻는 것이 어려울 수 있으므로 혼합으로 사용할 수 있을지는 의문입니다. 나는 패치를 제출하고 소스에서 pyOpenSSL을 설치하는 것이 가장 좋습니다. –

관련 문제