저번주까지 UDP 패킷분석, 그리고 IP 패킷을 분석하였다.
오늘은 TCP 패킷을 분석해보았다.
TCP는 UDP와 달리 조금 까다로운 부분이 많았다.
포함관계를 다시 정리하자면
IP 패킷안에 TCP 혹은 UDP가 들어가는 것이다.
저번주 까지 했던 패킷을 덤프받는 프로그램에서
이제 IP헤더를 분석할 수 있었고
그에 따라
소스 IP주소와 목적지 IP주소를 파악할 수 있었으므로
조금 더 정교한 필터링을 할 수 있게 되었다.
(조건 문에 IP주소로 필터링 하는 코드)
또, IP 헤더에서 Protocol 타입을 알아낼 수 있으므로
TCP, UDP, ICMP를 구분하기로 했다.
(Protocol 필드로 구분하는 모습)
위 코드를 보면 이제 TCP 헤더를 분석해볼 것이므로
처음에 list를 이용해 16진수로 표현해보았다.
(오른쪽화면은 저번주에 만들었던 TCP 메세지전송 프로그램.)
위 화면을 보면 TCP 데이터가 나오는 것을 확인 할 수 있다.
UDP와 다른점은 UDP는 메세지 하나 보내면 끝이었는데
TCP는 그 전에 많은 패킷들이 왔다 갔다 한다.
자세한 특징은 다음에 더 알아보겠다.
우선,
TCP 패킷의 헤더를 분석하는 것이 먼저다.
우리가 덤프받은 TCP 패킷의 헤더
['0xc3', '0x29', '0xea', '0x60', '0x2a', '0x4', '0x15',
'0x1a', '0x0', '0x0', '0x0', '0x0', '0x80', '0x2', '0x20', '0x0',
'0xd9', '0x88', '0x0', '0x0', '0x2', '0x4', '0x5', '0xb4', '0x1', '0x3',
'0x3', '0x2', '0x1', '0x1', '0x4', '0x2']
내용은 이렇다.
1. 출발지 포트번호(2바이트) : '0xc3', '0x29' = 0xc329 = 49961
2. 도착지 포트번호(2바이트) : '0xea', '0x60' = 0xea60 = 60000
3. Sequence Number(4바이트) : '0x2a', '0x4', '0x15', '0x1a'
- 운영체제에 의하여 랜덤하게 시작된다. Session을 표현하는 고유값이다.
4. Acknowledge Number(4바이트) : '0x0', '0x0', '0x0', '0x0'
*'0x80' -> 8과 0으로 본다.
5. TCP 헤더의 길이 (4비트) -> 8 (x4) = 32바이트
6. 예약된 영역 : 0 (사용하지 않는 필드이다.)
7. Flag : '0x2' = 2 (여기서는 SYN패킷, 동기화요청)
Flag 종류
1 : FIN
2: SYN
4: RST(reset)
8: PSH(push)
16: ACK(응답)
32: URG(urgent)
(만약 동시에 설정된다면, 예를들어 SYN과 ACK가 같이 설정되면 두개의 합이된다.)
(ex. SYN-ACK 은 18번이 된다.)
8. window size (2바이트) : '0x20', '0x0'
9. TCP의 Checksum(2바이트) : '0xd9', '0x88'
10. Urgent Pointer(2바이트) : '0x0', '0x0'
---- 여기까지 딱 20바이트다.-----------------
그 이후로 옵션이 더 붙어서 패킷이 보내질 수도 있다.
자. 그러면 이제 이 내용을 바탕으로 헤더내용을
분석하여 출력해보겠다.
(TCP 패킷 분석코드)
(TCP 헤더 분석 내용)
여기서
Header 길이를 표현하려면 아까 한 바이트를 4비트로 나누어야한다.
이제 그 작업을 시작하겠다.
0x45를 4와 5로 분리하는 것이다.
먼저 0x45를 2진수로 변환한다. (bin()함수 사용)
그 후 슬라이스로 4개씩 자르고 int로 형변환 해준다.
아래와 같다.
(분리된 모습)
이걸 이용해
IP 헤더의 버젼과 헤더길이를 나누고
TCP의 길이를 구하겠다.
또 IP헤더에서 헤더길이를 정확하게 구할 수 있고 그러면
UDP,TCP 패킷이 어디서부터 시작하는지 또한 정확하게 표현할 수 있다.
(지금까지는 그냥 IP헤더가 20바이트라고 가정하고 했었다.)
(헤더 길이를 분리하는 코드)
(UDP의 시작 슬라이스와 TCP 헤더 길이, 또 flag를 표현해 수정해주었다.)
flag를 dictionary로 정의하여 키값을 대입하면 그에 대응하는 값이 출력된다.
(결과 화면)
지금 까지 TCP패킷을 분석해보았고
IP헤더도 더 정밀하게 분석하였다.
내일은 현재 진행중인 패킷 분석 프로그램을 조금 더 수정하고
본격적으로 패킷을 확인하고 변조해 보겠다.
'Hacking > Network Hacking' 카테고리의 다른 글
Network Hacking - IP Address, 서브넷마스크, public network, fragmentaion (0) | 2016.12.22 |
---|---|
Network Hacking - TCP, 3 Way-Handshaking, IP Address (0) | 2016.12.21 |
Network Hacking - UDP Header, IP Header (1) | 2016.12.17 |
Network Hacking - TCP, UDP (0) | 2016.12.16 |
Network Hacking - 네트워크, 소켓, 통신 프로그램 (0) | 2016.12.15 |