本人大学生一枚,不是很懂python,为什么代码单独跑能行,封装成函数之后传值就有问题了,是多线程锁相关的问题吗?求解答
import socket, time, thread,os
socket.setdefaulttimeout(3)
def socket_port(ip, port):
"""
输入IP和端口号,扫描判断端口是否开放
"""
try:
if port >= 65535:
print u'端口扫描结束'
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = s.connect_ex((ip, port))
if result == 0:
lock.acquire()
print ip, u':', port, u'端口开放'
try:
print port
sqlAdd = 'insert into portsscan(port)VALUES ("%s;")' % port
cursor.execute(sqlAdd)
db.commit()
except Exception, e:
print'2', e
lock.release()
s.close()
except:
print u'端口扫描异常'
def ip_scan(ip):
"""
输入IP,扫描IP的0-65534端口情况
"""
try:
print u'开始扫描 %s' % ip
start_time = time.time()
for i in range(0, 65534):
thread.start_new_thread(socket_port, (ip, int(i)))
print u'扫描端口完成,总共用时 :%.2f' % (time.time() - start_time)
raw_input("Press Enter to Exit")
except:
print u'扫描ip出错'
import pymysql
def main(url):
global db,cursor
try:
db=pymysql.connect('localhost','root','root','test')
cursor=db.cursor()
sqlDelete='delete from portsscan'
cursor.execute(sqlDelete)
db.commit()
except Exception,e:
print '1',e
lock = thread.allocate_lock()
ip_scan(url)
db.close()
return
target='192.168.242.189'
main(target)
#这下面能正常运行,而上面封装函数运行就不行
a='192.168.242.189'
global db,cursor
try:
db=pymysql.connect('localhost','root','root','test')
cursor=db.cursor()
sqlDelete='delete from portsscan'
cursor.execute(sqlDelete)
db.commit()
except Exception,e:
print '1',e
lock = thread.allocate_lock()
ip_scan(a)
db.close()