Search

Winsock Error Check

[- Disclaimer -] 아래 내용은 정보보안 공부 목적으로 작성된 것이나, 이를 토대로 허가되지 않은 대상에 실습을 진행할 경우 해킹 시도로 간주하여 법적 처벌을 받을 수 있음을 알려 드립니다.
Error 처리 3 가지 유형
✦ 오류 처리 불필요
✧ Return 값 미존재
✧ 호출 시 항상 성공
✦ Return 값 만으로 Error 처리
✧ WSAStartup()
✦ Return 값으로 Error 발생 확인 및 Error Code 확인
✧ 대부분의 Socket()
WSAGetLastError()
✦ Error Code 확인
int WSAGetLastError(void);
Plain Text
복사
WSAGetLastError() - Ex)
if (Socket() == 실패) { int errcode = WSAGetLastError(); printf(errcode에 해당하는 Error Message) }
Plain Text
복사
FormatMessage()
✦ Error Code에 대응되는 Error Message 확인
✧ dwFlags
FORMAT_MESSAGE_ALLOCATE_BUFFER: Error Message 저장 공간 메모리 할당 FORMAT_MESSAGE_FROM_SYSTEM: OS로부터 Error Message 가져옴
Plain Text
복사
✦ lpSource
NULL
✦ dwMessageId
WSAGetLastError()의 Return 값 Error Code
✦ dwLanguageId
✧ Error Message 표시 Language
→ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT) 사용 시 제어판 Default Language로 표시
✦ lpBuffer
✧ Error Message 주소
✦ nSize
✧ 0
✦ *Arguments
✧ NULL
// 흔히 사용되는 Parameter DWORD FormatMessage(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPTSTR lpBuffer, DWORD nSize, va_list *Arguments);
Plain Text
복사
LocalFree()
✦ Error Message 할당된 메모리 반환
Error Message 확인
✦ MessageBox() 사용
void err_quit(char *msg) { LPVOID lpMsgBuf; FormatMesssage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, WSAGetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpMsgBuf, 0, NULL); MessageBox(NULL, (LPCTSTR)lpMsgBuf, msg, MB_ICONERROR); LocalFree(lpMsgBuf); exit(1); }
Plain Text
복사
✦ Printf() 사용
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); }
Plain Text
복사