
Linux용 통합 네트워크 툴킷 — Python 3 + PySide6
# NMLinux · v1.7.14 [](https://github.com/thongor77/nmlinux/releases/latest) [](https://www.python.org/) [](LICENSE) [](#installation) [](#features) [](https://www.paypal.com/donate/?business=JFQGY7NU3ANCN&no_recurring=0&item_name=Every+donation%2C+no+matter+how+small%2C+helps+me+keep+this+project+alive.+Thank+you%21%0A¤cy_code=EUR) [](#support-the-project) **Linux와 macOS를 위한 통합 네트워크 툴킷 — 점검하고, 연결하고, 진단하세요.** NMLinux는 29개의 네트워크 모듈을 하나의 창에 모아 놓은 단일 통합 GUI입니다: 인터페이스 모니터링, Wi-Fi, DNS, SSH 터미널, 방화벽 뷰어, 토폴로지 맵, traceroute 등. Python과 PySide6(Qt 6)로 처음부터 직접 제작했으며, 8개의 인터페이스 언어를 지원하고 표준 시스템 도구 외에 외부 의존성이 없습니다. > [!NOTE] > **NMLinux는 Linux 시스템 데몬 `/usr/bin/NetworkManager`(Red Hat/GNOME의 NetworkManager)와 관련이 없습니다.** NMLinux는 Python과 PySide6로 처음부터 직접 만든 독립 프로젝트입니다. > [Claude Code](https://claude.ai/code)(Anthropic)와 저자의 기여로 제작되었습니다. --- ## 개발 과정 NMLinux는 AI의 도움을 받아 제작되었습니다 — 구체적으로 [Claude Code](https://claude.ai)를 사용했으며, 이 저장소 어디에도 이를 숨기지 않았습니다. 오늘날 거의 모든 진지한 소프트웨어 프로젝트는 공개하든 하지 않든 파이프라인 어딘가에서 AI를 사용합니다. 따라서 "AI가 관여했는가"는 흥미로운 질문이 아닙니다. 흥미로운 질문은 이것입니다: AI가 뭔가를 잘못했을 때 이를 잡아내는 것이 있는가? 제 말을 믿기보다 직접 확인하고 싶다면, 다음과 같은 것들이 있습니다: - **162개의 테스트** — `pytest tests/ -v`. 순수 로직과 더불어 실제 Qt 위젯 테스트(메뉴, 테이블) 몇 가지를 포함하며, 흥미로운 부분을 모킹으로 감추지 않았습니다. - **[`docs/Decisions-Techniques.md`](https://github.com/thongor77/nmlinux/blob/main/docs/Decisions-Techniques.md)** — 명확하지 않은 모든 기술적 결정, 거부된 대안들, 그리고 발견되어 수정된 버그(AI가 만들어낸 것 포함)를 그 근거와 함께 기록했습니다. - **[`docs/Architecture.md`](https://github.com/thongor77/nmlinux/blob/main/docs/Architecture.md)** 및 **[`docs/Carte-des-Modules.md`](https://github.com/thongor77/nmlinux/blob/main/docs/Carte-des-Modules.md)** — 실제 코드 구조를 담고 있으며, 배포되는 내용과 동기화되어 있습니다. - 8개 지원 언어 전반에서 누락된 번역 키를 잡아내기 위해 모든 릴리스 전에 실행되는 **i18n 일관성 검사**. 이 모든 것이 AI를 신뢰할 수 없어서 존재하는 것은 아닙니다. 검증하는 프로세스 없이는 어떤 것도 배포되어서는 안 되기 때문에 존재합니다 — 손으로 작성한 코드도 포함해서요. 도움을 준 도구가 아니라 결과물과 그것이 검증되는 방식을 판단하세요. 그래도 버그를 발견하셨나요? 그것은 유용한 일이지 부끄러운 일이 아닙니다 — [이슈를 열어주세요](https://github.com/thongor77/nmlinux/issues). --- ## 커뮤니티 **[GitHub Discussions](https://github.com/thongor77/nmlinux/discussions)가 열려 있습니다** — 피드백을 공유하고, 아이디어를 제안하고, 질문하거나, 그냥 인사만 하셔도 됩니다. 저자는 인프라와 운영 분야에서 30년 이상의 경력을 가지고 있으며, Linux에도 훌륭하고 무료이며 단순한 소프트웨어가 있어야 한다는 생각으로 이 도구를 만들었습니다. --- ## 스크린샷 > Linux 스크린샷은 v1.2.7 — macOS 스크린샷은 v1.3.5 기준입니다. 현재 앱은 29개의 모듈과 8개의 인터페이스 언어(FR/EN/ES/DE/IT/PT/JA/ZH)를 갖추고 있습니다. **Linux (KDE)** | Dashboard | Topology | |-----------|----------| |  |  | | Traceroute | Wi-Fi | |------------|-------| |  |  | **macOS** | Dashboard | Traceroute | |-----------|------------| |  |  | --- ## 변경 이력 ### v1.7.14 — 2026-09-30 - **AppImage — 시작 시 충돌 수정, 두 번째 시도**: v1.7.13의 수정(번들된 시스템 라이브러리 제거)만으로는 충분하지 않았습니다 — 내장된 Python 인터프리터 자체(`libpython3.14.so.1.0`, Arch Linux 개발 머신의 glibc 2.44에 맞춰 빌드됨)가 여전히 AppImageHub 카탈로그의 테스트 머신(Ubuntu 22.04, glibc 2.35)이 가진 것보다 최신 glibc 심볼을 요구해서, AppImage는 실행 즉시 계속 충돌했습니다. 이제 `build-appimage.sh`는 호스트가 아닌 `ubuntu:22.04` 컨테이너(`podman` 사용) 안에서 PyInstaller 번들을 빌드하므로, 내장된 모든 바이너리가 AppImage가 지원해야 하는 정확한 glibc 버전에 맞춰 링크됩니다. ### v1.7.13 — 2026-09-30 - **AppImage — 시작 시 충돌 수정(불완전, v1.7.14 참조)**: `build-appimage.sh`가 Arch Linux 빌드 머신의 매우 최신 glibc에서 공유 라이브러리(`libz.so.1`, `libstdc++.so.6`, `libX11.so.6`, `libfontconfig.so.1` 등)를 그대로 번들링하고 있었습니다. 구형 배포판에서는 AppImage가 실행 즉시 충돌했으며(`GLIBC_ABI_DT_RELR' not found`), 이는 AppImageHub 카탈로그의 자동 테스트에서 발견되었습니다. 이제 이 라이브러리들은 번들에서 제거되어 AppImage가 호스트 시스템의 자체 복사본으로 폴백하며, 이는 AppImage의 표준 접근 방식입니다. ### v1.7.12 — 2026-08-12 - **Traceroute — 수정**: Flatpak(v1.7.11, 아래 참조 — 현재 제거됨) 환경에서 `traceroute`가 호스트에 실제 `traceroute` 바이너리가 설치되어 있지 않더라도 호스트 shim을 통해 `PATH`에서 항상 해석되어, 워커가 `tracepath`로 폴백하지 못하고 트레이스가 홉도 오류 표시도 없이 즉시 끝나버렸습니다. 이제 `traceroute`가 파싱 가능한 출력을 전혀 생성하지 못하면 *이유*와 관계없이 `tracepath`로 폴백합니다. - **SSH 터미널 — askpass 수정**: `DISPLAY`/`WAYLAND_DISPLAY`가 설정되어 있고(모든 GUI 세션) ssh에 깨끗한 tty가 없을 때, ssh가 내장 터미널 대신 비밀번호 프롬프트에 `$SSH_ASKPASS`를 사용하려 할 수 있으며 — askpass 헬퍼가 설치되어 있지 않으면 인증이 조용히 실패합니다. 이제 `SSH_ASKPASS_REQUIRE=never`가 비밀번호 프롬프트를 항상 터미널 자체를 통해 처리하도록 강제합니다. - **Flatpak 패키징 제거**: v1.7.11에 포함되었던 로컬 KDE Linux 매니페스트는 중단되었습니다. 위의 SSH 비밀번호 프롬프트 버그를 조사하던 중 커널 수준의 한계가 드러났습니다: `flatpak-spawn --host`를 통해 중계된 프로세스는 전달된 pty의 제어 터미널 소유자가 될 수 없습니다(`TIOCSCTTY`가 `EPERM`으로 거부됨 — 다른 무관한 세션이 이미 소유하고 있음; 이는 버그가 아니라 의도된 커널 보안 경계입니다). 유일한 우회 방법(`script`로 새 pty 할당)은 비밀번호 프롬프트는 고치지만 해당 세션의 실시간 터미널 크기 조정 전파를 깨뜨려 — Flatpak을 아예 배포하지 않는 것보다 더 나쁜 트레이드오프로 판단되었습니다. 앞으로 지원되는 Linux 설치 경로는 AUR과 AppImage입니다. ### v1.7.11 — 2026-08-03 - **Flatpak 패키징 (KDE Linux)**: `packaging/flatpak/` 아래의 로컬 빌드 매니페스트는 KDE Linux 및 기타 Flatpak 전용 배포판을 대상으로 합니다. nmlinux가 셸을 통해 호출하는 호스트 CLI 도구(`nmcli`, `pkexec`, `mount.cifs`, `ssh`, `nmap`, …)는 각각을 개별적으로 샌드박싱하는 대신 `PATH` 상의 `flatpak-spawn --host` shim을 통해 연결됩니다. PySide6는 PyPI 휠이 아닌 Flathub의 `io.qt.PySide.BaseApp`에서 가져옵니다. Flathub에는 게시되지 않으며 — 단일 `.flatpak` 번들이 `packaging/flatpak/build-bundle.sh`로 빌드되어 AppImage와 동일한 방식으로 각 릴리스에 첨부됩니다. **v1.7.12에서 중단됨 — 위 참조.** ### v1.7.10 — 2026-08-03 - **SSH 터미널 — 수정**: 세션 시작 시 터미널 위젯의 실제 크기를 아직 알 수 없을 때 PTY가 잘못된(기본 24×80) 크기로 시작되어 크기 조정 요청이 조용히 무시될 수 있는 경쟁 조건을 수정했습니다. 이로 인해 원격 전체 화면 앱(예: Claude Code CLI, htop, vim)이 실제 창 크기와 어긋나, 화면 하단에 새 출력이 스크롤되어 지나가야만 지워지는 잔여 텍스트가 남았습니다. 사용자가 보고했으며, 실제 대화형 세션으로 재현했습니다 ### v1.7.9 — 2026-08-02 - **SSH 터미널 — 복사/붙여넣기**: 마우스로 텍스트를 선택하고(클릭-드래그, 하이라이트), `Ctrl+Shift+C` 또는 우클릭 메뉴로 복사하며, `Ctrl+Shift+V`로 붙여넣습니다(기존 기능). 이전에는 복사가 불가능했습니다 — 텍스트 선택 자체가 존재하지 않았습니다 - **SSH 터미널 — 여러 동시 세션**: 이제 SSH 페이지는 단일 공유 세션 대신 각 연결을 자체 탭에서 엽니다. 저장된 연결에 다시 연결할 때 — 같은 연결에 두 번이라도 — 작동하는 대체 세션을 열지 않고 활성 세션을 종료하던 문제가 있었는데, 이제 모든 연결 동작이 새롭고 독립적인 탭을 엽니다 ### v1.7.8 — 2026-07-14 - **Speed Test — 새로운 LAN(iperf3) 탭**: 기존 인터넷 속도 테스트와 함께, 새 탭에서 번들된 공용 서버 목록(26개국) 또는 저장된 사용자 지정 서버(예: 조직 내부 서버)를 대상으로 클라이언트 전용 `iperf3` 테스트를 실행합니다. TCP/UDP, IPv4/IPv6/자동, 역방향(다운로드) 방향을 지원하며, UDP 테스트의 경우 지터/손실을 표시합니다. [이슈 #6](https://github.com/thongor77/nmlinux/issues/6)에서 제안되었습니다 - **새로운 선택적 의존성**: `iperf3` — 설치하면 LAN 탭이 활성화되며, 그렇지 않으면 탭에 배너가 표시되고 비활성 상태로 유지됩니다 ### v1.7.6 — 2026-07-05 - **Asset Inventory — 우클릭 새로고침**: 이미 스캔된 하나 이상의 행(다중 선택 지원)을 우클릭하고 "Refresh selected"를 선택하면 전체 네트워크 스캔을 다시 실행하는 대신 해당 호스트만 제자리에서 다시 스캔합니다 - **Asset Inventory — SSH 인증 실패 피드백**: 거부된 SSH 로그인이 이제 조용히 실패하는 대신 "SSH auth failed"를 표시하며, Nmap이 감지한 호스트명/OS 기준 정보를 잃지 않습니다 — 다른 구성된 자격 증명 세트를 먼저 시도한 후 DSM의 Auto Block이 올바른 비밀번호를 거부한 실제 Synology NAS에서 확인했습니다 ### v1.7.5 — 2026-07-04 - **Ping Monitor — 저장된 대상 디렉터리**: 새 좌측 패널에서 ping 대상(이름, 호스트, 간격)을 영구 목록에 저장할 수 있어, 모니터링 중인 호스트가 앱 재시작 후에도 유지되며 다시 입력할 필요가 없습니다. 활성 모니터링 중인 각 행의 ★ 버튼은 세션 중 언제든지 해당 호스트를 디렉터리에 저장합니다 — 앱이 예기치 않게 종료되기 전에 미리 계획해 둘 필요가 없습니다 - **Ping Monitor — "Start monitoring"**: 저장된 대상을 선택하고 저장된 간격을 재사용하여 클릭 한 번으로 모니터링을 시작합니다 ### v1.7.4 — 2026-07-04 - **Asset Inventory — 일관성 없는 스캔 결과 수정**: 활성 확인이 재시도 없이 1초 타임아웃의 단일 ping을 보냈는데, 이는 스캐너 자체의 동시 부하(최대 40개 호스트 동시 프로브) 상황이나 Wi-Fi 호스트가 비컨 사이에 잠시 절전 상태일 때 실제 장치를 놓칠 수 있었습니다 — 동일 범위를 반복 실행할 때마다 다른 장치 수를 반환한 실제 서브넷에서 라이브로 확인했습니다. 이제 확인은 TCP 포트 프로브로 폴백하기 전에 ping을 재시도합니다 - **Asset Inventory — 새로운 "Refresh empty" 버튼**: 스캔 후 전체 범위를 다시 스캔하는 대신 데이터를 반환하지 않은 IP만 다시 스캔하며, 새로 발견된 호스트는 기존 결과에 병합됩니다 ### v1.7.3 — 2026-07-03 - **SMB — 우클릭 메뉴에서 공유 마운트**: SMB 탭에서 공유를 우클릭하고 Mount/Unmount를 선택하면 안정적인 로컬 경로(`~/mnt/<host>_<share>`)에 마운트되어 터미널과 다른 모든 앱에서 사용할 수 있습니다 — 일시적인 탐색 뷰가 아닙니다. 세션 전용(fstab/systemd 지속성 없음)이며, 자격 증명은 기존 사용자/비밀번호 필드에서 재사용됩니다. Linux는 권한이 제한된 자격 증명 파일(`ps`를 통해 절대 노출되지 않음)과 함께 `pkexec mount -t cifs`를 사용하고, macOS는 `mount_smbfs`를 직접 사용합니다. 서버가 기본 협상을 거부할 때(구형 NAS 장치에서 흔함) 자동으로 더 오래된 SMB 다이얼렉트(`vers=2.0`)로 재시도합니다 — 두 시도 모두 전용 헬퍼 프로세스를 통해 단일 인증 프롬프트 아래에서 이루어집니다 - **새로운 선택적 의존성**: SMB 마운트를 위한 `cifs-utils`(Linux); macOS에는 내장 ### v1.7.2 — 2026-07-03 - **macOS 설치 — 빈 Mac에서 발견된 두 가지 부트스트랩 버그 수정**: `bootstrap_macos.sh`가 더 이상 Homebrew 설치 프로그램에 `NONINTERACTIVE=1`을 강제하지 않습니다. 이전에는 새 관리자 계정에서 sudo 비밀번호를 묻는 대신 즉시 중단되었습니다. 문서화된 원라이너는 이제 스크립트를 `bash`로 직접 파이프하는 대신 먼저 다운로드합니다. 파이프될 때 중첩된 대화형 단계(Xcode CLT 설치 프로그램, Homebrew 자체의 sudo 프롬프트)가 외부 스크립트의 입력 스트림을 방해할 수 있기 때문입니다 - **범용 우클릭 메뉴 — SMB 추가**: `SmbNfsPage`는 v1.7.0에서 배포된 모듈 간 우클릭 시스템에서 유일하게 빠져 있던 대상 페이지였습니다. 이제 호스트를 우클릭하고 SMB를 선택하면 호스트 필드가 미리 채워지고 스캔이 즉시 시작되며, 포트 445가 열려 있는 것으로 감지되면 메뉴에서 굵게 표시됩니다 - **i18n — 나머지 Dashboard 문자열 번역**: 게이트웨이 지연 레이블, TLS Watchlist 카드 제목 및 상태 행이 여전히 프랑스어로 하드코딩되어 있었으며, 이제 8개 인터페이스 언어 모두로 번역되었습니다 ### v1.7.1 — 2026-07-02 - **macOS 26 (Tahoe)** — Wi-Fi SSID 수정: `system_profiler`(Location Services 없이는 `<redacted>` 반환)에서 **CoreWLAN**으로 기본 데이터 소스를 전환했습니다. 앱은 이제 첫 실행 시 Location Services 권한을 요청하며, Wi-Fi 페이지는 권한이 부여되면 실제 이름으로 모든 네트워크를 표시합니다 - **macOS** — Connection Manager: 연결된 SSID를 이제 CoreWLAN으로 읽고, 보안 모드는 `system_profiler`로 읽습니다 - **macOS** — SMB: NAS가 자격 증명을 요구할 때 명확한 "authentication required" 메시지; Homebrew smbclient의 잘못된 smb.conf 경고 수정 - **macOS** — 첫 Location Services 권한 대화상자 이후 종료 시 발생할 수 있는 잠재적 충돌 수정 ### v1.7.0 — 2026-07-02 - **IP 또는 호스트명을 포함하는 모든 테이블에 범용 우클릭 컨텍스트 메뉴** — 복사-붙여넣기 없이 모듈 간을 직접 이동합니다: 발견된 호스트를 우클릭하고 Ping, Scan ports, Whois, DNS, Traceroute, MTR, SSH, RDP, VNC, View in Topology 또는 Add to Inventory를 선택합니다. 해당 포트가 열려 있는 것으로 감지되면 SSH/RDP/VNC 메뉴 항목이 **굵게** 표시됩니다. 레이블은 8개 인터페이스 언어 모두로 완전히 번역되었습니다. - **소스 페이지** (우클릭 동작을 발생시킴): IP Scanner, Nmap, Ping, Port Scanner, Traceroute, MTR, Topology(노드 우클릭) - **대상 페이지** (호스트를 받아 미리 채움): Whois(`set_target` + 자동 쿼리), DNS(`set_target` 미리 채우기만), Ping(`set_target` + 자동 시작), Traceroute(`set_target` + 자동 시작), MTR(`set_target` + 자동 시작), Port Scanner(`set_target` + 포커스), SSH / RDP / VNC(`set_target`이 미리 채워진 새 연결 양식을 엶), Topology(`load_hosts`가 재스캔 없이 IP Scanner/Nmap 스캔에서 노드를 주입 — 게이트웨이 자동 감지, 엣지 그리기, 출발 노드는 빨간색으로 강조), Asset Inventory(`prefill_hosts`가 발견된 호스트에 대해 자격 증명 스캔을 직접 시작하고 ICMP 검색 단계를 건너뜀) - **Dashboard — 게이트웨이 ping 그래프**: 2초마다 갱신되는 실시간 지연 스파크라인; 색상 코드(<20 ms 녹색 / 20–100 ms 주황색 / >100 ms 빨간색 / 타임아웃 빨간색) - **Dashboard — TLS Watchlist 요약**: Dashboard의 상태 카드가 재쿼리 없이 TLS Watchlist 상태(OK / 만료 임박 / 경고)를 자동으로 반영합니다 - **Dashboard — 지도 크기 조정**: 창 크기를 조정하면 세계 지도가 이제 가로로 확장됩니다 ### v1.6.4 — 2026-06-28 - **macOS**: 메뉴 바가 이제 **Python** 대신 **NMLinux**를 표시합니다 — 근본 원인: Python으로 `exec()`한 후 `NSBundle.mainBundle()`이 Qt가 QApplication 생성 중에 읽는 `Python.framework` 번들(CFBundleName = "Python")로 해석되었습니다. 번들의 `infoDictionary()`를 패치하고 애플리케이션 메뉴가 생성되기 전에 AppKit을 통해 네이티브 메뉴 항목의 이름을 변경하여 수정했습니다 ### v1.6.3 — 2026-06-28 - **macOS**: `pyobjc-framework-Cocoa`를 통해 `NSProcessInfo.setProcessName_`을 사용한 메뉴 바 수정 첫 시도(v1.6.4에서 대체됨) ### v1.6.2 — 2026-06-28 - **macOS**: `install_macos_app.sh`에서 bash 런처 스크립트를 컴파일된 C 스텁으로 교체하여 macOS가 `.app` 번들을 실행 중인 프로세스와 올바르게 연결하도록 했습니다. 폴백으로 `setprogname` 및 `sys.argv[0]` 재정의를 추가했습니다 ### v1.6.1 — 2026-06-25 - **SSH 터미널 — 원격 에코 수정**: 내장 SSH 터미널에 입력한 키 입력이 원격 셸로 전송되었지만 에코가 되돌아오지 않았습니다(로그인 후 키보드가 "죽은" 것처럼 보임). nmlinux가 로컬 PTY 에코를 강제로 껐고, ssh가 터미널 모드(pty-req)를 통해 그 "에코 없음"을 원격 pty로 전파하여 원격 셸이 입력 에코를 중단했습니다. 새 Ubuntu 26.04 VM에서 재현했습니다(최신 OpenSSH는 이러한 모드를 충실히 적용함). 이제 터미널은 PTY를 정상 모드로 유지하고 실제 터미널 에뮬레이터와 동일하게 ssh가 에코를 관리하도록 합니다. ### v1.6.0 — 2026-06-24 - **Asset Inventory — WinRM Windows (완성)**: Windows Firewall이 ICMP를 차단할 때 TCP 포트 프로브를 통한 호스트 감지; PowerShell이 이제 전체 절대 경로 + **EncodedCommand(base64)**를 사용하여 cmd.exe가 파이프 `|`를 해석하는 것을 방지합니다; 관리자 권한 없이 전체 폴백 체인: OS는 `ver`, CPU는 레지스트리, RAM은 `systeminfo`, 디스크는 `wmic` → `fsutil`(로케일 인식 EN 쉼표 / FR 공백) → `dir /-C` - **Asset Inventory — 다중 자격 증명 SSH**: 여러 SSH 자격 증명 세트 지원; macOS 디스크 수정(`/System/Volumes/Data`), Apple Silicon CPU 폴백(`hw.model`), Synology(`/volume1`), Unraid(`/mnt/user`) - **버그 수정**: WinRM 오류가 이제 조용한 폴백 대신 테이블에 표시됩니다; WinRM/SNMP 호스트 감지가 더 이상 SSH 자격 증명 존재 여부에 의해 차단되지 않습니다; pywinrm 타임아웃 수정 ### v1.5.3 — 2026-06-24 - **macOS .app — Homebrew 도구 감지**: Homebrew를 통해 설치된 `sshpass`, `nmap`, `snmpget`을 이제 절대 경로를 사용하여 찾아 호출합니다; macOS의 `.app` 번들은 Homebrew PATH(`/opt/homebrew/bin`, `/usr/local/bin`)를 상속하지 않으므로 이전에는 설치된 도구가 조용히 무시되었습니다 - **macOS 업데이트 경로**: 저장소 루트에서 `git pull && bash packaging/install_macos_app.sh`를 실행하는 것이 이제 문서화된 업그레이드 방법입니다; 스크립트는 자체 venv(`~/.local/share/nmlinux/venv`)를 관리하며 시스템 수준 `pip` 또는 `pipx`가 필요하지 않습니다 ### v1.5.2 — 2026-06-24 - **Asset Inventory** — 새 모듈(29번째); CIDR 범위를 스캔하고 SSH, WinRM, SNMP 또는 Nmap을 통해 각 호스트에서 OS, CPU, RAM, 디스크 및 가동 시간을 수집합니다; 프로토콜당 여러 자격 증명 세트 지원(순서대로 각각 시도); 무보존 정책: 자격 증명은 디스크에 기록되지 않고 스캔 후 메모리에서 지워집니다; 결과를 JSON, CSV 또는 Markdown으로 내보내기; Dashboard IP Geolocation 섹션에 애니메이션 지도 추가 - **SSH 수집 수정**: 디스크 명령 awk 따옴표 오류 수정; `free -h`를 BusyBox 호환 `free`로 교체; macOS 코드 경로가 이제 OS 이름에 `sw_vers`, Apple Silicon CPU에 `hw.model` 폴백, APFS 사용자 데이터 볼륨에 `/System/Volumes/Data`를 사용합니다; Synology/Unraid 볼륨(`/volume1`, `/mnt/user`)을 루트보다 먼저 감지; `df | tail -1 || …` 거짓 성공 패턴을 `test -d` 가드로 수정; `lsb_release` 출력에서 주변 따옴표 제거; 여러 SSH/WinRM 자격 증명 세트 지원(호스트당 순서대로 각각 시도) ### v1.5.0 — 2026-06-17 - **File Transfer Server** — 앱에서 직접 경량 TFTP 또는 HTTP 서버를 시작/중지하는 새 모듈; 대표적인 사용 사례: 라우터, 스위치 또는 프린터 구성 백업 및 복원; 한 번에 하나의 서버만 활성화(TFTP 또는 HTTP), 구성 가능한 포트 및 루트 디렉터리, 로컬 IP가 클립보드 복사 버튼으로 표시됨; HTTP는 디렉터리 목록(LAN의 모든 브라우저에서 탐색), GET(다운로드) 및 POST/PUT(업로드)를 포함합니다; TFTP는 GET 및 PUT(양방향)을 지원하며, 포트 69는 root 권한이 필요합니다 — 권한 오류 시 앱이 "Start as root (pkexec)" 버튼을 표시합니다; 실시간 전송 로그 테이블(타임스탬프, 파일명, 클라이언트 IP, 방향 ↑/↓, 크기); 포트 트래버설 보호; 8개 인터페이스 언어; 새 의존성: `tftpy` ### v1.4.3 — 2026-06-14- **TLS Watchlist 수정**: 자체 서명 및 신뢰할 수 없는 인증서가 이제 초록색 대신 "⚠ Invalid / untrusted cert"(주황색)로 올바르게 표시됩니다. SSL 예외 처리가 모든 `ssl.SSLError` 하위 클래스를 포괄하도록 확장되었습니다. 백그라운드 검사가 실행되는 동안 항목에 "… (checking)"이 표시되고, 호스트에 연결할 수 없을 때는 "— (unreachable)"이 표시됩니다 ### v1.4.2 — 2026-06-14 - **TLS Watchlist** — 인증서 만료를 모니터링할 호스트 이름의 영구 목록. `+ Watch`(현재 호스트/포트 사용)로 또는 패널에서 수동으로 호스트를 추가합니다. 백그라운드 검사는 실행 후 2초 뒤에 자동으로 실행됩니다. 사이드바의 "TLS Inspector" 항목은 색상 점을 표시합니다: 인증서가 만료된 경우 빨간색, 30일 이내에 만료되는 인증서가 있는 경우 주황색. 패널에 재확인 버튼이 있습니다. 목록은 항목별 상태(✓ / ⚠ / EXPIRED)를 색상 코드와 함께 표시합니다 ### v1.4.1 — 2026-06-14 - **macOS — IP Scanner**: macOS에서 MAC 주소, 벤더 및 인터페이스 조회를 수정했습니다. `_arp_entry()`가 이제 macOS에서 `arp -n <ip>`를 호출하고 `/proc/net/arp`(Linux 전용)를 읽는 대신 해당 출력 형식(`? (IP) at AA:BB:CC on en0`)을 파싱합니다. 이제 macOS에서 네 개의 스캐너 열이 모두 올바르게 채워집니다 - **VNC 도움말**: Linux에는 기본적으로 VNC 서버가 없다는 점을 명확히 하고 설치할 수 있는 일반적인 옵션(x11vnc, tigervnc-server, wayvnc)을 나열하는 참고 사항을 8개 언어 모두에 추가했습니다 ### v1.4.0 — 2026-06-14 - **macOS — IP Scanner**: 크로스 플랫폼 역방향 DNS 확인을 위해 `getent`(Linux 전용)를 Python의 `socket.gethostbyaddr()`로 교체했습니다. 이제 호스트 이름 조회가 추가 도구 없이 macOS에서 기본적으로 작동합니다 - **macOS — SMB Browser**: `smbclient`(Homebrew samba 필요)에서 `smbutil view`(macOS 내장 도구)로 전환했습니다. 이제 SMB 공유 목록이 아무것도 설치하지 않고 macOS에서 작동합니다 - **macOS — NFS Browser**: `showmount`는 macOS에 내장되어 있지만 `--no-headers`를 지원하지 않습니다. macOS에서는 플래그를 제거하고 파서에서 헤더 줄을 건너뜁니다. 이제 NFS export 목록이 기본적으로 작동합니다 - **macOS — RDP**: `xfreerdp`를 찾을 수 없을 때 `open rdp://` URL 스킴으로 대체합니다. 설치되어 있으면 Microsoft Remote Desktop(App Store)을 열고 호스트, 포트, 사용자 이름 및 도메인이 미리 채워집니다 - **macOS — VNC**: `vncviewer`를 찾을 수 없을 때 `open vnc://` URL 스킴으로 대체합니다. macOS 화면 공유(내장, 설치 불필요)를 엽니다 ### v1.3.9 — 2026-06-13 - **SSH 에이전트 포워딩** — SSH 연결 양식에 새로운 "Agent forwarding" 체크박스가 추가되었습니다. `ssh` 명령에 `-A`를 추가합니다. 개인 키를 복사하지 않고 서버 간을 이동할 수 있습니다(PC → A → B). 활성 SSH 에이전트(`SSH_AUTH_SOCK`)가 필요합니다. 상황별 도움말이 8개 언어 모두에서 업데이트되었습니다 ### v1.3.8 — 2026-06-13 - **Command Palette (Ctrl+P)** — 27개 모듈 중 어디로든 즉시 키보드 탐색이 가능합니다. 이름과 키워드(예: "firewall", "tls", "ssh key", "scan")에 대한 퍼지 검색을 지원합니다. 위/아래 화살표 + Enter 또는 한 번 클릭으로 탐색합니다. 앱 어디에서나 Ctrl+P로 열 수 있습니다 - **Export Manager** — File → Export Network Report…에서 전체 네트워크 스냅샷(인터페이스, 라우트, DNS 리졸버)을 JSON, Markdown, 일반 텍스트 또는 PDF로 내보냅니다(선택 사항: `pip install reportlab`) - **모듈 수준 내보내기 버튼** — Interfaces, DNS, Firewall, SSH Connections 및 Connection Manager 페이지에 Export 버튼이 추가되었습니다. 각 페이지는 형식 필터가 변경되면 파일 이름 확장자가 실시간으로 업데이트되면서 현재 데이터를 선택한 형식으로 내보냅니다 ### v1.3.6 — 2026-06-12 - **Topology — 장치 아이콘** — 이제 각 노드가 일반 원 대신 장치 유형(라우터/wifi, 컴퓨터/노트북, 프린터, NAS/서버, 스마트폰, 네트워크 스위치, Raspberry Pi)에 맞는 Lucide SVG 아이콘을 표시합니다. 5개의 새로운 번들 SVG 아이콘(`printer`, `server`, `smartphone`, `cpu`, `laptop`)이 추가되었습니다 - **Topology — mDNS 감지** — 장치 유형이 `avahi-browse`를 통해 감지됩니다(선택 사항, nmap 스캔과 병렬로 실행). 프린터(`_ipp._tcp`, `PDL Printer`), Android 폰 및 TV(`_googlecast._tcp`, `_androidtvremote2._tcp`), Apple Mac(AirPlay TXT의 `am=Mac16,x` 모델), NAS 장치(Synology는 `model=Xserve` 보고), KDE Connect 데스크톱을 식별합니다. avahi를 사용할 수 없을 때는 MAC 벤더 OUI 및 호스트 이름 휴리스틱으로 대체합니다 - **Topology — 세부 정보 패널**은 일반적인 "Host" 레이블 대신 감지된 장치 클래스(Printer, Smartphone, NAS…)를 표시합니다. 8개 언어 모두 i18n 지원 - **Traceroute — 자동 줌** — 각 경로가 끝날 때 세계 지도가 지리적 위치가 확인된 홉의 경계 상자에 자동으로 줌 및 중앙 정렬됩니다. 사용자가 수동으로 이동하거나 줌하면 비활성화됩니다. 다음 traceroute 시 복원됩니다. 마우스 오른쪽 버튼 클릭으로 전체 세계 보기로 재설정됩니다 ### v1.3.5 — 2026-06-06 - **macOS 호환성** — 9개의 모든 네트워크 모듈이 이제 Linux 동작을 깨뜨리지 않고 macOS에서 실행됩니다. 각 모듈은 시작 시 플랫폼(`_IS_MACOS`)을 감지하고 네이티브 macOS 명령으로 분기합니다: `route -n get default`, `ifconfig`, `scutil --dns`, `networksetup`, `system_profiler SPAirPortDataType`, `pfctl`, `netstat -ib`. 권한 상승은 `pkexec` 대신 `osascript` + `with administrator privileges`를 사용합니다. 고정폭 글꼴은 `Monospace` 대신 `Menlo`를 사용합니다 - **Linux/macOS 이중 경로를 가진 모듈**: Dashboard, Interfaces, Wi-Fi, Topology, Bandwidth, Firewall (pf.conf + pfctl), Connection Manager, Hosts File, MTR - **변경되지 않은 모듈**(두 플랫폼에서 도구가 동일): DNS, Nmap Scan, SNMP, Whois ### v1.3.2 — 2026-06-06 - **i18n이 8개 언어로 확장** — Italiano, Português, 日本語(일본어), 中文(중국어 간체)가 추가되었습니다. 전체 UI(27개 모듈, 약 720개 번역 키)가 이제 FR / EN / ES / DE / IT / PT / JA / ZH로 제공됩니다. 설정에서 언어를 변경하면 재시작 안내가 표시됩니다 - **8개 언어로 된 상황별 도움말** — `?` 배지 패널(설명, 사용 예제 및 동등한 CLI 명령)이 이제 모든 모듈에 대해 8개 언어를 모두 지원합니다. 이전에는 JA와 ZH가 영어로 대체되었습니다 - **버그 수정** — SMB/NFS 및 Hosts File의 탐색 도구 설명이 선택한 언어와 관계없이 프랑스어로 표시되던 문제를 수정했습니다. 누락된 `nav_hint_smb_nfs` 및 `nav_hint_hosts` 키를 7개의 모든 비프랑스어 언어 블록에 추가했습니다 ### v1.3.1 — 2026-06-05 - **SSH Key Manager** — `~/.ssh/`의 모든 키 쌍을 나열합니다(파일, 유형, 비트, 주석, SHA256 지문). 선택적 암호 문구와 함께 Ed25519 또는 RSA 4096 키를 생성합니다(불일치 감지, 유형별 자동 파일 이름). 공개 키를 클립보드에 복사합니다. 비밀번호 프롬프트를 위한 stdin 지원이 있는 인라인 터미널에서 `ssh-copy-id`를 통해 원격 서버에 배포합니다. 확인 후 키 쌍을 삭제합니다. 누락된 경우 `~/.ssh/`를 자동 생성합니다. i18n: fr / en / es / de ### v1.3.0 — 2026-06-03 --- [Read more](https://github.com/thongor77/nmlinux)