Linux Socket端口扫描器
Name:
Language:
OS:
Complie:
Example:
Socket Port Scanner For LinuxLanguage:
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
正文到此结束





发表吐槽
你肿么看?
既然没有吐槽,那就赶紧抢沙发吧!