您的位置:程序门 -> vc/mfc -> 进程/线程/dll



我想写个多线程的扫端口程序(开上千线程那种),请问用哪个函数好??


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


我想写个多线程的扫端口程序(开上千线程那种),请问用哪个函数好??[已结贴,结贴人:fgwxybmt]
发表于:2007-08-30 21:25:50 楼主
afxbeginthread,createthread,_createthreadex   或者别的高手给出答案并解释   谢谢.
发表于:2007-08-31 08:29:021楼 得分:10
开上千线程?开。。。开。。。开玩笑吧?一个线程stack   1m,   一千个县城光stack就是1g内存。cpu全做context   switching了。什么样的程序需要这么多线程?

这三个api意思差不多,你如果是mfc   app就用afx,如果用runtime了就用_beginthreadex(不是_create),user   app很少直接用createthread,因为我们的程序都link   runtime(除非你自己写min   crt),createthread会造成memory   leak。
发表于:2007-08-31 09:13:512楼 得分:0
疯了,上千个线程。
一句话,不要为了线程而使用线程。
发表于:2007-08-31 09:17:453楼 得分:0
端口数才65535个,1000个线程??
发表于:2007-08-31 09:49:194楼 得分:0
感谢一楼,runtime这个词不太理解,呵呵   大家别急啊   不知   s扫描你们用过没     它最多能同时扫1000个机器   不知道它是怎么做的呢?
发表于:2007-08-31 10:20:255楼 得分:20
the   number   of   threads   a   process   can   create   is   limited   by   the   available   virtual   memory   and   depends   on   the   default   stack   size.  

if   every   thread   has   1   mb   of   stack   space,   you   can   create   a   maximum   of   32   threads.
if   you   reduce   the   default   stack   size,   you   can   create   more   threads.  

一楼说的是在default的情况下,而且如果在thread   stack为1mb的情况下最多可以create   32个线程,但如果你减少stack   size的可以创建多个线程。对于你说的同时能扫描1000个机器并不是开1000个threads,这是你理解上的错误,因为他是并发操作的,而非并行处理的。而同时处理这么多的机器不是简单的光开线程就能完成的。

发表于:2007-08-31 10:37:346楼 得分:0
看来我要看看书了   恶补一下喽...   刚学vc很多概念上的东西不懂   希望大家不要见怪...
发表于:2007-08-31 16:27:107楼 得分:0
我测试的xp最大开了2000多个,有时只有几十个,不知道怎么回事

端口扫描速度要快,用半连接扫描最快,只需要两个线程:一个发包线程,一个接收线程
发表于:2007-08-31 17:11:018楼 得分:0
哈哈
发表于:2007-08-31 17:12:519楼 得分:0
use   _beginthreadex   or   afxbeginthread
agree   with   ouyh12345(五岭散人)   and   feimingbiao()
发表于:2007-09-01 15:52:3310楼 得分:0
半连接怎么实现啊   高手给段代码   谢谢啦
发表于:2007-09-01 23:07:3611楼 得分:0
怎么不用iocp啊
发表于:2007-09-02 10:00:3312楼 得分:0
iocp对我很高深啊...
发表于:2007-09-02 11:44:4513楼 得分:0
设计iocp就是为了来做这种大吞吐量的程序的
发表于:2007-09-02 11:46:3714楼 得分:0
我也想用iocp   可是我底子薄..   谢谢你的建议.我会写的.
发表于:2007-09-02 21:23:1515楼 得分:0
http://www.codeproject.com/internet/nagtportscanner.asp

这个是基于winpcap的

发表于:2007-09-03 10:00:2416楼 得分:0
哦   我去瞧瞧.
发表于:2007-09-03 12:07:4717楼 得分:0
应该是差不多的,windows里的线程据我所知只有一种。
发表于:2007-09-04 15:51:3318楼 得分:0
for   (int   ncount=0;   ;ncount++)
{
        hthread   =   createthread(null,   0,   (lpthread_start_routine)threadscanproc,
                (lpvoid)ptthreadparameter,   null,   null);
        sleep(1);
        closehandle(hthread);
}

我这循环建线程   有的时候正常速度   有的时候超快   导到.出错   不知道为什么   不稳定.
发表于:2007-09-06 10:11:1919楼 得分:0
期待...高手.
发表于:2007-09-06 10:59:4820楼 得分:0
期待...高手.
/////////////////////////////////////////////////////////////////////////////////////
最大的高手是你自己,只有你自己才能真正解决自己的问题.
^_^

for   (int   ncount=0;   ;ncount++)
{
        hthread   =   createthread(null,   0,   (lpthread_start_routine)threadscanproc,
                (lpvoid)ptthreadparameter,   null,   null);
        sleep(1);
        closehandle(hthread);
}
///////////////////////////////////////////////////////////////////////////////////
疯子.你不断的createthread是什么意思?而且还是同一个线程.
一个线程只需要一次,除非这个线程已经结束!
发表于:2007-09-06 18:41:2421楼 得分:0
其实我这个程序是   扫端口程序..   给新线程传的参数是一直在变的   ..
发表于:2007-09-06 19:02:3222楼 得分:0
用哪个线程函数差不多,重要的是你的程序怎么写

线程通信可以采用   全局量   或   消息机制  

具体可以看看相关主题
发表于:2007-09-06 19:04:1323楼 得分:0
目前我也正在使用多线程的东西,测试过我的机子一个进程可以开最多
2010个线程
发表于:2007-09-06 22:47:4724楼 得分:0
楼上的是不是在xp   sp2下测试的啊
每次都能到2000个线程左右么?
发表于:2007-09-06 23:15:5425楼 得分:0
线程数是有限制的...大概在2020左右...好像是2028个...
发表于:2007-09-07 09:13:3126楼 得分:0
我的机子   每次   都是   2010,不同的进程也是
发表于:2007-09-07 09:20:2627楼 得分:0
cnvb(壮士沈),   windows下没有线程数的上限,你想建多少就建多少,直到你的虚拟内存光了为止,你观察到的2000多一点儿是因为每个线程缺省占1m空间,最后用了2g你的机器吐血了。

你把createthread的第二个参数从   0     改成   1024,这样就可以开   20   万个线程了。
发表于:2007-09-07 10:03:0228楼 得分:0
我的程序有个banner   显示开端口的ip和线程目录的数量,建线程时的时间间隔是sleep(1),在多数情况下的这个banner刷的都很慢,线程数量一直都不超过200,   但是有时不知道为什么速度就失控制,变的非常的快一能上1000多,但是影响了扫端口的质量,几乎扫不到什么.   好像与ip段无关,另外我肯定我没改过什么,   这种不稳定时不是的出现.   另外我提一下   我扫端口用的主要是connect这个函数!!
发表于:2007-09-07 10:45:4729楼 得分:50
feimingbiao()   (   )   信誉:98     2007-09-07   09:20:26     得分:   0    
 
 
      cnvb(壮士沈),   windows下没有线程数的上限,你想建多少就建多少,直到你的虚拟内存光了为止,你观察到的2000多一点儿是因为每个线程缺省占1m空间,最后用了2g你的机器吐血了。

你把createthread的第二个参数从   0     改成   1024,这样就可以开   20   万个线程了。
   
 
------------------------
哦   对   不过没吐血,测试程序而已   呵呵   实际上没耗资源

  fgwxybmt(++cv)   (   )   信誉:100     2007-09-07   10:03:02     得分:   0    
 
 
      我的程序有个banner   显示开端口的ip和线程目录的数量,建线程时的时间间隔是sleep(1),在多数情况下的这个banner刷的都很慢,线程数量一直都不超过200,   但是有时不知道为什么速度就失控制,变的非常的快一能上1000多,但是影响了扫端口的质量,几乎扫不到什么.   好像与ip段无关,另外我肯定我没改过什么,   这种不稳定时不是的出现.   另外我提一下   我扫端口用的主要是connect这个函数!!
   
 
-------------------------------

你的函数改下先  
bool   runflag=true;
while(runflag)
{
    if(null==createthread())//省略
    {
              runflag=false;

      }
    else
      //ok   todo:
}
发表于:2007-09-08 20:23:4930楼 得分:0
哦   明白了   那为什么有的时候   会突然大批量的createthread不成功呢?
发表于:2007-09-08 20:56:5331楼 得分:0
使用半开放扫描
发表于:2007-09-09 08:22:4632楼 得分:0
我想问问   半开放的准备性   我用connect准确率能达到95以上,当然半开放一定是很快的.
发表于:2007-09-30 09:02:3833楼 得分:0
不知道你们在使用半扫描和隐蔽扫哦得时候,有没发现一个问题,
就是在使用raw_socket,调用sendto()发送tcp包得时候   ,发不出去,要报10004这个错误
这个错误在sp2后都会有,不知道哪些大侠解决了,敬请赐教,感激万分!


快速检索

最新资讯
热门点击