实现简单的端口连接程序C/C++

程序原理:
当指定了需要扫描的IP地址和端口信息后,程序便创建一个Socket,然后向指定的IP地址和端口发起建立连接的请求,如果能成功建立连接,则说明该端口处于工作状态,否则说明端口已经被关闭无法建立连接。

程序源码:

/*
 *简单的端口扫描程序
 */
#include<stdio.h>
#include<Winsock2.h>
#pragma comment(lib , "ws2_32.lib")
typedef unsigned int UINT ;
/*
 *进行端口连接的测试
 */
bool testConnection(char *IP , UINT nPort) ;
/*
 *测试主函数
 */
int main()
{
    //初始化WinSock
    WORD wVersionRequested = MAKEWORD(2,2);
    WSADATA wsaData;
    if(WSAStartup(wVersionRequested,&wsaData) != 0)
    {
        printf("初始化WinSock失败!\n") ;
        return 0 ;
    }
    char IP[20] , nPort ;
    printf("Please input scan Port and IP : " ) ;
    scanf("%d %s" , &nPort , IP) ;

    //进行连接的测试
    if(testConnection(IP , nPort))
    {
        printf("端口连接成功 !\n") ;
    }
    else
    {
        printf("端口连接失败!\n") ;
    }

    return 0 ;
}

/*
 *进行端口连接的测试
 */
bool testConnection(char *IP , UINT nPort)
{
    SOCKET pSocket ;
    sockaddr_in addr ;
    pSocket = socket(PF_INET , SOCK_STREAM , IPPROTO_TCP) ;
    if(pSocket == INVALID_SOCKET)
    {
        printf("创建Socket失败!\n") ;
        return false ;
    }
    addr.sin_family = AF_INET ;
    addr.sin_port = htons(nPort) ;
    addr.sin_addr.s_addr = inet_addr(IP) ;
    if(connect(pSocket , (SOCKADDR*)&addr , sizeof(addr)) == SOCKET_ERROR)
    {
       return false ;
    }
    return true ;
}

posted @ 2016-12-14 21:20  luo...ye  阅读(126)  评论(0)    收藏  举报