大家好: 
    今天谈论一下快速端口扫描技术以及我遇到的问题,对于技术愿意和大家共同分享,对于问题请大家给予提示和帮助:
    显然,要提高端口扫描的速度,用传统的connect函数是不可以了,在win2000中,很高兴的是可以创建原始套接字进行自己组包发送了,第一步就是组一个syn包,发给目标端口,我测试了一下,向1000个端口发送这些syn包也就是1-2秒时间,果然是快的很。
    syn包发出去了,就要马上收,几乎是发了就要开始收,大家要做好发和收之间的一个同步问题,收的不及时好象会丢包(个人观点),那么,对于开放了的端口,几乎是在几毫秒到2秒的时间内,一定会有一个syn\ack包反馈回来,表示这个端口开着,如果啥也没返回的,就基本表示该端口关着。
    对于开这的端口,我们要再送一个ack和一个fin ack包以让这个端口顺利关闭,对于没开放的端口我们就啥也不发送了。
    测试了一下,扫描个几百上千的端口,用的时间也不过10秒8秒,时间省了很多。比connect函数扫描端口也快了数10倍。但是
    我的机器上有两块网卡,一个是内网的一个是外网的。由于我组合发送syn包的时候是取了内网的ip地址,收数据包的时候自然也是用内网的ip地址,所以导致扫描不到外部网络的端口,我的问题是: 
    怎么样智能的识别机器中的各个网卡以保证我无论扫内网还是扫外网端口都可以正常顺利的扫描成功,谢谢大家。    

解决方案 »

  1.   

    我觉得你先判断扫描的是内网IP还是外网的IP,这方法很简单,
    利用子网掩码。然后枚举网络适配器(网卡),调用相应的发送程序就可以了。
    发送和接受程序分外网和内网。
      

  2.   

    问个菜鸟问题:
      快速端口扫描要用哪些函数?如何实现?
      目标机器没打开时,CONNECT居然要1-2秒,早想用更快的了。
      

  3.   

    DWORD GetTcpTable (PMIB_TCPTABLE pTcpTable, PDWORD pdwSize, BOOL bOrder);
    Get the table of TCP connections.
      

  4.   

    在一个论坛上看见这样的程序,我自己测试1秒900多扫个端口
    http://8888518.y365.com/ssport.rar