=================================================================================================
[실행화면]
=================================================================================================
[소스코드]
#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);
}
=================================================================================================
'IT_Programming > Network Programming' 카테고리의 다른 글
[펌] 멀티 프로세스 / 멀티 쓰레드 / 멀티 플렉싱 기법의 장점과 단점 (0) | 2009.07.02 |
---|---|
[Winsock] TCP_IP Half Close를 이용한 파일전송 (0) | 2009.07.02 |
[UDP] strftime()를 이용해서 날짜와 시간 문자열 구하기 (0) | 2009.06.30 |
[Linux C] 에코 서버, 에코 클라이언트 만들기 (sinal intterrupt 적용) (0) | 2009.06.30 |
[펌] TCP/IP 소켓 프로그래밍 with C# (0) | 2009.03.05 |