일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- svn update
- mock.patch
- h5py.File
- data distribution
- Ransomware
- 포인터 매핑
- pytest
- Rat
- idapython
- NumPy Unicode Error
- ecma
- open office xml
- error fix
- Injection
- Analysis
- ida pro
- idapro
- Python
- javascript
- idb2pat
- MySQL
- malware
- ida
- hex-rays
- x64
- commandline
- error
- TensorFlow
- why error
- debugging
- Today
- Total
13 Security Lab
Connect() 소켓 함수의 sockaddr 구조체 IP, PORT 본문
우선 소켓에 대한 설명 아래
소켓 프로그래밍에서 클라이언트 또는 서버의 구체적인 주소를 표현하기 위해서는 주소 체계(address family), IP 주소, 포트 번호 세가지가 지정되어 있어야 하며 이 3가지 정보를 묶어서 소켓 주소(socket address)라고 부른다. 소켓 주소를 담을 구조체 sockaddr 은 다음과 같이 정의되어 있으며 이것은 2 바이트의 address family와 14 바이트의 주소(IP 주소 + 포트번호)로 구성되어 있다.
Connect함수의 IP, Port 가 어떻게 처리 되는지 확인하기 위해 MSDN을 확인 하였다.
아래와 같이 두번째 파라미터에서 name이라는 포인터가 sockaddr 구조체 주소를 가리키고 있었다.
주석을 간단하고 명료하게 잘 달아 놓은 블로그가 있어 참조하였다. (http://proneer.tistory.com/)
아래 구조체는 서로 다른 OS(또는 플랫폼)에 있어 범용성있게 지원하기 위해 표준으로 지정해놓은 구조체이다.
실제 자주쓰이는 IPv4의 값을 보기위해서는 아래 구조체를 참고하면 되는데 하이라이트 부분이 PORT / IP 부분이다.
아래와 같이 sin_family는 0x02 로서 AF_INET (IPv4인터넷 프로토콜) 을 나타낸다.
아이피와 포트는 아래와 같이 확인 할 수 있다.
|
멤버변수 |
HEX(hexadecimal) |
Decimal |
IP |
sin_addr |
0xB7 0x6B 0xF8 0x97 |
183.107.248.151 |
PORT |
sin_port |
0x1BB |
443 |
따라서 예제의 통신 대상은 183.107.248.151:443 이다.
(Ref. : http://proneer.tistory.com/entry/%EC%86%8C%EC%BC%93-%EC%A3%BC%EC%86%8C-%EA%B5%AC%EC%A1%B0%EC%B2%B4sockaddr)