[- Disclaimer -]
아래 내용은 정보보안 공부 목적으로 작성된 것이나, 이를 토대로 허가되지 않은 대상에 실습을 진행할 경우 해킹 시도로 간주하여 법적 처벌을 받을 수 있음을 알려 드립니다.
socket()
✦ Socket 생성
✦ Parameter1에 전달되는 Argument1
✧ 주소 체계
→ AF_INET, AF_INET6, AF_IRDA, AF_BTH
✦ Parameter2에 전달되는 Argument2
✧ Socket Type
→ SOCK_STREAM // 연결 지향형 Protocol
→ SOCK_DGRAM // 비연결 지향형 Protocol
✦ Parameter3에 전달되는 Argument3
✧ 사용할 Protocol이며, Parameter2까지만 지정해도 Protocol이 1개가 나온다면 NULL로 지정 가능
→ IPPROTO_TCP, IPPROTO_UDP
✦ Return 값
✧ 성공
→ 새 Socket
✧ 실패
→ INVAILD_SOCKET
SOCKET socket(int af, int type, int protocol);
Plain Text
복사
SOCKET Type
✦ Socket Descriptior
✦ 32 bit 정수
주소 체계 확인
✦ <winsock2.h> 혹은 <ws2def.h>
(...)
#define AF_INET 2 // Internetwork: UDP, TCP, etc
(...)
#define AF_INET6 23 // Internetwork Version 6
(...)
#define AF_IRDA 26 // IrDa
(...)
#define AF_BTH 32 // Blooth RFCOMM/L2CAP protocols
(...)
Plain Text
복사
closesocket()
✦ Socket 닫기
✦ Return 값
✧ 성공
→ 0
✧ 실패
→ SOCKET_ERROR
int closesocket(SOCKET s);
Plain Text
복사
Socket 생성 및 닫기 - Ex)
#pragma comment(lib, "ws2_32")
#include <winsock2.h>
void err_display(char *msg) {
LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM, NULL, WSAGetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpMsgBuf, 0, NULL);
printf("[%s] %s", msg, (char *)lpMsgBuf);
LocalFree(lpMsgBuf);
exit(1);
}
int main(int argc, char *argv[]) {
// Winsock 초기화
WSADATA wsa;
if(WSAStartup(MAKEWORD(2,2), &wsa) != 0)
return 1;
HANDLE hThread[2];
hThread[0] = CreateThread(NULL, 0, TCPServer4, NULL, 0, NULL);
hThread[1] = CreateThread(NULL, 0, TCPServer6, NULL, 0, NULL);
WaitForMultipleObjects(2, hThread, TRUE, INFINITE);
// Winsock 종료
WSACleanup();
return 0;
}
Plain Text
복사



