Sniffnet, 네트워크 연결 프로세스 식별 기능 구현의 숨겨진 이야기

by DD
3개월 전
조회수 14

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) 도구 개발에 대한 기술적 도전과 커뮤니티의 다양한 의견을 보여준다.

One of the most annoying programming challenges I've ever faced (port process identification)