# Httptap - 모든 Linux 프로그램의 HTTP/HTTPS 요청 보기 가능

> Clean Markdown view of GeekNews topic #19046. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=19046](https://news.hada.io/topic?id=19046)
- GeekNews Markdown: [https://news.hada.io/topic/19046.md](https://news.hada.io/topic/19046.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-02-04T09:50:40+09:00
- Updated: 2025-02-04T09:50:40+09:00
- Original source: [github.com/monasticacademy](https://github.com/monasticacademy/httptap)
- Points: 8
- Comments: 2

## Summary

`httptap`은 리눅스 프로그램의 HTTP 및 HTTPS 요청을 쉽게 추적할 수 있는 도구로, 루트 권한 없이도 사용할 수 있으며 시스템에 영향을 미치지 않습니다. 이 도구는 네트워크 네임스페이스와 TUN 디바이스를 활용하여 네트워크 트래픽을 추적하고, HTTPS 트래픽을 해독하기 위해 임시 인증 기관을 생성합니다. 또한, HTTP 요청과 응답을 HAR 파일로 저장하여 다양한 뷰어로 시각화할 수 있습니다.

## Topic Body

- `httptap`은 리눅스 프로그램이 수행하는 HTTP 및 HTTPS 요청을 쉽게 볼 수 있게 해주는 도구  
  - `httptap -- `를 사용하여 특정 명령어의 네트워크 요청을 추적할 수 있음  
- 예를 들어, `curl` 명령어를 사용하여 특정 URL에 요청을 보내면, `httptap`은 해당 요청과 응답을 출력  
  - `httptap`은 루트 권한이 필요하지 않으며, 시스템 전반에 영향을 미치지 않음  
  - 현재 리눅스에서만 작동하며, 다른 운영 체제로 포팅하기는 어려움  
- 설치 방법  
  - 미리 빌드된 바이너리 설치: `curl -L https://github.com/monasticacademy/httptap/releases/download/v0.0.7/httptap_linux_x86_64.tar.gz | tar xzf -`  
  - Go를 사용한 설치: `go install github.com/monasticacademy/httptap@latest`  
- 빠른 시작  
  - `curl` 명령어를 사용하여 HTTP 요청을 보내고, `httptap`으로 요청과 응답을 확인할 수 있음  
  - `-L` 옵션을 사용하여 리다이렉트를 따르는 경우, 추가적인 HTTP 요청이 발생함  
- Google Cloud 및 kubectl 사용 예시  
  - `gcloud compute instances list` 명령어를 사용하여 Google Cloud의 컴퓨트 인스턴스를 나열할 때 발생하는 HTTP 요청을 추적할 수 있음  
  - `kubectl get all` 명령어를 사용하여 Kubernetes 클러스터의 리소스를 나열할 때 발생하는 HTTP 요청을 추적할 수 있음  
- DNS-over-HTTP  
  - `curl`의 `--doh-url` 옵션을 사용하여 DNS-over-HTTP 요청을 수행할 수 있음.  
  - `httptap`을 사용하여 DNS 요청과 응답을 확인할 수 있음.  
- HAR 출력  
  - HTTP 요청과 응답을 HAR 파일로 덤프할 수 있음.  
  - HAR 파일은 다양한 뷰어를 통해 시각화할 수 있음.  
- 작동 원리  
  - `httptap`은 네트워크 네임스페이스를 사용하여 명령어를 격리된 환경에서 실행  
  - TUN 디바이스를 생성하여 네트워크 트래픽을 추적하고, HTTPS 트래픽을 해독하기 위해 임시 인증 기관을 생성  
- 주의 사항  
  - 프로세스는 들어오는 네트워크 연결을 수신할 수 없음.  
  - `/dev/net/tun`에 대한 접근 권한이 필요함.  
  - 모든 ICMP 에코 요청은 실제 네트워크로 ICMP 패킷을 보내지 않고 에코됨

## Comments



### Comment 34252

- Author: halfenif
- Created: 2025-02-06T16:24:02+09:00
- Points: 1

it was developed at the Monastic Academy in Vermont in the US. We believe that a monastic schedule, and the practice of the Buddhist spiritual path more generally, provide ideal conditions for technological development.  
  
>> 테스트하면서 깃헙을 보니. 수도원 수련? 하시는 분들이 영적 성취의 일환으로 만들었나 싶기도 합니다.

### Comment 34120

- Author: neo
- Created: 2025-02-04T09:50:40+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=42919909) 
- README의 "How it was made" 섹션이 도구 자체만큼 흥미로움
  - 공동체 생활과 명상 수련을 통해 소프트웨어 개발을 진행함
  - 격리된 네트워크 네임스페이스에서 프로세스를 실행하는 아이디어가 천재적임
  - HTTPS 부분에 관심이 있으며, 임시 디렉토리의 CA 번들을 사용하도록 프로그램을 지시하는 환경 변수를 설정함
  - `http_proxy`와 유사한 문제가 발생할 수 있으며, 프로그램이 변수를 무시할 수 있음
  - `/etc/resolv.conf`에 오버레이 파일 시스템을 마운트하며, 임시 CA 번들을 사용하여 `/etc/ca-certificates` 디렉토리를 마운트하는 것이 도움이 되는지 궁금함

- httptap은 루트 권한 없이 실행할 수 있는 프로세스 범위의 HTTP 트레이서임
  - `httptap &lt;command&gt;`로 실행하여 HTTP/HTTPS 요청과 응답을 표준 출력으로 추적할 수 있음
  - 격리된 네트워크 네임스페이스에서 명령을 실행하며, 자체 TCP/IP 스택을 사용함
  - HTTP 프록시가 아니며, 명령이 HTTP 프록시를 사용하도록 설정할 필요가 없음
  - TLS 트래픽을 실시간으로 CA를 생성하여 해독함
  - iptables 규칙을 설치하거나 시스템 전역 변경을 하지 않음

- 루트 권한 없이 네트워크 트래픽을 분석할 수 있는 또 다른 도구는 rootless Podman과 Pasta임
  - `--network=pasta:--pcap,myfile.pcap` 옵션을 추가하여 네트워크 트래픽을 PCAP 파일로 기록함
  - 기록된 PCAP 파일을 tshark로 분석하는 간단한 예제를 작성함

- TUN 장치를 사용하는 것이 멋진 아이디어이며, "How it was made" 섹션이 Github README 중 최고임
  - Subtrace라는 도구를 개발 중이며, 자동으로 들어오고 나가는 요청을 가로챌 수 있음
  - Seccomp BPF를 사용하여 소켓, 연결, 수신, 수락 등의 시스템 호출을 가로채고, 모든 TCP 연결을 Subtrace를 통해 프록시함
  - TCP 스트림에서 HTTP 요청을 파싱하여 사용자에게 Chrome DevTools Network 탭에서 보여줌

- nginx 설정을 디버그하는 데 즉시 사용할 예정임
  - 현재는 curl -v를 사용하여 수동으로 출력물을 확인하지만, 이 도구는 리디렉션 루프 등을 즉시 파악할 수 있게 해줌

- 최근 mitmproxy에 유사한 기능을 구축했지만, 다른 트레이드오프가 있음
  - 루트 권한이 필요하며, 자동 인증서 설치는 아직 없음
  - 전용 네임스페이스에서 앱을 실행할 필요가 없어 이미 실행 중인 프로세스를 캡처할 수 있음

- LD_PRELOAD를 사용하는 다른 방법은 고정 링크된 ELF, 예를 들어 golang 바이너리에서 실패할 수 있음

- gVisor 사용자 공간 TCP/IP 스택의 훌륭한 활용임

- Mitmproxy v11.1도 유사한 기능을 수행할 수 있음
