免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: zuii

[C] 非阻塞connect实现端口扫描的问题-connect提前返回怎么处理? [复制链接]

论坛徽章:
0
发表于 2008-05-27 13:02 |显示全部楼层
我又想了下,句柄的创建是不会跨进程影响的,所以这个程序按这个方式执行就不会存在句柄冲突的问题~~

现在倒是遇到另外的问题了,
我用这个程序扫描一个外网的服务器,出来的结果和我用nmap扫到的不一样,比nmap的多了两个
晕的,能扫到证明端口是打开的阿?
我扫出来多了ssh和telnet端口...

而且我扫内网的另一台时,始终扫不到21端口,用nmap扫是有的,不管怎么重复扫都扫不到21...
好像有防火墙,因为用nmap的connect模式都扫不了,提示host down!可能是因为阻止了ping(今天发现的nmap的问题,只要阻止ping普通模式就扫不了,要用SYN扫)

论坛徽章:
0
发表于 2008-05-28 16:26 |显示全部楼层
UNIX® Network Programming Volume 1, Third Edition

16.3 Nonblocking connect


#include    "unp.h"

int
connect_nonb(int sockfd, const SA *saptr, socklen_t salen, int nsec)
{
    int                flags, n, error;
    socklen_t        len;
    fd_set            rset, wset;
    struct timeval    tval;

    flags = Fcntl(sockfd, F_GETFL, 0);
    Fcntl(sockfd, F_SETFL, flags | O_NONBLOCK);

    error = 0;
    if ( (n = connect(sockfd, (struct sockaddr *) saptr, salen)) < 0)
        if (errno != EINPROGRESS)
            return(-1);

    /* Do whatever we want while the connect is taking place. */

    if (n == 0)
        goto done;    /* connect completed immediately */

    FD_ZERO(&rset);
    FD_SET(sockfd, &rset);
    wset = rset;
    tval.tv_sec = nsec;
    tval.tv_usec = 0;

    if ( (n = Select(sockfd+1, &rset, &wset, NULL,
                     nsec ? &tval : NULL)) == 0) {
        close(sockfd);        /* timeout */
        errno = ETIMEDOUT;
        return(-1);
    }

    if (FD_ISSET(sockfd, &rset) || FD_ISSET(sockfd, &wset)) {
        len = sizeof(error);
        if (getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &error, &len) < 0)
            return(-1);            /* Solaris pending error */
    } else
        err_quit("select error: sockfd not set");

done:
    Fcntl(sockfd, F_SETFL, flags);    /* restore file status flags */

    if (error) {
        close(sockfd);        /* just in case */
        errno = error;
        return(-1);
    }
    return(0);
}

论坛徽章:
0
发表于 2008-06-13 23:21 |显示全部楼层
select()是你关注的描述字有满足条件的就返回,而你就一次select(),能行吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP