Linux Socket端口扫描器
Name:
Language:
OS:
Complie:
Example:
Socket Port Scanner For Linux
Language:
C
OS:
Armhf,AArch64,X64,X86
Complie:
gcc s.c -lpthread -o s
Example:
./ ip.txt 3306
#include <stdio.h> #include <sys/socket.h> #include <sys/types.h> #include <sys/select.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <netinet/in.h> #include <errno.h> #include <netdb.h> #include <pthread.h> int conn_nonb(char *ip,int port,int nsec); pthread_mutex_t mut; int **res; struct argument { char *ip; int s_port; int e_port; int i; }; int main(int argc, const char * argv[]) { // insert code here... if (argc < 2) { printf("Example:./s ip.txt 3306\n"); printf("ip.txt Example 172.16.0.0 172.24.255.255\n"); return 0; } //int fd[65535]; char *sip = argv[1]; int s_port = atoi(argv[2]); int open[65535]; int count = 0; //使用单线程 /* for (int i = s_port; i <= e_port; i++) { printf("Port Scanner%d \n",i); int r = -1; if ((r=conn_nonb(ip, i, 100)) == 0) { open[count] = i; count++; } } */ int i,ii,iii,i1,i2,ch; int n=0; char w3[36],buf[60]={0}; FILE *fp; FILE *fp1; // 检测行数 fp=fopen(sip,"r"); while((ch = fgetc(fp)) != EOF) {if(ch == '\n'){n++;}} fclose(fp); //逐行读取 fp=fopen(sip,"r+"); for(i=1;i<=n;i++){ fgets(w3,100,fp); int da0,da1,da2,da3,da4,da5,da6,da7; sscanf(w3,"%d.%d.%d.%d %d.%d.%d.%d",&da0,&da1,&da2,&da3,&da4,&da5,&da6,&da7); for(i2 = da0; i2 <= da4; i2++){ for(i1 = da1; i1 <= da5; i1++){ for(ii = da2; ii <= da6; ii++){ if (ii==da2&&ii!=da6&&da2!=da6){ for(iii = da3; iii <= 255; iii++) { sprintf(buf,"%d.%d.%d.%d",i2,i1,ii,iii); conn_nonb(buf, s_port, 100); } } else if(da2<ii<da6&&da2!=da6&&ii!=da6){ for(iii = 0; iii <= 255; iii++) { sprintf(buf,"%d.%d.%d.%d",i2,i1,ii,iii); conn_nonb(buf, s_port, 100); } } else if (ii==da6&&da2!=da6){ for(iii = 0; iii <= da7; iii++) { sprintf(buf,"%d.%d.%d.%d",i2,i1,ii,iii); conn_nonb(buf, s_port, 100); } } else if (ii==da6&&da2==da6){ for(iii = da3; iii <= da7; iii++) { sprintf(buf,"%d.%d.%d.%d",i2,i1,ii,iii); conn_nonb(buf, s_port, 100); } } }}} //for结束 } fclose(fp); return 0; } int conn_nonb(char *ip,int port,int nsec) { int flags, n, error; fd_set rset,wset; struct timeval tval; FD_ZERO(&wset); FD_ZERO(&rset); tval.tv_sec = 1; tval.tv_usec = 0; int sockfd = socket(AF_INET, SOCK_STREAM, 0); flags = fcntl(sockfd, F_GETFL, 0); fcntl(sockfd, F_SETFL, flags | O_NONBLOCK); struct sockaddr_in address; bzero(&address, sizeof(address)); address.sin_family = AF_INET; inet_pton(AF_INET, ip, &address.sin_addr); address.sin_port = htons(port); error = 0; if((n=connect(sockfd,(struct sockaddr *)&address,sizeof(address)))<0){ if(errno!=EINPROGRESS) { printf("Connecting 1 error!\n"); return -1; } else if(n==0) { printf("Connecting 1 success! \n"); return 0; } } FD_SET(sockfd,&rset); wset=rset; int rst=select(sockfd+1, &rset,&wset,NULL,&tval); switch (rst) { case -1: perror("Select error"); exit(-1); case 0: close(sockfd); printf("Timed Out!\n"); break; default: if (FD_ISSET(sockfd,&rset)||FD_ISSET(sockfd,&wset)) { int error; socklen_t len = sizeof (error); if(getsockopt(sockfd,SOL_SOCKET,SO_ERROR,&error,&len) < 0) { printf ("getsockopt fail,connected fail\n"); return -1; } if(error==0) { printf ("%s\t%d open\n",ip,port); return 0; } } close(sockfd); } return -1; }
CM部落 》原创,转载请保留文章出处。
本文链接:Linux Socket端口扫描器 https://www.itkz.cn/note/94.html
版权声明:若无特殊注明,本文皆为《
正文到此结束
发表吐槽
你肿么看?
既然没有吐槽,那就赶紧抢沙发吧!