tcpdump는 네트워크에서 주고받는 패킷을 캡처하고 분석하는 데 사용되는 명령어 기반의 도구입니다. 이를 통해 네트워크 통신 내용, 프로토콜 동작, 데이터 흐름, 잠재적인 보안 위협 등을 파악할 수 있습니다. 

tcpdump로 알 수 있는 것:

  • 네트워크 트래픽:
    어떤 데이터가 네트워크를 통해 전송되고 있는지, 어떤 IP 주소와 포트가 사용되고 있는지 확인할 수 있습니다.
  • 패킷 내용:
    패킷의 헤더 정보뿐만 아니라 데이터 부분까지 확인할 수 있어, 프로토콜 동작 및 데이터 내용 분석이 가능합니다.
  • 네트워크 문제 해결:
    패킷 손실, 지연, 비정상적인 패킷 흐름 등을 파악하여 네트워크 문제 해결에 도움을 줄 수 있습니다.
  • 보안 분석:
    네트워크에서 전송되는 데이터를 모니터링하여 악성 코드 감염, 해킹 시도 등 보안 위협을 탐지할 수 있습니다.
  • 프로토콜 분석:TCP, UDP, ICMP 등 다양한 프로토콜의 동작을 분석하고, 특정 프로토콜 관련 문제를 진단할 수 있습니다. 

추가적으로 tcpdump를 활용하여 다음과 같은 작업을 할 수 있습니다:

  • 패킷 캡처:실시간으로 네트워크 패킷을 캡처하거나, 파일로 저장하여 나중에 분석할 수 있습니다. 
  • 필터링:특정 조건에 맞는 패킷만 캡처하여 분석 시간을 절약할 수 있습니다. 
  • 와이어샤크 연동:tcpdump로 캡처한 패킷 파일을 와이어샤크에서 열어 더욱 자세하게 분석할 수 있습니다. 

예시:

  • 특정 서버로 향하는 HTTP 요청을 캡처하여 어떤 웹 페이지가 요청되었는지 확인할 수 있습니다. 
  • 특정 IP 주소에서 지속적으로 패킷이 전송되는 경우, 해당 주소를 분석하여 공격을 탐지할 수 있습니다. 
  • 네트워크 지연이 발생하는 경우, tcpdump로 패킷 전송 시간을 측정하여 원인을 파악할 수 있습니다. 

📡 tcpdump로 알 수 있는 정보

1. 네트워크 트래픽 기본 메타데이터

  • 캡처 시각: 패킷이 수신된 시간 (09:15:32.123456)
  • 출발지(Source) / 목적지(Destination) IP
    예: 192.168.0.10 → 172.217.161.78
  • 출발지 / 목적지 포트 (TCP/UDP 등)
    예: 443 (HTTPS), 22 (SSH), 80 (HTTP)
  • 프로토콜 종류: TCP, UDP, ICMP, ARP 등

2. 프로토콜별 세부 정보

  • TCP: 시퀀스 번호(SEQ), ACK 번호, 플래그(SYN, ACK, FIN, RST)
  • UDP: 길이, 체크섬
  • ICMP: 타입, 코드, 응답 여부 (ping)
  • ARP: IP ↔ MAC 주소 매핑 정보

3. 패킷 크기와 전송 방향

  • 전체 바이트 크기 (len=60)
  • 송신/수신 여부 (출발지와 목적지 기준으로 파악)

4. 호스트 간 연결 현황

  • 어느 클라이언트와 서버가 통신 중인지
  • 연결 시도(SYN), 연결 종료(FIN) 여부
  • 재전송 여부, 네트워크 지연 지표(RTT 추정 가능)

5. 패킷 페이로드 일부

  • 기본적으로는 헤더 정보 중심 출력
  • 옵션으로 -A 또는 -X 사용 시 내용(payload)까지 보기 가능bash
    tcpdump -i eth0 -A port 80→ HTTP 요청/응답 내용 일부까지 볼 수 있음 (텍스트 데이터는 평문 확인 가능)
    ⚠ HTTPS(SSL/TLS)는 암호화되어 내용은 해독 불가

📍 예시 출력 (HTTP 요청)

bash
10:42:53.123456 IP 192.168.0.5.55874 > 93.184.216.34.80: Flags [P.], seq 123:456, ack 789, win 501, length 333

  • 10:42:53.123456 → 패킷 캡처 시간
  • 192.168.0.5.55874 → 출발지 IP와 포트
  • 93.184.216.34.80 → 목적지 IP와 포트 (HTTP)
  • Flags [P.] → TCP Push 플래그
  • seq 123:456 → 보낸 데이터의 시퀀스 번호 범위
  • ack 789 → 수신 측이 기대하는 다음 바이트 번호
  • length 333 → 데이터 길이 333바이트

⚠ 주의

  • 개인정보, 패스워드, 세션 쿠키 등이 평문 프로토콜(HTTP, FTP, Telnet 등)에서는 노출될 수 있음
  • 캡처는 보안상 민감 행위이므로 권한이 있는 환경에서만 수행해야 함
 

 


 

TCP덤프는 리눅스에서 네트워크 패킷을 캡처하고 분석하는 명령줄 도구입니다. 네트워크 인터페이스를 통과하는 패킷을 실시간으로 가로채, 사용자가 지정한 조건에 따라 정보를 화면에 출력하거나 파일에 저장할 수 있습니다.


tcpdump의 주요 기능

  • 패킷 캡처: 특정 네트워크 인터페이스(예: eth0, lo)를 지나가는 모든 패킷을 캡처합니다.
  • 패킷 필터링: 특정 호스트, 포트, 프로토콜 등 다양한 조건을 사용하여 원하는 패킷만 선택적으로 캡처할 수 있습니다.
  • 패킷 분석: 캡처된 패킷의 헤더 정보를 분석하여 소스/목적지 IP 주소, 포트 번호, 패킷 크기, 플래그(SYN, ACK 등) 등 상세 정보를 보여줍니다.
  • 파일 저장: 캡처된 패킷을 .pcap 형식의 파일로 저장하여, 나중에 Wireshark 같은 GUI 도구로 더 상세하게 분석할 수 있습니다.

tcpdump의 활용

tcpdump는 다음과 같은 상황에서 주로 사용됩니다.

  • 네트워크 문제 해결: 특정 호스트와의 통신이 원활하지 않을 때 패킷 흐름을 분석하여 원인을 파악합니다.
  • 보안 분석: 비정상적인 트래픽이나 의심스러운 패킷(예: 포트 스캔)을 탐지하고 분석합니다.
  • 애플리케이션 디버깅: 네트워크 통신을 하는 애플리케이션의 패킷을 캡처하여 디버깅합니다.

정보처리기사 문제 (고난이도)

다음은 tcpdump 명령어가 사용된 시나리오와 관련된 정보처리기사 유형의 문제입니다.

문제: 시스템 관리자 A는 웹 서버(203.0.113.10)에서 외부 클라이언트의 접속을 모니터링하기 위해 다음과 같은 tcpdump 명령어를 실행했습니다.

Bash
 
sudo tcpdump -i eth0 -nn 'host 203.0.113.10 and port 80 and (tcp[tcpflags] & tcp-syn) != 0 and (tcp[tcpflags] & tcp-ack) = 0'

다음 중 이 명령어가 정상적으로 실행될 때 캡처되는 패킷에 대한 설명으로 옳은 것은?

① 웹 서버가 클라이언트에게 보내는 SYN/ACK 패킷

② 클라이언트가 웹 서버에게 보내는 SYN 패킷

③ 웹 서버가 클라이언트에게 보내는 ACK 패킷

④ 클라이언트가 웹 서버에게 보내는 SYN/ACK 패킷

⑤ 웹 서버가 클라이언트에게 보내는 FIN 패킷


정답 및 해설:

정답: ② 클라이언트가 웹 서버에게 보내는 SYN 패킷

해설:

이 문제는 tcpdump의 필터링 문법과 TCP 3-way handshake 과정을 모두 이해해야 풀 수 있는 문제입니다.

  • host 203.0.113.10: 소스 또는 목적지 IP 주소가 203.0.113.10인 패킷을 필터링합니다.
  • port 80: 소스 또는 목적지 포트가 80인 패킷을 필터링합니다.
  • tcp[tcpflags] & tcp-syn) != 0: TCP 플래그 중 SYN 비트가 설정된 패킷을 찾습니다. (!= 0은 해당 비트가 켜져 있음을 의미)
  • tcp[tcpflags] & tcp-ack) = 0: TCP 플래그 중 ACK 비트가 꺼져 있는 패킷을 찾습니다. (= 0은 해당 비트가 꺼져 있음을 의미)

이 두 조건을 결합하면 "SYN 비트는 켜져 있고, ACK 비트는 꺼져 있는" 패킷을 의미합니다. TCP 3-way handshake 과정에서 이 조건에 해당하는 패킷은 클라이언트가 서버로 보내는 최초의 연결 요청 패킷인 SYN 패킷뿐입니다.

  • SYN: SYN=1, ACK=0
  • SYN/ACK: SYN=1, ACK=1
  • ACK: SYN=0, ACK=1

따라서, 이 명령어는 웹 서버에 접속을 시도하는 클라이언트들의 초기 SYN 패킷을 캡처하여 웹 서버로의 새로운 연결 시도를 모니터링하는 데 사용됩니다.

 


 

tcpdump는 리눅스에서 네트워크 문제를 해결하고 모니터링하는 데 매우 유용한 명령어입니다. 다양한 옵션과 필터링 조건을 조합하여 특정 상황에 맞는 패킷을 정확하게 캡처할 수 있습니다.


1. 웹 서버 트래픽 모니터링 🌐

웹 서버(예: Apache, Nginx)로 들어오는 HTTP(80번 포트) 또는 HTTPS(443번 포트) 트래픽을 모니터링할 때 사용합니다. 이를 통해 웹 서버로의 접근 현황을 파악하거나, 특정 IP 주소로부터의 요청을 추적할 수 있습니다.

Bash
 
# 특정 포트(80 또는 443)의 패킷 캡처
sudo tcpdump -i eth0 'port 80 or port 443'

# 특정 IP 주소(192.168.1.10)와의 통신 패킷 캡처
sudo tcpdump -i eth0 'host 192.168.1.10'

2. 특정 호스트의 연결 문제 진단 💔

서버가 특정 클라이언트나 다른 서버와 통신이 되지 않을 때, tcpdump를 사용하여 패킷이 실제로 오가는지 확인합니다. TCP 3-way handshake 과정을 분석하여 연결이 어디서 실패하는지 파악할 수 있습니다.

Bash
 
# 특정 호스트(10.10.1.5)와 22번 포트(SSH)의 통신 캡처
# -nn : IP 주소와 포트 번호를 이름으로 변환하지 않고 숫자로 표시 (분석 속도 향상)
sudo tcpdump -i eth0 -nn 'host 10.10.1.5 and port 22'

3. DNS 쿼리 문제 해결 ❓

애플리케이션이 외부 도메인에 접근하지 못할 때, DNS 쿼리(53번 포트)가 정상적으로 전송되고 응답을 받는지 확인할 수 있습니다.

Bash
 
# DNS 쿼리 및 응답 패킷 캡처 (UDP 53번 포트)
sudo tcpdump -i eth0 -nn 'udp port 53'

4. 패킷 파일로 저장 및 분석 💾

실시간으로 분석하기 어려운 대량의 패킷을 파일로 저장하여, 나중에 Wireshark 같은 GUI 도구로 상세 분석할 수 있습니다. 이 방법은 트래픽이 많을 때 시스템 부하를 줄이는 데도 도움이 됩니다.

Bash
 
# 패킷을 capture.pcap 파일로 저장 (1000개 패킷 캡처 후 종료)
sudo tcpdump -i eth0 -s 0 -w capture.pcap -c 1000

# -s 0 : 패킷 전체 길이 캡처 (기본값은 68-96바이트)
# -w : 캡처된 패킷을 파일에 쓴다.
# -c : 캡처할 패킷 개수를 지정한다.

'기타' 카테고리의 다른 글

12. Disk (실시간) 복제  (0) 2025.08.28
11. RAID 구성  (1) 2025.08.28
13. 커널  (0) 2025.08.28
12. Memory  (2) 2025.08.28
11. CPU  (0) 2025.08.28

+ Recent posts