Sniffnet, 네트워크 연결 프로세스 식별 기능 구현의 숨겨진 이야기
Sniffnet의 프로세스 식별 기능(Process Identification) 구현 과정에서 OS별 API 차이, 성능 문제 등 다양한 기술적 난관에 직면함
스냅샷 기반(Snapshot-based) 방식 채택, libproc(macOS), /proc(Linux), iphlpapi(Windows) 활용
오픈소스 라이브러리(Open-source Library) 'listeners' 개발, FreeBSD 지원 추가 및 성능 개선
커뮤니티에서는 netstat 대신 lsof 사용에 대한 의견과 밈 사용에 대한 지적이 나옴
OS별 프로세스 식별 구현의 어려움
Sniffnet의 프로세스 식별 기능 구현은 OS(Operating System) 종속적인 API(Application Programming Interface) 사용으로 인해 복잡성이 증가한다. 각 OS는 고유한 디렉토리 구조와 데이터 구조를 가지며, API 문서화가 미흡하거나 C 언어로 작성되어 Rust에서 사용하기 어렵다. 특히, 짧은 시간 동안의 연결(Short-lived Connections)은 감지되지 않을 수 있으며, 시스템 프로세스의 경우 보안상의 이유로 사용자 공간 애플리케이션에 정보가 노출되지 않을 수 있다.
스냅샷 기반 방식의 선택과 성능 고려
Sniffnet은 스냅샷 기반(Snapshot-based) 방식을 채택하여 시스템에 미치는 영향을 최소화했다. 이는 특정 시점의 시스템 상태를 읽어 프로세스와 포트 간의 관계를 파악하는 방식이다. 이 방식은 libproc(macOS), /proc 파일 시스템(Linux), iphlpapi(Windows)를 활용하지만, 성능 저하(Performance Degradation)를 방지하기 위해 효율적인 처리가 요구된다. 또한, 캐싱(Caching) 및 재시도(Retries)를 통해 정확한 프로세스 정보 획득을 시도한다.
오픈소스 라이브러리 'listeners'의 개발
Sniffnet은 크로스 플랫폼 지원을 위해 자체 개발한 오픈소스 라이브러리 'listeners'를 활용한다. 이 라이브러리는 Windows, Linux, macOS, FreeBSD를 지원하며, Rust-to-C 바인딩을 통해 FreeBSD 지원을 추가했다. 성능 벤치마킹(Performance Benchmarking)을 통해 API 성능을 개선하고, GitHub Actions를 사용하여 자동화된 테스트 환경을 구축했다. 'listeners'는 15만 회 이상 다운로드되었으며, 여러 프로젝트에서 사용되고 있다.
커뮤니티 반응 및 기술적 논의
커뮤니티에서는 netstat 대신 lsof를 사용하는 것이 더 일반적이라는 의견이 제시되었다. 기술적으로 보면, lsof는 netstat보다 더 많은 정보를 제공하며, 시스템 자원 사용량도 적다. 또한, 밈(Meme) 사용에 대한 지적도 있었다. Sniffnet의 프로세스 식별 기능 구현은 네트워크 모니터링(Network Monitoring) 도구 개발에 대한 기술적 도전과 커뮤니티의 다양한 의견을 보여준다.