IT_Programming/Network Programming

[WinSock] 열린 포트 검색하기

JJun ™ 2009. 7. 1. 14:49

=================================================================================================

 

[실행화면]

 

 

 

=================================================================================================

 

[소스코드]

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock2.h>

 

#pragma comment(lib, "WS2_32.lib")

 

void conn_init(SOCKET *sock, SOCKADDR_IN *serv_addr, char *IP_Address, int port);
void ErrorHandling(char *message);

 

int main(int argc, char *argv[])
{
       WSADATA wsaData;
       SOCKET sock;
       SOCKADDR_IN serv_addr;
       int start, end, i, state;

 

       if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) // Winsock 2.2 dll Load
              ErrorHandling("WSAStartup Error!");
 
       if(argc != 4)
       {
              printf("Usage : %s <IP> <Start PORT> <End Port>\n", argv[0]);
              exit(0);
       
}

 

       start = atoi(argv[2]);
       end = atoi(argv[3]);

       printf("Start Port : %d, End Port : %d\n", start, end);

 

       for(i=start; i<=end; ++i)
       {
              state = 0;
              conn_init(&sock, &serv_addr, argv[1], i); 
              if(connect(sock, (SOCKADDR *)&serv_addr, sizeof(serv_addr)) == -1) // 연결 실패
                     state = 1;

 

              printf("Port[%d] = %s\n", i, (state == 1)? "CLOSED" : "OPENED");
              closesocket(sock);
       }

 

       WSACleanup();

 

       return 0;
}

 

void conn_init(SOCKET *sock, SOCKADDR_IN *serv_addr, char *IP_Address, int port)
{
       *sock = socket(PF_INET, SOCK_STREAM, 0);
       if(*sock == INVALID_SOCKET)
              ErrorHandling("socket() Error!");

 

       serv_addr->sin_family = AF_INET;
       serv_addr->sin_addr.s_addr = inet_addr(IP_Address);
       serv_addr->sin_port = htons(port);
}

 

void ErrorHandling(char *message)
{
       fputs(message, stderr);
       fputc('\n', stderr);
       exit(1);
}

 

=================================================================================================