[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