该程序用于扫描某台主机中开放的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连接。
- 微信扫码赞助
- 支付宝赞助
2015/04/14 14:18:33
在linux下,扫描没*放的端口时,就卡住了