Doctor Pepper

[Wireshark] 패킷 필터링 본문

네트워크/Wireshark

[Wireshark] 패킷 필터링

Doctor Pepper 2024. 11. 10. 12:44
728x90

 

 네트워크 분석 도구인 Wireshark는 네트워크 트래픽을 실시간으로 캡처하고 분석할 수 있는 강력한 기능을 제공한다. Wireshark에서 제공하는 패킷 필터링 기능을 활용하면, 관심 있는 데이터만을 선별적으로 추출하여 보다 효율적으로 문제를 해결하고 네트워크 상태를 진단할 수 있다. 

 

1. Wireshark에서 패킷 필터링의 중요성

 Wireshark는 수많은 패킷을 실시간으로 캡처하는 도구로, 대규모 네트워크에서 발생하는 트래픽을 모두 볼 수 있다. 하지만, 이런 방대한 데이터에서 필요한 정보를 찾는 것은 매우 어려운 작업이 될 수 있다. 따라서 패킷 필터링은 필요한 패킷만을 선별하여 분석할 수 있도록 도와주며, 분석의 정확도와 효율성을 높이는 중요한 역할을 한다.

특정 프로토콜의 트래픽만 필터링 HTTP, DNS, TCP 패킷만 보고 싶을 때 사용
특정 IP 주소나 포트 번호에 대한
패킷 필터링
특정 호스트와의 통신만 분석할 때 사용
에러나 비정상적인 패킷 탐지 오류 패킷, 재전송 패킷 등 특정 조건에 맞는 패킷을 빠르게 찾기 위해 사용

 

 

2. Wireshark 패킷 필터링의 종류

 Wireshark에서 패킷을 필터링하는 방법은 크게 디스플레이 필터(Display Filters)캡처 필터(Capture Filters)로 나눌 수 있다. 

 

 - 디스플레이 필터 : 캡처 후 분석 시에 사용되며, Wireshark가 패킷을 캡처한 후, 사용자가 필요한 패킷을 필터링하여 보고 분석할 수 있도록 돕는다. 디스플레이 필터는 매우 강력하고, 조건을 세밀하게 설정할 수 있다.

  • IP 주소로 필터링 : 특정 IP 주소의 패킷만 보고 싶을 때 사용할 수 있다.
ip.addr == 192.168.1.1
  • 포트 번호로 필터링 : 특정 포트를 사용하는 패킷을 필터링할 수 있다.
tcp.port == 80
  • 프로토콜 필터링 : 특정 프로토콜(ex. HTTP, DNS 등)만 필터링 가능하다.
http
dns
  • 복합 조건 필터링 : 여러 조건을 통시에 결합하여 복잡한 필터를 설정할 수 있다.
ip.addr == 192.168.1.1 && tcp.port == 80

 

 

- 캡처 필터 : 패킷을 캡처할 때 필터링을 적용하여 불필요한 패킷을 아예 캡처하지 않도록 하는 방식이다. 이 필터는 Wireshark가 패킷을 캡처하는 시점에서 적용되며, 캡처할 패킷의 범위를 제한하여 저장할 트래픽을 줄일 수 있다.

  • IP 주소로 캡처 필터링 : 특정 IP 주소의 트래픽만 캡처할 수 있다.
host 192.168.1.1
  • 포트 번호로 캡처 필터링 : 특정 포트를 사용하는 트래픽만 캡처할 수 있다.
port 80
  • 프로토콜 필터링 : 특정 프로토콜만 캡처할 수 있다.
tcp

 

 

- 기본 필터

필터 설명
eth Ethernet
ip Internet Protocol Version 4(IPv4)
ipv6 Internet Protocol Version 6(IPv6)
arp Address Resolution Protocol(ARP)
dhcp Dynamic Host Configuration Protocol(DHCP)
rip Routing Information Protocol(RIP)
ospf Open Shortest Path First(OSPF)
bgp Border Gateway Protocol(BGP)
icmp Internet Control Message Protocol(ICMP)
tcp Transmission Control Protocol(TCP)
udp User Datagram Protocol(UDP)
dns Domai Name System(DNS)
http Hypertext Transfer Protocol(HTTP)
http2 Hypertext Transfer Protocol Version 2(HTTP2)
http3 Hypertext Transfer Protocol Version 3(HTTP3)
tls Transport Layer Security(TLS)

 

- eth 관련 필터

필터 설명
eth.addr 수신지 혹은 송신지 MAC 주소
eth.dst 수신지 MAC 주소
eth.src 송신지 MAC 주소
eth.len 길이(16비트 음이 아닌 정수)
eth.type 타입(16비트 음이 아닌 정수)

 

- ip 관련 필터

필터 설명
ip.addr 송신지 혹은 수신지 IPv4 주소
ip.dst 수신지 IPv4 주소
ip.src 송신지 IPv4 주소
ip.flags 플래그 값들(8비트 음이 아닌 정수)
ip.flags.df DF(Don't fragment) 플래그(불리언)
ip.flags.mf MF(More fragments) 플래그(불리언)
ip.flag_offset 단편화 오프셋(16비트 음이 아닌 정수)
ip.hdr_len 헤더 길이(8비트 음이 아닌 정수)
ip.id 식별자(16비트 음이 아닌 정수)
ip.len 총 길이(16비트 음이 아닌 정수)
ip.opt.mtu MTU(16비트 음이 아닌 정수)
ip.ttl TTL(8비트 음이 아닌 정수)

 

- udp 관련 필터

필터 설명
udp.port 수신지 혹은 송신지 포트 번호(16비트 음이 아닌 정수)
udp.dstport 수신지 포트 번호(16비트 음이 아닌 정수)
udp.srcport 송신지 포트 번호(16비트 음이 아닌 정수)
udp.length UDP 데이터그램 길이(16비트 음이 아닌 정수)

 

- tcp 관련 필터

필터 설명
tcp.port 송신지 및 수신지 포트 번호(16비트 음이 아닌 정수)
tcp.dstport 수신지 포트 번호(16비트 음이 아닌 정수)
tcp.srcport 송신지 포트 번호(16비트 음이 아닌 정수)
tcp.seq 순서 번호(32비트 음이 아닌 정수)
tcp.seq_raw 실제 순서 번호(32비트 음이 아닌 정수)
tcp.nxtseq 다음 순서 번호(32비트 음이 아닌 정수)
tcp.ack 확인 응답 번호(32비트 음이 아닌 정수)
tcp.ack_raw 실제 확인 응답 번호(32비트 음이 아닌 정수)
tcp.flags 플래그 값들(16비트 음이 아닌 정수)
tcp.flags.ack ACK 플래그(불리언)
tcp.flags.fin FIN 플래그(불리언)
tcp.flags.syn SYN 플래그(불리언)
tcp.hdr_len 헤더 길이(8비트 음이 아닌 정수)
tcp.len TCP 세그먼트 길이(32비트 음이 아닌 정수)
tcp.window_size_value 윈도우 크기(16비트)
tcp.options.mss_val MSS 값(16비트 음이 아닌 정수)
tcp.analysis.ack_rtt 세그먼트에 대한 ACK까지의 RTT
tcp.analysis.out_of_order 순서가 어긋난 세그먼트
tcp.analysis.retransmission 재전송 세그먼트
tcp.analysis.fast_retransmission 빠른 재전송
tcp.analysis.duplicate_ack 중복된 ACK
tcp.analysis.duplicate_ack_num 중복된 ACK 수(32비트 음이 아닌 정수)

 

- http 관련 필터

필터 설명
http.request HTTP 요청(불리언)
http.request.line HTTP 요청 라인(문자열)
http.request.method HTTP 요청 Method(문자열)
http.request.uri HTTP 요청 URI(문자열)
http.request.uri.path HTTP 요청 URI 경로(문자열)
http.request.uri.query HTTP 요청 URI 쿼리(문자열)
http.request.uri.query.parameter HTTP 요청 URI 쿼리 파라미터(문자열)
http.request.version HTTP 요청 버전(문자열)
http.response HTTP 응답(불리언)
http.response.code HTTP 응답 코드(16비트 음이 아닌 정수)
http.response.phrase HTTP 응답 코드 설명(문자열)
http.response.line HTTP 응답 라인(문자열)
http.response.version HTTP 응답 버전(문자열)
http.accept Accept 헤더(문자열)
http.accept_encoding Accept Encoding 헤더(문자열)
http.accept_language Accept-Language 헤더(문자열)
http.cache_control Cache-Control 헤더(문자열)
http.connection Connection 헤더(문자열)
http.content_encoding Content-Encoding 헤더(문자열)
http.content_length Content length 헤더(음이 아닌 64비트 정수)
http.content_type Content-Type 헤더(문자열)
http.date Date 헤더(문자열)
http.host Host 헤더(문자열)
http.location Location 헤더(문자열)
http.last_modified Last-Modified 헤더(문자열)
http.server Server 헤더(문자열)
http.set_cookie Set-Cookie 헤더(문자열)
http.cookie Cookie 헤더(문자열)
http.user_agent User-Agent 헤더(문자열)
http.referer Referer 헤더(문자열)
http.authorization Authorization 헤더(문자열)
http.www_authenticate WWW-Authenticate 헤더(문자열)

 

- 연산자

연산자 설명
== eq 조건을 만족하는 패킷을 선택
!= ne 조건을 만족하지 않는 패킷을 선택
&& and 조건을 모두 만족하는 패킷을 선택
|| or 조건을 하나 이상 만족하는 패킷을 선택
! not 조건에 부합하지 않는 패킷을 선택
> gt 지정한 값을 초과하는 패킷을 선택
< lt 지정한 값보다 작은 패킷을 선택
>= ge 지정한 값보다 크거나 같은 패킷을 선택
<= le 지정한 값보다 작거나 같은 패킷을 선택
728x90