티스토리

  • 전체보기 (32)
    • 개념 (2)
    • 네트워크 (14)
    • 프리코스 (1)
    • 스프링 (8)
      • 테스트 (1)
    • 프로젝트 (1)
    • 회고 (1)
    • 알고리즘 (4)
    • 자바 (1)
    • MySQL (0)
코딩_초보
코초의 학습일지
코딩_초보
전체 방문자
오늘
어제

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 코테
  • n+1
  • 현대 sw
  • Servlet Container
  • 충돌위험 찾기
  • 우아한 테크코스
  • 빈 등록방법
  • 프리코스
  • 동적 라우팅
  • 소켓프로그래밍
  • 프로그래머스
  • 컴포넌트 스캔
  • 동시 처리
  • 정적 라우팅
  • ripv2
  • typescript와 javascript의 차이
  • 함께하는 효도
  • 소프티어
  • @BeforeAll
  • @MockBean
  • 쓰레드 풀
  • 스프링 멀티쓰레드
  • 알고리즘
  • softeer
  • spring grpc
  • 스프링
  • @Mock
  • 퍼즐 게임 챌린지
  • grpc
  • 우아한 테크코스5기

최근 댓글

최근 글

hELLO · Designed By 정상우.
코딩_초보

코초의 학습일지

WireShark 실습 - 패킷 분석
네트워크

WireShark 실습 - 패킷 분석

2022. 6. 24. 18:02

WireShark란?

오픈 소스 패킷을 분석하는 프로그램으로써 네트워크의 문제, 분석, 소프트웨어 및 통신 프로토콜 개발, 교육에 사용된다.

와이어 샤크 필터를 활용해 패킷을 분석 및 확인

​

[참고] 와이어샤크 필터

​

&& AND

|| OR

! NOT

== eq

ip ( addr = 출발지와 목적지, src = 출발지, dst= 목적지)

​

간단한 연습문제

1. 출발지 IP 주소 or 목적지 IP 주소가 172.16.5.254인 것을 출력

=> ip.addr == 172.16.5.254

2. 출발지 TCP 포트 번호 or 목적지 TCP 포트 번호가 80인 것을 출력

=> tcp.port ==80

3. 출발지 IP 주소가 172.16.5.254 이고 목적지 UDP 포트 번호가 53인 것을 출력

=>ip.src == 172.16.5.254 && udp.dstport eq 53

이런식으로 filter에 검색하는 방식이다.

​

wireshark 예제들을 통해 설명

wireshark filter를 실습을 통해 연습

 
Wireshark · Download

Download Wireshark The current stable release of Wireshark is 3.2.1. It supersedes all previous releases. Stable Release (3.2.1) Windows Installer (64-bit) Windows Installer (32-bit) Windows PortableApps® (32-bit) macOS 10.12 and later Intel 64-bit .dmg Source Code Old Stable Release (3.0.8) Docum...

www.wireshark.org

​

​

[예제] 와이어샤크

​

PC---------------------------------------------서버

192.168.1.254 192.168.1.201

70:85:C2:0A:E8:F6 00:0C:29:DF:EF:B4

​

EX1) '192.168.1.201' ARP 요청 및 응답 캡처

PC>arp -d

PC>ping 192.168.1.201

​

요청

arp.src.hw_mac == 70:85:C2:0A:E8:F6 && arp.dst.proto_ipv4 == 192.168.1.201

: 처음 ARP를 요청하기 위해서는 브로드 캐스트 방식으로 보내고, 내가 요청하는것이기 때문에

출발지 arp mac주소는 나의 주소를 입력 후 더 정확한 결과를 출력하기 위해 보낸 arp 도착지의 ip주소를 입력한다.(mac주소를 알기 위해 arp요청을 하는 것이기 때문에 ip주소를 입력한 것

​

응답

arp.src.proto_ipv4 == 192.168.1.201 && arp.dst.hw_mac ==70:85:C2:0A:E8:F6

: 요청을 받은 서버는 자신의 ip주소를 출발지로 하고 도착지의 mac주소를 넣는다.

도착지의 ip주소를 입력해도 무방

arp.src.proto_ipv4 ==192.168.1.201 && arp.dst.proto_ipv4 ==192.168.1.254

Ex2) '192.168.1.201' HTTP 및 TCP 3-Way 핸드 쉐이킹 캡처

​

웹-브라우저 -> http://192.168.1.201

​

ip.addr == 192.168.1.201 && http

ip.addr == 192.168.1.201 && tcp.port == 80

​

ip.src == 192.168.1.254 && ip.dst == 192.168.1.201 && tcp.flags eq 0x02 && tcp.dstport == 80

ip.src == 192.168.1.201 && ip.dst == 192.168.1.254 && tcp.flags eq 0x12 && tcp.srcport == 80

ip.src == 192.168.1.254 && ip.dst == 192.168.1.201 && tcp.flags eq 0x10 && tcp.dstport == 80 && tcp.seq == 1 && tcp.ack == 1

: 3Way 핸드 쉐이킹의 결과 값을 얻어오기 위해서는 1.(SYN) 2. (SYN, ACK) 3. (ACK) 모두의 결과값을 얻어오기 위해 아래와 같이 묶어 or을 사용한다.

(ip.src == 192.168.1.254 && ip.dst == 192.168.1.201 && tcp.flags eq 0x02 && tcp.dstport == 80) or

(ip.src == 192.168.1.201 && ip.dst == 192.168.1.254 && tcp.flags eq 0x12 && tcp.srcport == 80) or

(ip.src == 192.168.1.254 && ip.dst == 192.168.1.201 && tcp.flags eq 0x10 && tcp.dstport == 80 && tcp.seq == 1 && tcp.ack == 1)

: 마지막 tcp.seq == 1 && tcp.ack == 1을 한 이유는 데이터를 주고 받을 때 TCP는 데이터 스트림을 통해 정보를 나누어 seq 번호를 정해 보낸다. 그렇기 때문에 3Way 핸드 쉐이킹의 과정을 보기 위해서는

처음 데이터를 보내는 것을 봐야 하기 때문에 seq ==1을 하는 것

​

​

​

Ex3) '192.168.1.201' ICMP Echo-Request, ICMP Echo-Reply 캡처

​

PC>ping 192.168.1.201

​

ip.addr == 192.168.1.201 && icmp

​

(ip.src == 192.168.1.254 && ip.dst == 192.168.1.201 && icmp.type == 8) or

(ip.src == 192.168.1.201 && ip.dst == 192.168.1.254 && icmp.type == 0)

​

​

​

Ex4) '168.126.63.1' DNS 요청 및 응답 캡처

​

PC>nslookup www.naver.com

​

ip.addr == 192.168.1.254 && dns

ip.addr == 168.126.63.1 && dns

(ip.addr == 192.168.1.254 && dns) or (ip.addr == 168.126.63.1 && dns)

또는 (ip.addr == 192.168.1.254 && dns) or (ip.addr == 168.126.63.1 && udp.port eq 53)

​

​

ip.src == 192.168.1.254 && ip.dst == 168.126.63.1 && dns.qry.name == www.naver.com

ip.src == 168.126.63.1 && ip.dst == 192.168.1.254 && dns.qry.name == www.naver.com

​

 

 

 

 

- 사용자 시스템 : 192.168.20.202

- 사용자가 접근한 시스템 : www.naver.com(210.89.160.88), 211.216.46.15, 192.168.20.200

​

1) 네이버로 HTTP 서비스 요청 이전에 실시한 TCP 3-Way 핸드 쉐이킹 과정을 분석한다.

​

(ip.src == 192.168.20.202 && ip.dst == 210.89.160.88 && tcp.dstport == 80 && tcp.flags == 0x02) or (ip.src == 210.89.160.88 && ip.dst == 192.168.20.202 && tcp.srcport == 80 && tcp.flags == 0x12) or (ip.src == 192.168.20.202 && ip.dst == 210.89.160.88 && tcp.dstport == 80 && tcp.flags == 0x10 && tcp.seq == 1 && tcp.ack == 1)

​

2) Naver에서 검색한 문자열은 무엇인가?

​

- 네이버에서 직접 검색을 실시하여 URL 정보를 확인한 한다.

- 와이어샤크 -> 파일 -> Export Objects -> HTTP에 가서 네이버 검색 내용을 확인한다.

- 3883 패켓 클릭 -> 와이어샤크 -> 마우스우클릭 -> Follow TCP Stream -> URL 인코딩 복사

- URL 디코딩 사이트에가서 디코딩 실시~

​

https://search.naver.com/search.naver?sm=top_hty&fbm=1&ie=utf8&query=%ED%8F%90%EB%A0%B4

url 인코딩(한글 -> %ED%8F%90%EB%A0%B4)

url 디코딩(한글 <- %ED%8F%90%EB%A0%B4)

 
URL Decoder/Encoder

URL Decoder/Encoder Input a string of text and encode or decode it as you like. Handy for turning encoded JavaScript URLs from complete gibberish into readable gibberish. If you'd like to have the URL Decoder/Encoder for offline use, just view source and save to your hard drive. The URL Decoder/Enco...

meyerweb.com

​

3) '211.216.46.15'와 실시한 SSL 3-Way 핸드 쉐이킹 및 SSL 패켓을 분석한다.

​

(ip.src == 192.168.20.202 && ip.dst == 211.216.46.15 && tcp.dstport == 443 && tcp.flags == 0x02) or (ip.src == 211.216.46.15 && ip.dst == 192.168.20.202 && tcp.srcport == 443 && tcp.flags == 0x12) or (ip.src == 192.168.20.202 && ip.dst == 211.216.46.15 && tcp.dstport == 443 && tcp.flags == 0x10 && tcp.seq == 1 && tcp.ack == 1)

(ip.src == 192.168.20.202 && ip.dst == 211.216.46.15 && ssl) or (ip.src == 211.216.46.15 && ip.dst == 192.168.20.202 && ssl)

​

​

4) '192.168.20.200'으로 Telnet 접속시 아이디/패스워드는 무엇이며, 실행했던 명령어 및 내용은 무엇인가?

​

(ip.src == 192.168.20.202 && ip.dst == 192.168.20.200 && telnet) or (ip.src == 192.168.20.200 && ip.dst == 192.168.20.202 && telnet)

=> 입력한 아이디와 패스워드를 보기 위해서는 해당 라인에서 라우스 오른쪽 클릭 -> Follow TCP Stream

아이디 : user01

비밀번호 : user01

사용한 명령어 : cat , etc, password || head -5 , exit

인 것을 알 수 있다.

​

​

5) '192.168.20.200'으로 SSH 접속시 교환된 패켓들을 분석한다.

​

(ip.src == 192.168.20.202 && ip.dst == 192.168.20.200 && ssh) or (ip.src == 192.168.20.200 && ip.dst == 192.168.20.202 && ssh)

​

​

6) '192.168.20.200'으로 FTP 접속시 아이디/패스워드는 무엇이며, 업로드 또는 다운로드한 파일/내용은 무엇인가?

​

(ip.src == 192.168.20.202 && ip.dst == 192.168.20.200 && ftp) or (ip.src == 192.168.20.200 && ip.dst == 192.168.20.202 && ftp)

​

(ip.src == 192.168.20.202 && ip.dst == 192.168.20.200 && ftp-data) or (ip.src == 192.168.20.200 && ip.dst == 192.168.20.202 && ftp-data)

    '네트워크' 카테고리의 다른 글
    • [동적 경로] RIPv2 - 균등 로드 분산
    • 정적 라우팅(static routing)과 동적 라우팅(dynamic routing) 프로토콜(protocol)
    • [소켓프로그래밍] 로그인 구현하기
    • [소켓프로그래밍] 간단한 채팅방 구현
    코딩_초보
    코딩_초보

    티스토리툴바