共计 1746 个字符,预计需要花费 5 分钟才能阅读完成。
该程序用于扫描某台主机中开放的 TCP 端口,比较简单,至于扫描到了端口后做什么事,由大家去发挥咯。
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <time.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netdb.h>
void msg()
{ printf("EP:scan ip startport endport\nEP:scan 127.0.0.1 20 2009\n");
}
int main(int argc,char** argv)
{
char *ip;
int startport,endport,sockfd,i;
struct sockaddr_in to;
float costtime;
clock_t start,end;
if(4!=argc)
{ msg();
return 0;
}
ip=argv[1];
startport=atoi(argv[2]);
endport=atoi(argv[3]);
if(startport<1 || endport>65535 || endport<startport)
{ printf(" 端口范围出错 \n");
return 0;
}
else
printf("Scaned IP:\t[%s]\nStart port:\t[%d]\nEnd port:\t[%d]\n",ip,startport,endport);
to.sin_family=AF_INET;
to.sin_addr.s_addr=inet_addr(ip);
start=clock();
for(i=startport;i<=endport;i++)
{ sockfd=socket(AF_INET,SOCK_STREAM,0);
to.sin_port=htons(i);
if(connect(sockfd,(struct sockaddr *)&to,sizeof(struct sockaddr))==0)
{ printf("%s %d\n",ip,i);
}
close(sockfd);
}
end=clock();
costtime=(float)(end-start)/CLOCKS_PER_SEC;
printf(" 用时:%f 秒 \n",costtime);
return 0;
}
编译运行后的示例如下:
./tcp_scan 192.168.0.1 10 65535
Scaned IP: [192.168.0.1]
Start port: [10]
End port: [65535]
192.168.0.1 22
192.168.0.1 80
192.168.0.1 443
192.168.0.1 1194
192.168.0.1 3306
192.168.0.1 8181
192.168.0.1 8183
192.168.0.1 36588
192.168.0.1 37527
用时:2.440000 秒
说明:程序扫描起始端口为 10,结束端口为 65536,从扫描结果可以看到有 22 80 等这些端口是开放的监听 TCP 连接。
正文完
创作不易,扫码加点动力
发表至: C/C++
2014-10-10
在linux下,扫描没*放的端口时,就卡住了