[linux c]单线程tcp port scan

 1 #include <sys/socket.h>
 2 #include <sys/types.h>
 3 #include <unistd.h>
 4 #include <stdio.h>
 5 #include <stdlib.h>
 6 #include <string.h>
 7 #include <netdb.h>
 8 
 9 int main(int argc,char *argv[])
10 {
11     int tar_socket=socket(AF_INET,SOCK_STREAM,0);
12     struct sockaddr_in tar_sockaddr;
13     int taraddr_len=sizeof(tar_sockaddr);
14     int port;
15     struct servent *tar_serv;
16     bzero(&tar_sockaddr,taraddr_len);
17     if(4!=argc)
18     {
19         printf("Usage:%s ip startport endport\n",argv[0]);
20         exit(1);
21     }
22     tar_sockaddr.sin_family=AF_INET;
23     tar_sockaddr.sin_addr.s_addr=inet_addr(argv[1]);
24     for(port=atoi(argv[2]);port<=atoi(argv[3]);port++)
25     {
26         tar_sockaddr.sin_port=htons(port);
27         if(!connect(tar_socket,(struct sockaddr*)&tar_sockaddr,taraddr_len))/*如果连接成功*/
28         {
29             tar_serv=getservbyport(htons(port),NULL);/*取得端口对应服务信息*/
30             printf("port: %d  serv: %s   open!\n",port,tar_serv->s_name);
31         }
32         else/*如果连接失败*/
33         {
34             printf("port: %d  close!\n",port);
35         }
36     }
37     close(tar_socket);
38     return 0;
39 }
posted @ 2012-10-13 22:02  Myths  阅读(479)  评论(0编辑  收藏  举报