getports.c

来自「非常高效的扫描器」· C语言 代码 · 共 93 行

C
93
字号
// not done yet, not used.#include <stdio.h>#include <stdlib.h>#include <fcntl.h>#include <time.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <errno.h>int getports(char *ip, struct portscan_ *ports){  struct sockaddr_in addr[ports->numports];  // set up sockets and address struct's for each port to scan.  // remember to add the new structure members in multiscan.c  int sockets[ports->numports], count;  for(count = ports->numports; count > 0; count--)  {     sockets[count] = socket(AF_INET, SOCK_STREAM, 0);     addr[count].sin_family = AF_INET;     addr[count].sin_port = htons(ports.ports[count]);     addr[count].sin_addr = inet_addr(ip);  }connect_nonb(int sockfd, struct sockaddr *saptr, int salen, int nsec){ int flags, n, error; int 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 );   if ( n == 0 )    goto done; FD_ZERO(&rset); FD_SET(sockfd, &rset); wset = rset; tval.tv_sex = nsec; tval.tv_usec = 0; if ( (n = select(sockfd + 1, &rset, 	&wset, NULL, nsec ? &tval : NULL)) == 0) {    close(sockfd);    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 );   } else printf(" select error: sockfd not set\n");  done:   fcntl(sockfd, F_SETFL, flags);    if( error ) {      close(sockfd);      errno = error;      return ( -1 );   }   return(0);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?