[C con Clase] Puerto abierto
Gilberto Cuba Ricardo
gilbert en hlg.rimed.cu
Mar Abr 21 15:05:56 CEST 2009
Gracias a todos, metiéndole fuerte, pude sacar algo que comparto con
todos ustedes y tal vez aparecen sugerencias e incluso hasta
corrección de errores.
#include <stdio.h>
#include <string.h>
#ifdef _WIN32
#include <winsock2.h>
#else
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define INVALID_SOCKET (int) (~0)
#define SOCKET_ERROR (-1)
#endif
bool is_local_open_port(unsigned int port)
{
sockaddr_in clientSrv;
#ifdef _WIN32
WSADATA wsaData;
SOCKET sock;
if(WSAStartup(MAKEWORD(2, 2), &wsaData)) {
WSACleanup();
return false;
}
#else
int sock;
#endif
sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(sock == INVALID_SOCKET) {
#ifdef _WIN32
WSACleanup();
#endif
return false;
}
clientSrv.sin_family = AF_INET;
clientSrv.sin_addr.s_addr = inet_addr("127.0.0.1"); // localhost
clientSrv.sin_port = htons(port);
memset(&(clientSrv.sin_zero), '\0', 8);
if(connect(sock, (sockaddr *) &clientSrv, sizeof(clientSrv))
!= SOCKET_ERROR) {
#ifdef _WIN32
closesocket(sock);
WSACleanup();
#endif
return true;
} else
return false;
}
int main()
{
unsigned int nport;
printf("Port: ");
scanf("%d", &nport);
printf("Open: %d \n", is_local_open_port(nport));
return 0;
}
Bueno, yo uso CodeBlocks 8.02 + MinGW para Windows y CodeBlocks 8.02 para Linux.
Salu2,
Gilbert
Nodo HLG
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Este mensaje ha sido analizado por MailScanner
en busca de virus y otros contenidos peligrosos,
y se considera que está limpio.
Más información sobre la lista de distribución Cconclase