Windows에서 프로그래밍을 할 때에는 초보인 경우 독립되어 져야 할 모듈과 GUI 모듈이 혼재되어 있는 경우가 많습니다(예전에 델파이에서 웹서버 모듈(CGI)을 만들 때, 중간에 ShowMessage API를 사용했었던 적이 있었죠. ㅎㅎ). 또한, 이는 숙련된 개발자에게도 개발 시간이 없거나 하는 경우 이런 모습을 종종 볼 수가 있죠. 반면에 Linux의 경우에는 CLI(Command Line Interface)를 통해 Core 부분과 GUI 부분을 떨어 뜨려 놓는 경우가 많습니다.


모듈들을 철저하게 구분을 하려면 솔직히 설게 시간이 더 많이 들어 갑니다. 또한 같은 언어(Computer Language)가 아닌 타 언어끼리의 Interface가 가능해 지기 위해서는, 기존의 전형적인 함수 Call 방식(API를 호출하는)을 사용하거나, 아니면 Pure Virtual Interface를 만들어야 합니다. 하나의 소스로 플랫폼(OS)과 독립된 모듈을 만드는 것은 더더욱 어렵죠.


차기 SnoopSpy를 만들기 위해서 이런 저런 많은 설계들을 해 보았습니다. 물론 설계라고 해서 컴퓨터 앞에 앉아서 문서를 만든다는 얘기는 아니고, 길거리 다니면서, TV를 보면서, 밥을 먹으면서 생각을 하나둘씩 한 정도...


이제 본격적으로 작업을 시작할 예정입니다. 차기 SnoopSpy의 모습은 다음과 같습니다.


1. OS에 상관 없이 돌아 갈 수 있는 모듈을 만든다.


2. 어쩔 수 없이 플랫폼 종속적인 모듈은 가급적이면 줄이도록 노력한다.


3. Core 부분과 GUI 부분을 독립시킨다(SNMP는 좀 복잡하고 더 단순한게 있는지 검토중).


4. 다양한 패킷을 잡은 모듈을 구축한다(Adapter, File, Remote, Router, NAT, Virtual Device, AP, ARP spoofing, GRE/SSL Tunnel 등등)


5. 패킷이 잡혔을 때 발생하는 이벤트의 interface(callback)는 동일하게 설계를 한다.


6. 패킷의 구조체를 transparent하게 한다(사실 이 부분이 조금 힘이 듬. 응용 어플마다 패킷 format이 조금씩 달라질 수 밖에 없어서, 결국 상속을 써야 할 듯).


7. 다양한 분석기를 만든다(노가다).


구현 완료는 언제쯤이나 가능할 런지... 이번 POC때 발표할 수 있는 건덕지 하나라도 건졌으면 좋겠다는 생각만 드네요. ^^