满眼喜欢990 2024-05-08 15:58 采纳率: 0%
浏览 5

python2.7代码问题求解

python2.7版本的,我写的代码哪里有问题,为什么跑起来就一直这样,不停止?我是模仿最后这段代码编写的

img

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')

  • 写回答

4条回答 默认 最新

  • 专家-皆知 2024-05-08 15:58
    关注

    引自免费微信小程序:皆我百晓生

    你的代码片段没有运行循环或阻塞操作,看起来像一个代码片段而非完整的程序。要让它停止,你需要添加一个主循环或者在适当的地方加入退出条件。

    评论

报告相同问题?

问题事件

  • 修改了问题 5月8日
  • 创建了问题 5月8日

悬赏问题

  • ¥15 soildworks装配体的尺寸问题
  • ¥100 有偿寻云闪付SDK转URL技术
  • ¥30 基于信创PC发布的QT应用如何跨用户启动后输入中文
  • ¥20 非root手机,如何精准控制手机流量消耗的大小,如20M
  • ¥15 远程安装一下vasp
  • ¥15 自己做的代码上传图片时,报错
  • ¥15 Lingo线性规划模型怎么搭建
  • ¥15 关于#python#的问题,请各位专家解答!区间型正向化
  • ¥15 unity从3D升级到urp管线,打包ab包后,材质全部变紫色
  • ¥50 comsol温度场仿真无法模拟微米级激光光斑