简单的TCP端口扫描器

2014/10/1014:02:11 1

    该程序用于扫描某台主机中开放的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连接。

  • 微信扫码赞助
  • weinxin
  • 支付宝赞助
  • weinxin

发表评论

您必须才能发表评论!

目前评论:1   其中:访客  0   博主  0

    • 匿名

      在linux下,扫描没*放的端口时,就卡住了