Hi yoahn 개발블로그

[네트워크 분석 실습] 실습 정리 본문

sswu

[네트워크 분석 실습] 실습 정리

hi._.0seon 2021. 10. 22. 00:14
반응형

1. Wireshark

Display filter expressions

English C-like Description Example
eq == Equal ip.src==10.0.0.5
ne != Not Equal ip.src != 10.0.0.5
gt > Greater than frame.len > 10
lt < Less than frame.len < 128
ge >= Greater than or Equal to frame.len >= 0x100
le <= Less than or equal to frame.len <= 0x20
contains   Protocol, field or slice contains a value sip.To contains "a1543"
matches ~ Protocol or text field matches a Perl-compatible regular expression http.host matches "acme\\.(org|com|net)"
bitwise_and & Bitwise AND is non-zero tcp.flags & 0x02
  • text 문자열
    • http.request.uri == "https://www.wireshark.org/"
    • "www.\x77\x69\x72...\x6b.org"
    • 순수한 문자열인 경우 문자열 앞에 r 을 붙인다
      r"\(X11;"
  • Slice 연산
    eth.src == 00:00:83:00:20:20
    • [start : length]
      eth.src[0:3] == 00:00:83
    • [start - end_offset] - start 지점부터 end 지점
      eth.src[1-2] == 00:83
    • [ : len] - start = 0 ~ len
      eth.src[ :4] == 00:00:83:00
    • [start_offset : ] - start ~ 끝
      eth.src[4: ] == 20:20
    • [offset, start : length] - 나열된 범위 합치기
      eth.src[4, 1:2] == 20:00:83
  • membership operator
    • tcp.port in {80 443 8080}
    • tcp.port == 80 || tcp.port == 443 || tcp.port == 8080
    • tcp.port in {443 4430..4434}
      tcp.port in {10..8000} : dst port, src port 중 하나라도 포함되면 true
    • tcp.port == 443 || (tcp.port >= 4430 && tcp.port <= 4434)
      src port는 80 이면 마지막 조건에 맞고
      dst port 가 5678이면 두번째 조건에 맞기 때문에 괄호 속 연산이 참이 된다.
  • != 연산
    • ip.addr != 1.2.3.4 인 경우
      • src = 1.2.3.4 && dst = 3.3.3.3
      • src = 3.3.3.3 && dst = 1.2.3.4
        위 두가지 경우 true
    • !(ip.addr == 1.2.3.4) 와
      ip.src != 1.2.3.4 && ip.dst != 1.2.3.4 가 같은 결과
  1. http 요청을 실행한 웹 브라우저 유형
    -> User-Agent: 
  2. http 요청을 보낸 포트: 80
  3. http 버전 확인
    - 내 브라우저의 http 버전은 내가 보낸 요청에서 확인
  4. 지원 언어 확인
    Accept-Language
  5. 마지막으로 수정된 날짜
    -> last-modified
  6. content byte 크기
    Content-Length
  7. Cache-Control: max-age=X
    설정한 시간이 지나면 삭제

Conditional GET

http://gaia.cs.umass.edu/wireshark-labs/HTTP-wireshark-file2.html

  1. 첫번째 GET 요청에는 If-Modified-Since 부분이 없음
  2. 두번째 GET 요청에는 If-Modified-Since 부분이 있음
    이 필드는 이 시간 이후 수정된 경우 요청된 응답을 돌려줌. 수정되지 않은 경우 304 응답, 리소스 없음

HTTP Authentication

http://gaia.cs.umass.edu/wireshark-labs/protected_pages/HTTP-wireshark-file5.html

  1. 인증이 필요한 페이지에 처음 접근 시
    401 UnAuthorized
  2. 위 주소에 id / password 입력 시
    Authorization -> Credentials: wireshark:network
    id: wireshark, pwd: network

nslookup cmd

  1. Server, Address
    응답을 준 dns 서버의 주소
    내꺼는 공유기 주소임
  2. Non-Authoritative answer 에게 응답이 옴
    책임 서버에게 응답을 받은게 아니라, 어딘가에 캐시된 정보를 알려줌
  3. 기본, -type=A
    host 네임의 ip 주소를 리턴함
  4. -type=AAAA
    IPv6 주소를 리턴
  5. -type=NS
    nslookup 한 도메인을 관리하는 책임 DNS 가 존재하는데, 그 DNS의 호스트 이름을 알려줌
  6. -type=MX
    SMTP 메일 

UDP

  1. UDP 페이로드 부분이 표현가능한 최대 범위 = (2^16 -1) - 8
    length = 16 bit
    = (2^16 - 1) => 최대 세그먼트 부분
    = (2^16 - 1) -8 => 최대 페이로드
  2. 나타낼 수 있는 최대 포트 번호 크기: 2^16 - 1 = 65,535
  3. UDP 프로토콜 번호: 17

TCP

  1. 세그먼트 최대 사이즈를 넘어가는 경우 TCP 세그먼트 여러개로 쪼개짐
  2. Flag bit
    1. SYN
      3-way handshaking 의 첫번째 tcp 메시지
      - sequence 넘버: 클라이언트가 설정 (0)
    2. SYN, ACK
      SYN 메시지에 대한 응답
      - sequence 넘버: 서버가 설정 (0)
    3. ACK
      - SYN, ACK 메시지에 대해 잘 받았다고 응답
      - PSH, ACK 메시지
      - FIN, ACK
    4. PSH, ACK
      서버에 있는 버퍼가 가득 차지 않아도 바로 응답하도록 요청
  3. ACK 넘버
    다음에 자신이 받기를 기대하는 시퀀스 번호
    자신이 받은 시퀀스 넘버 + 현재 받은 데이터 (or cumulative ACK는 현재까지 받은 데이터)
    처음부터 현재까지 받은 바이트스트림의 양
  4. 시퀀스 넘버
    ACK로 받은 넘버로 지정해서 보냄
  5. TCP Segment Len
    패킷에 나오는 Len 길이는 payload 길이를 말하는 것
  6. EstimatedRTT = (1 -  ⍺) * EstimatedRTT + ⍺ * SampleRTT
    (1 -  ⍺) * 첫번째 세그먼트 RTT + ⍺ * 두번째 세그먼트 RTT
  7. Win
    receive window (rwnd)
    자신이 받을 수 있는 데이터의 양을 상대방에게 알려주는 것
    '나는 이만큼만 받을 수 있다'
    이 정보를 가지고 flow control 함
  8. SLE, SRE
    Selective ACK
    0~ ACK, SLE ~ SRE 까지는 데이터를 받았다고 알려줌
    => ACK ~ SLE, SRE ~ end 까지는 아직 못받음'
  9. TCP 세그먼트 갯수 -> Reassembled

IP analysis - network layer

  1. TTL
    • router는 각 데이터그램을 받을 때마다 TTL 값을 1 씩 감소
    • TTL 값이 0이 되면, host에게 알림
  2. Traceroute
    • 첫번째는 1개 이상의 데이터그램을 TTL = 1로 설정해서 보냄
  3. IP datagram 에서 Protocol 부분 == Upper layer protocol
  4. IP header length = 20
  5. 쪼개진 IP datagram인지 확인하려면
    1. Flags 필드에서
      More fragments: Not set 확인
      -> IPv4 프로토콜
    2. Fragment Offset: 0 이면
      쪼개진 데이터 그램이 뒤에 존재하지 않음
  6. 쪼개진 IP 데이터그램의 총 사이즈
    Total Length 값을 모두 더함
    1500 + 1500 + 40
  7. 두번째 fragment인지 확인하려면
    -> Fragment offset: 첫번째 fragment data 크기
    -> Identification 값 같음
  8. IPv6 주소
    1. 16bit 씩 8자리로 구성 = 128bit
    2. 2601:193:8302:4620:215c:f5ae:8b40:a27a
      0193 -> 193 : 앞에 0은 생략됨
    3. 2001:558:feed::1
      :: 은 사이의 값이 전부 0임을 나타냄
  9. flow label
    데이터그램의 흐름을 인식하는데 사용됨
  10. IPv6는 헤더의 길이가 고정됨 -> 20바이트, 헤더에 표시 안함
    payload length = 37byte
  11. IPv4 == Upper layer protocol == protocol
    = IPv6 == Next header
    1. IPv6 데이터그램을 받으면 next header에 적힌 프로토콜로 전달함

UDP 사용 프로토콜

: DNS, HTTP/3, DHCP

ICMP는 네트워크 계층에서 자체 프로토콜 사용함

반응형

'sswu' 카테고리의 다른 글

오픈소스 소프트웨어 중간 정리  (0) 2022.03.20
[네트워크 분석 실습] 네분실 기말 정리  (0) 2021.11.19
파이썬 기말 정리  (0) 2021.11.15
[모바일SW] 기말 정리1  (0) 2021.11.08
[네트워크 분석 실습] 정리1  (0) 2021.09.20
Comments