新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论.NET,C#,ASP,VB技术
    [返回] 中文XML论坛 - 专业的XML技术讨论区计算机技术与应用『 Dot NET,C#,ASP,VB 』 → 一个多线程的简单端口扫描程序 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 11313 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 一个多线程的简单端口扫描程序 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     NoProblem 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:2
      积分:66
      门派:XML.ORG.CN
      注册:2006/4/20

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给NoProblem发送一个短消息 把NoProblem加入好友 查看NoProblem的个人资料 搜索NoProblem在『 Dot NET,C#,ASP,VB 』的所有贴子 引用回复这个贴子 回复这个贴子 查看NoProblem的博客楼主
    发贴心情 一个多线程的简单端口扫描程序

    大家帮忙看一下,代码可以通过调试,但是没有结果。看看是什么原因 ,帮忙调试一下。谢谢。#include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <winsock2.h>
    #include<windows.h>
    #pragma comment (lib,"ws2_32.lib")
    DWORD WINAPI pScan(LPVOID lp);
    int nowport;
    int startPort;
    int endPort;
    typedef struct
    {
     char ip[20];
     int port;
    }infor;
    void  main (int argc, char *argv[])
    {

       WSADATA wsa;
       HANDLE hThread1;
       HANDLE hThread2;
       HANDLE hThread3;
       infor m_infor={0};
       startPort=atoi(argv[2]);
       endPort=atoi(argv[3]);
       
       //infor *lpinfor=(infor *)lp;
       strcpy(m_infor.ip,argv[1]);
       if (WSAStartup(MAKEWORD(2,2),&wsa)!=0)
       {
        printf("start up failed \n");
           exit(-1);
       }
       hThread1=CreateThread(NULL,0,pScan,&m_infor,0,NULL);
       hThread2=CreateThread(NULL,0,pScan,&m_infor,0,NULL);
       hThread3=CreateThread(NULL,0,pScan,&m_infor,0,NULL);
       Sleep(1000);
       //
       printf("asd  ");
    }
    DWORD WINAPI pScan(LPVOID lp)
    {
     SOCKET sock;
     struct sockaddr_in sin;
        nowport=endPort;
     while(nowport<endPort)
        {   
            infor *lpinfor=(infor *)lp;
      sock=socket(AF_INET,SOCK_STREAM,0);
            sin.sin_family=AF_INET;
      sin.sin_addr.s_addr=inet_addr(lpinfor->ip);
            sin.sin_port=htons(nowport);
            if(connect(sock,(struct sockaddr *)&sin,sizeof(sin))!=SOCKET_ERROR)
      {
       printf("\n%d port open\n",ntohs(sin.sin_port));
               // nowport++;
       Sleep(10);
      }
            closesocket(sock);
            nowport++;
     }
     printf("asdt   ");
     return 1;
    }

    有什么建议的话 请与我联系一下  qq 490535635


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/12/1 14:32:00
     
     longshentailang 帅哥哟,离线,有人找我吗?
      
      
      威望:1
      等级:计算机学士学位
      文章:325
      积分:2990
      门派:XML.ORG.CN
      注册:2006/6/20

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给longshentailang发送一个短消息 把longshentailang加入好友 查看longshentailang的个人资料 搜索longshentailang在『 Dot NET,C#,ASP,VB 』的所有贴子 引用回复这个贴子 回复这个贴子 查看longshentailang的博客2
    发贴心情 
    你这个程序只是创建了3个线程,每个线程对指定IP的主机的指定端口范围进行全部扫描,所以应该会有3份相同的结果,即一个结果重复出现了3次。同时,你的Pscan函数中的nowport=endPort;应该改为nowport=startport;
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/12/11 22:15:00
     
     longshentailang 帅哥哟,离线,有人找我吗?
      
      
      威望:1
      等级:计算机学士学位
      文章:325
      积分:2990
      门派:XML.ORG.CN
      注册:2006/6/20

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给longshentailang发送一个短消息 把longshentailang加入好友 查看longshentailang的个人资料 搜索longshentailang在『 Dot NET,C#,ASP,VB 』的所有贴子 引用回复这个贴子 回复这个贴子 查看longshentailang的博客3
    发贴心情 
    以下是我改的代码,你可以看看不同之处:

    #include <stdio.h>
    #include <winsock2.h>

    #pragma comment(lib,"ws2_32.lib")

    void  WaitThreadEnd(void);
    DWORD WINAPI pScan(LPVOID lp);

    int nowport;
    int startPort;
    int endPort;
    int maxth = 0;

    typedef struct
    {
     char ip[20];
     int  port;
    }infor;

    void main(int argc,char *argv[])
    {
       HANDLE hThread;
       infor m_infor={0};
       
       startPort=atoi(argv[2]);
       endPort=atoi(argv[3]);

       //计算线程总数
       maxth = endPort - startPort+1;
       strcpy(m_infor.ip,argv[1]);

       printf("\n");

       for (startPort;startPort<=endPort;startPort++)
       {
        m_infor.port = startPort;
        hThread = CreateThread(NULL,0,pScan,(LPVOID)&m_infor,0,NULL);
        //延时
        Sleep(10);
       }
       // 等待所有的线程结束
       WaitThreadEnd();
    }

    DWORD WINAPI pScan(LPVOID lp)
    {
     SOCKET  sock;
     WSADATA     wsa; 
     sockaddr_in sin;
     
     if (WSAStartup(MAKEWORD(2,2),&wsa)!=0)
     {
      printf("start up failed \n");
      exit(-1);
     }

     infor *lpinfor=(infor *)lp;
        nowport=lpinfor->port;
      
     sock=socket(AF_INET,SOCK_STREAM,0);
     if (sock == INVALID_SOCKET)
     {
      printf("\r\nSock Error:%s", WSAGetLastError());
      return -1;
     }

        sin.sin_family=AF_INET;
     sin.sin_addr.s_addr=inet_addr(lpinfor->ip); 
        sin.sin_port=htons(lpinfor->port);
            
     if(connect(sock,(struct sockaddr *)&sin,sizeof(sin)) == 0)
     {
      printf("%d port is open\n",ntohs(sin.sin_port));
            Sleep(10);
     }
     
     closesocket(sock);

     maxth--;
     return 1;
    }

    //等待线程结束函数
    void WaitThreadEnd()
    {
     //延时
     Sleep(6000);

     //显示等待提示
     printf("\r     \r\n");
     printf(" Wait ( %d )Thread end...\r\n", maxth);

     for(;;)
     {
       //判断所有线程是否已经结束
       if(maxth > 0)
       {
         //延时等待线程序结束
         Sleep(100);
         continue;
       }
       else break;
     }
     printf("\r\n");
     return;
    }

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/12/11 22:18:00
     
     longshentailang 帅哥哟,离线,有人找我吗?
      
      
      威望:1
      等级:计算机学士学位
      文章:325
      积分:2990
      门派:XML.ORG.CN
      注册:2006/6/20

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给longshentailang发送一个短消息 把longshentailang加入好友 查看longshentailang的个人资料 搜索longshentailang在『 Dot NET,C#,ASP,VB 』的所有贴子 引用回复这个贴子 回复这个贴子 查看longshentailang的博客4
    发贴心情 
    测试用例:PortScanner.exe" 192.168.1.1 20 1030

    输出结果如下(改了一下格式):
    25 port is open
    80 port is open
    135 port is open
    139 port is open
    443 port is open
    1025 port is open

    Wait ( 0 )Thread end...

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/12/11 22:21:00
     
     sytyong 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(猛啃高等数学)
      文章:14
      积分:115
      门派:IEEE.ORG.CN
      注册:2008/3/27

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给sytyong发送一个短消息 把sytyong加入好友 查看sytyong的个人资料 搜索sytyong在『 Dot NET,C#,ASP,VB 』的所有贴子 引用回复这个贴子 回复这个贴子 查看sytyong的博客5
    发贴心情 
    C++做的 顶
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2008/11/21 19:28:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Dot NET,C#,ASP,VB 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/12/27 2:41:51

    本主题贴数5,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    78.125ms