python2.7版本的,我写的代码哪里有问题,为什么跑起来就一直这样,不停止?我是模仿最后这段代码编写的
import os
import platform
import Queue
import threading
from IPy import IP
import pymysql
import time
printLock = threading.Semaphore(1) #lock Screen print
TimeOut = 5
def get_os():
'''
get os 类型
'''
os = platform.system()
if os == "Windows":
return "n"
else:
return "c"
class find_ip():
'''
给出当前的127.0.0 ,然后扫描整个段所有地址
'''
def __init__(self,cidr,threads_num):
self.threads_num = threads_num
self.cidr = IP(cidr)
#build ip queue
self.IPs = Queue.Queue()
for ip in self.cidr:
ip = str(ip)
self.IPs.put(ip)
def request(self):
with threading.Lock():
while self.IPs.qsize() > 0:
ip = self.IPs.get()
try:
cmd = ["ping", "-{op}".format(op=get_os()),
"1", ip]
output = os.popen(" ".join(cmd)).readlines()
flag = False
for line in list(output):
if not line:
continue
if str(line).upper().find("TTL") >= 0:
flag = True
break
if flag:
print "ip: %s is ok ***" % ip
except Exception,e:
printLock.acquire()
finally:
printLock.release()
def run(self):
for i in range(self.threads_num):
t = threading.Thread(target=self.request)
t.start()
def main(cidr):
# print cidr
print "start time %s" % time.ctime()
options={'threads_num': 200}
s = find_ip(cidr,threads_num=options['threads_num'])
s.run()
print "end time %s" % time.ctime()
return
# main('127.0.0.1')
main('192.168.242.0/24')
#!/usr/bin/env python
#coding:utf-8
# Author: Zeroh
import re
import sys
import Queue
import threading
import optparse
import requests
from IPy import IP
import pymysql
printLock = threading.Semaphore(1) #lock Screen print
TimeOut = 5 #request timeout
#User-Agent
header = {'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.125 Safari/537.36','Connection':'close'}
class scan():
def __init__(self,cidr,threads_num):
self.threads_num = threads_num
self.cidr = IP(cidr)
#build ip queue
self.IPs = Queue.Queue()
for ip in self.cidr:
ip = str(ip)
self.IPs.put(ip)
def request(self):
with threading.Lock():
while self.IPs.qsize() > 0:
ip = self.IPs.get()
try:
r = requests.Session().get('http://'+str(ip),headers=header,timeout=TimeOut)
status = r.status_code
title = re.search(r'<title>(.*)</title>', r.text) #get the title
if title:
title = title.group(1).strip().strip("\r").strip("\n")[:30]
else:
title = "None"
banner = ''
try:
# banner += r.headers['Server'][:20] #get the server banner
banner += r.headers['Server']
except:pass
# printLock.acquire()
print "|%-16s|%-6s|%-20s|%-30s|" % (ip,status,banner,title)
banner=banner.replace('(','')
cpartinsertsql = "insert into cpart(ip,status,server,title)VALUES ('%s','%s','%s','%s')"%(ip,status,banner,title.encode('utf-8'))
# print cpartinsertsql
try:
db = pymysql.connect('localhost', 'root', 'root', 'test')
cursor = db.cursor()
except Exception, e:
print 'httpscan--error1!', e
try:
cursor.execute(cpartinsertsql)
db.commit()
except Exception,e:
print 'httpscan--error2',e
db.close()
print "+----------------+------+--------------------+------------------------------+"
#Save log
with open("./log/"+self.cidr.strNormal(3)+".log",'a') as f:
f.write(ip+"\n")
except Exception,e:
printLock.acquire()
finally:
printLock.release()
#Multi thread
def run(self):
for i in range(self.threads_num):
t = threading.Thread(target=self.request)
t.start()
def main(cidr):
print cidr
try:
db=pymysql.connect('localhost','root','root','test')
cursor=db.cursor()
except Exception,e:
print e
deldatasql='delete from cpart'
try:
cursor.execute(deldatasql)
db.commit()
except Exception,e:
print e
options={'threads_num': 200}
try:
cdb=pymysql.connect('localhost','root','root','test')
ccursor=cdb.cursor()
except Exception,e:
print 'httpscan--error3:',e
delete='delete from cpart'
try:
ccursor.execute(delete)
cdb.commit()
except Exception,e:
print 'httpscan-error4:',e
cdb.close()
s = scan(cidr,threads_num=options['threads_num'])
s.run()
return
# main('127.0.0.1')
main('192.168.242.0/24')