2009-05-18 3 views
2

내 자신의 CRM에 포함시킬 자체 원격 지원/화면 공유 도구를 개발하려는 변경 사항이있는 경우 어디로 가야합니까?원격 제어 API 또는 시작하는 방법?

나는 의사 소통에 대해 아무 것도 이해하지 못하지만 그러한 생각에 스스로 참여하고 싶습니다. 내 질문은, 어떤 기본적인 지식과 기본적인 구조는 LogMeIn/CoPilot/etc 제품을 만드는 것입니다?

나는이 작업을 수행하는 방법에 대한

아이디어, 또는이 있다면 ... 조엘 그가 ++ C의 전체 프로토콜을 개발하기 위해 화려한 동료를 사용하는 것이 (몇 년 전) 일 팟 캐스트에 부조 종사에 대해 이야기 기억 저를 기다리고있는 오픈 API?

답변

4

이 문서의 내용은 How VNC, Fog Creek Copilot and other remote control software works입니다.

블로그 게시물의 내용에서 여기에 몇 가지 추가 정보를 제공 하겠지만, 이는 Fog Creek Copilot 소스 코드에 더 구체적입니다. 이 모든 데이터는 소스 코드를 살펴 보았습니다.

기본적으로 Copilot은 C++에서 처음부터 작성된 것이 아니라 대신 GPL로 작성된 TightVNC로 작성되었습니다. 예, 이것은 부조 연구원의 주요 출처도 제공해야 함을 의미합니다. Fog Creek copilot source code here을 얻을 수 있습니다. 그리고 내가 이해하는 한, GPL로 만들었 으면이 프로젝트의 소스 코드에서 솔루션을 구축 할 수 있습니다.

프로젝트는 Mac 버전과 Windows 버전으로 나뉩니다. Mac 버전은 객관적인 C 언어로 작성되었으며 Windows 버전은 Win32 C++ (MFC 아님)로 작성되었습니다. Windows 버전에는 VS 2008에서 만든 도우미 솔루션과 VS 2008에서 만든 호스트 솔루션 (호스트는 도움을받는 사람)이 있습니다. 크기가 크기 때문에 Trolltech의 Qt를 사용하지 않았다고 생각합니다. 중요했습니다 매번 도움을 필요로하는 사람과 모든 사람을 돕는 모든 사람이 다운로드해야하기 때문에 다운로드를 아주 작게 유지해야합니다.

x64 및 IA64 구성이 없으므로 Windows의 모든 코드는 x86 프로세스로만 실행됩니다. 다른 32 비트 프로세스와 마찬가지로 WOW64를 통해 64 비트 Windows에서 실행할 수 있습니다.

제가 알고 있듯이 개발은 대부분 VM에서 실행되는 호스트로 수행되었습니다. 도우미의 개발은 데스크톱에서 수행되었습니다.

Copilot 소스 코드는 부스트 1.38과 몇 가지 다른 타사 라이브러리를 사용합니다. 이러한 라이브러리에는 NAT 통과를위한 STUNT, MatrixSSL, libntlm (Microsoft NTLM 인증 용 라이브러리) 및 omnithread (스레딩 및 동기화 라이브러리)가 포함됩니다.

대부분 bsd 스타일 소켓을 사용하지만 boost :: asio에도 네트워킹 코드가 있습니다. boost :: asio 1.38에는 boost 1.40에서 수정 된 많은 버그가 있기 때문에 이것은 문제가됩니다. 프로젝트에는 Windows 훅 dll뿐만 아니라 키보드, 마우스 및 기타 Windows 메시지를 호스트에 연결합니다.

Windows 셸과 비슷하지 않지만 기본적으로 3 개의 바이너리 (호스트, deleter 및 hooks dll)가 포함 된 셸 프로젝트가 있습니다. 그것들을 추출합니다.

반사체 및 웹 사이트의 소스 코드는 projectaardvark.com의 블로그 게시물에서 알 수 있듯이 C#, C++의 다른 모든 것입니다. 리플렉터의 목적은 NAT traversal을 돕는 것입니다. 덧붙여 projectaardvark.com을 대신하는 새로운 블로그는 Air Traffic입니다.

VNC는 원격 프레임 버퍼 프로토콜에서 제외됩니다. RFB 프로토콜 자체는 많은 프로토콜 경험이있는 경우 그리 어렵지 않습니다.

0

원격 데스크톱 activeX 컨트롤을 살펴볼 수 있습니다. 이 경우 프로토콜은 RPC입니다 (잘 문서화되어 있습니다). 또한 통신 및 원격 UI 레이어가 모두 완료되었으므로 간단한 UI 셸 코드를 작성해야합니다.