论坛: 原创软件 标题: 对端口进行探测扫描的方法 复制本贴地址    
作者: fora [fora]    论坛用户   登录
这样一个端口一个端口的连接,速度上有些慢,请问有没有其它的方法,快速得到开放端口列表的,谢谢。
 
for i_port:=0 to 150 do
     begin
           //创建套接字
        sClntSock:=Socket(AF_INET,SOCK_STREAM,0);
        addr.sin_family:=AF_INET;
        addr.sin_addr.S_addr:=SingleHostAddr;
        addr.sin_port:=htons(i_port);
        if Connect(sClntSock,addr,sizeof(addr))<>0 then
          begin
             TimeOut.tv_sec:=2;
             TimeOut.tv_usec:=0;
             TreeView1.Items.AddChild(OpenNode,inttostr(i_port)+' 端口未打开');
          end
        else
          begin
             TimeOut.tv_sec:=2;
             TimeOut.tv_usec:=0;
             TreeView1.Items.AddChild(OpenNode,inttostr(i_port)+' 端口已打开');
          end;
         CloseSocket(sClntSock);

      end;

地主 发表时间: 06/09 16:15

回复: ricky [ricky]   版主   登录
端口连接扫描一定要用多线程的,要不然等死了

B1层 发表时间: 06/09 20:27

回复: fora [fora]   论坛用户   登录
和尚,没有别的方法了吗,多线程,我要把这些端口分成几组来扫描吗?

比较急,如果有例子,请发给我一份,先谢谢了。

fora_218@sina.com.

另外,那个攻取NetBios Host Name的有没有快速的方法?帮个忙哦,:)

前些天打风云,把功课耽误了,以后不敢了,呵呵

B2层 发表时间: 06/10 21:49

回复: ricky [ricky]   版主   登录
没有别的办法,因为tcp/ip协议确定一个端口是否可以connect就要那么长时间,要不就不准确,不过好像可以通过调整setsockopt里的时间参数来减小等待时间,不过,网上ping大于500ms的很多,所以1个端口用1s来确定失败很正常。
至于gethostbyaddr,这个函数肯定是读不到hostname,不过你查查net系列函数,应该有方法的

B3层 发表时间: 06/11 09:12

回复: fora [fora]   论坛用户   登录
我已经做了多线程,但出了个问题。线程上到50,扫描第一次可以成功,再扫就不成了。

不知道该释放什么了,:(
因为我是用的delphi的TThread

B4层 发表时间: 06/20 11:20

回复: 286 [unique]   版主   登录
快速扫描有以下几种方法:
1 分布式扫描。
2 半开式扫描。
3 多线程扫描。
其中,第一种视实际环境而定。
第二种速度最快,可以半分钟内扫完6万多个端口。
第三种视编程水平而定。

B5层 发表时间: 07/02 15:18

论坛: 原创软件

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号