eli_ez3r
eli_ez3r
eli_ez3r
전체 방문자
오늘
어제
  • 분류 전체보기 (202)
    • 0x01 끄적끄적 :) (57)
      • Network (5)
      • Security (14)
      • Reversing (2)
      • Forensic (5)
      • Operation System (10)
      • Development (10)
      • Solution (7)
      • 보안 상식 (3)
    • 0x02 Study :) (127)
      • Pwnable (59)
      • Webhacking (56)
      • Reversing (11)
      • Machine Learning (1)
    • 0x03 ETC :) (16)
      • IT Unpacking (5)
      • IT Information (1)
      • Enjoy (4)
      • Etc (6)
    • Admin :) (0)
      • 0x01 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • github.io 블로그 개설

인기 글

태그

  • pwnable
  • hacker
  • password
  • 과정
  • Up
  • 공격
  • overflow
  • 풀이
  • write
  • web
  • 문제풀이
  • LEVEL
  • school
  • 해커
  • 해킹
  • 오버플로우
  • BOF
  • buffer
  • attack
  • 암호
  • hacking
  • hack
  • 설명
  • 메모리
  • webhacking.kr
  • hakcing
  • 문제
  • 스쿨
  • 패스워드
  • LOB

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
eli_ez3r

eli_ez3r

단방향통신(서버),TCP/IP 프로그래밍
0x01 끄적끄적 :)/Development

단방향통신(서버),TCP/IP 프로그래밍

2017. 1. 9. 15:47


구축과정이 이렇게 된다고 처음 포스팅때 소개하였습니다. 하나하나씩 짚어보면서 어떠한 역할들을 하며, 

메소드의 기본형을 알아보겠습니다. 


[서버 구축 순서]

 

WSAStartup()

▼

socket()

▼

bind()

▼​

listen()

▼​

accept()

▼​

[send, recv]

▼​

closesocket()

▼​

WSACleanup()​ 

 


 

 

1. 윈속 초기화 WSAStartup()메소드



 int WSAStartup(
  _In_   WORD wVersionRequested,
  _Out_  LPWSADATA lpWSAData
);

참조 : http://msdn.microsoft.com/en-us/library/windows/desktop/ms742213(v=vs.85).aspx​


MSDN설명에 보면 _In_ 과 _Out_ 이 있는데, 여기서 _In_은 Call By Value _Out_ 은 Call By Reference라고 보시면 됩니다.

 

 

wVersionRequested

- 프로그램이 요구하는 최상위 윈속 버전을 의미하며, 하위 8비트에 Major버전, 상위 8비트에 Minor버전을 넣어서 전달한다. (현재 윈속 버전 : 2.2)

따라서, 소스코드에서 "MAKEWORD(2,2)"라고 사용했다.

 

IpWSAData

WSADATA타입 변수의 주소를 전달하며 이를 통해서 시스템에서 제공하는 윈속 구현에 대한 세부 사항을 얻을 수 있다.

사용할 일이 거의 없으므로 현식만 갖추어 쓰면 된다.

 

  

 

 

2. 소켓 생성 메소드 socket()

 SOCKET WSAAPI socket(
  _In_  int af,
  _In_  int type,
  _In_  int protocol
);

참조 : http://msdn.microsoft.com/en-us/library/windows/desktop/ms740506(v=vs.85).aspx​


​af 

​주소 체계를 지정한다. (ipV4, ipV6 ...) 

 

​type 

​소켓 타입을 지정한다. (TCP, UDP ...) 

SOCK_STREAM -> TCP(연결지향형)

SOCK_DGRAM -> UDP(비연결지향형)

 

​protocol 

​사용할 프로토콜을 지정한다. (생략가능) 

 

ex) socket(AF_INET, SOCK_STREAM, 0);

-> ipV4, TCP소켓과 TCP프로토콜을 사용.

= socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

 

ex) socket(AF_INET, SOCK_DGRAM, 0);

 -> ipV4, UDP소켓과, UDP프로토콜을 사용.

= socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);

 

 

 

 

3. TCP/IP 프로토콜을 위한 소켓 주소 구조체 bind()



int bind(
  _In_  SOCKET s,
  _In_  const struct sockaddr *name,
  _In_  int namelen
);

참조 : http://msdn.microsoft.com/en-us/library/windows/desktop/ms737550(v=vs.85).aspx​


s

클라이언트 접속을 수용할 목적으로 만든 소켓

 

name

소켓 주소 구조체변수를 지역 IP주소와 지역 포트번호로 초기화 한 후 이 변수의 주소값을 여기에 대입한다.

 

namelen

소켓 주소 구조체의 길이(바이트단위)를 대입한다.

 

 

 

 

 

 

4. listen()


 int listen(
  _In_  SOCKET s,
  _In_  int backlog
);

참조 : http://msdn.microsoft.com/en-us/library/windows/desktop/ms739168(v=vs.85).aspx​

 

  

s

클라이언트 접속을 수용할 목적으로 만든 소켓(리스닝소캣)

 

backlog

연결 요청 대기 큐의 길이를 나타낸다.

지원 가능한 최대값을 사용하려면 "SOMAXCONN"값을 사용한다.

 

 

 

 

5. accept()

 SOCKET accept(
  _In_     SOCKET s,
  _Out_    struct sockaddr *addr,
  _Inout_  int *addrlen
);

참조 : http://msdn.microsoft.com/en-us/library/windows/desktop/ms737526(v=vs.85).aspx​

 

 

s

클라이언트 접속을 수용할 목적으로 만든 소켓

 

addr

소켓 주소 구조체 변수를 정의한 후, 이 변수의 주소값을 여기에 대입한다.

accept()메소드는 addr이 가리키는 메모리 영역을 클라이언트의 ip주소와 포트번호로 채워 넣는다.

 

addrlen

정수형 변수를 addr이 가리키는 메모리영역의 크기로 초기화 한 후, 이 벼수의 주소값을 여기에 대입한다. 

accept메소드가 리턴하면, 정수형 변수 addrlen은 함수가 초기화한 메모리 크기 값을 가진다.

 

 

 

 

 

6.closesocket()


 int closesocket(
  _In_  SOCKET s
);

참조 : http://msdn.microsoft.com/en-us/library/windows/desktop/ms737582(v=vs.85).aspx​ 

  

 

s

종료할 소켓 핸들(소켓 생성시 리턴 된 소켓 식별 번호)을 지정한다. 

 

 

 

 

 

7. WSACleanup()

int WSACleanup(void);

참조 : http://msdn.microsoft.com/en-us/library/windows/desktop/ms741549(v=vs.85).aspx​

 

 

 

 

윈속사용을 중지한다는 점을 운영체제에 알리고, 관련 리소스를 반환하는 역할을 한다.


저작자표시 비영리 변경금지 (새창열림)
    '0x01 끄적끄적 :)/Development' 카테고리의 다른 글
    • Java 웹프로그래밍 Servlet & JSP 개발환경구축
    • [SQL] 데이터베이스 기초 강좌
    • 서버(server) 클라이언트(client) 단방향 통신, TCP/IP 프로그래밍
    • TCP/IP 소켓 프로그래밍 책 추천
    eli_ez3r
    eli_ez3r

    티스토리툴바