python-portscan

# -*- coding:utf-8 -*- 
#!/user/bin python
#Description: Description 
#Author:      Bing
#Email:       [email protected]
#DateTime:    2017-05-10 23:08:39

import multiprocessing
import time

def nmap(msg):
  print msg
  time.sleep(3)
  return "done " + msg

def awvs(msg):
  print msg
  time.sleep(3)
  return "done " + msg

def save(nmap_result):
    print nmap_result,"----------------"

if __name__ == "__main__":
  pool = multiprocessing.Pool(processes=10)

  nmap_msg = "hello %s" %("nmap")
  awvs_msg = "hello %s" %("awvs")

  result = []
  result_nmap = Nmap( scan_id = "tset-4323", scan_target = "www.baidu.com", scan_args = "",back_fn = "" , scan_type = "nmap" )
  result.append(pool.apply_async(nmap, (nmap_msg, )))
  result.append(pool.apply_async(awvs, (awvs_msg, )))
  pool.close()
  pool.join()


  for res in result:
    print res.get(),"*********************"
  print "Sub-process(es) done."

#!/user/bin python
# -*- coding:utf-8 -*- 
# Author:Bing
# Contact:[email protected]
# DateTime: 2017-01-17 19:06:06
# Description:  coding 


import sys
sys.path.append("..")

import gevent
from gevent import monkey
from gevent.pool import Pool
monkey.patch_all()

import socket,os,time
from core.settings import *
from core.wukong_fuc import *

class Work(object):
    def __init__(self, scan_id = "", scan_target = "", scan_type = "" ,scan_args = "", back_fn = None):
        self.pool = Pool(200)
        self.timeout = 0.1

        self.scan_id = scan_id
        self.target = scan_target
        self.scan_type = scan_type
        self.args = scan_args
        self.back_fn = back_fn
        self.result = []        

    def get_port_service(self,text):
        service_path = dict_script_path+"nmap-services.txt"
        port_server = str(text)+"/tcp"
        with open(service_path,"r") as server:
            for finger in server.readlines():
                port = finger.strip().split(";")[1]
                if port == port_server:
                    fingers = str(finger.strip().split(";")[0])
                    return (port_server,fingers)
            return (port_server,"unknown")


    def port_scan(self,port):
        target = nessus_target_check(self.target)
        if target == False :
            return { "status" : 2 , "data" : "NMAP >>>> :格式错误" }

        try:
            sd = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            sd.settimeout(self.timeout)
            try:
                sd.connect((target,int(port)))
                self.result.append(self.get_port_service(port))
            except socket.error:
                pass    
            sd.close()
        except:
            pass

    def run(self):
        res = []
        for port in range(65535):
            res.append(port)
        self.pool.map(self.port_scan,res)
        data = []
        for line in self.result:
            data.append({ "bug_name" : str(line[0]) ,"bug_summary" : str(line[1]) }) 
        result = { "status" : 1 , "data" : data , "scan_id": self.scan_id , "scan_type": "nmap" }
        self.back_fn(result)

#!/user/bin python
# -*- coding:utf-8 -*- 
# Author:Bing
# Contact:[email protected]
# DateTime: 2017-01-17 19:06:06
# Description:  coding 

import socket
from datetime import datetime
from multiprocessing.dummy import Pool as ThreadPool


remote_server_ip = "www.baidu.com"
ports = []
 
socket.setdefaulttimeout(0.5)
 
def scan_port(port):
    try:
        s = socket.socket(2,1)
        res = s.connect_ex((remote_server_ip,port))
        if res == 0: # 如果端口开启 发送 hello 获取banner
            print 'Port {}: OPEN'.format(port)
        s.close()
    except Exception,e:
        print str(e.message)
 
 
 
for i in range(1,65535):
    ports.append(i)
 
# Check what time the scan started
t1 = datetime.now()
 
 
pool = ThreadPool(processes = 200)
results = pool.map(scan_port,ports)
pool.close()
pool.join()
 
print 'Multiprocess Scanning Completed in  ', datetime.now() - t1
#这是最高效的一版,20多秒跑完65535端口
#!/user/bin python
# -*- coding:utf-8 -*- 
# Author:Bing
# Contact:[email protected]
# DateTime: 2017-01-17 19:06:06
# Description:  coding 

import sys
sys.path.append("..")

import threading, socket, sys, cmd, os, Queue
from core.settings import *

#线程锁
lock = threading.Lock()

#制作扫描端口队列
def GetQueue(host):
    PortQueue = Queue.Queue()
    for port in range(1,65535):
        PortQueue.put((host,port))
    return PortQueue

class ScanThread(threading.Thread):
    def __init__(self,SingleQueue,outip):
        threading.Thread.__init__(self)
        self.setDaemon(True)        #设置后台运行,让join结束
        self.SingleQueue = SingleQueue
        self.outip = outip

    def get_port_service(self,text):
        service_path = dict_script_path+"nmap-services.txt"
        port_server = str(text)+"/tcp"
        with open(service_path,"r") as server:
            for finger in server.readlines():
                port = finger.strip().split(";")[1]
                if port == port_server:
                    fingers = str(finger.strip().split(";")[0])
                    return (port_server,fingers)
            return (port_server,"unknown")

    def Ping(self,scanIP, Port):
        global OpenPort, lock
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.settimeout(0.1)
        address = (scanIP, Port)
        try:
            sock.connect(address)
        except:
            sock.close()
            return False
        sock.close()
        if lock.acquire():
            #print "IP:%s  Port:%d" % (scanIP, Port)
            self.outip.put(self.get_port_service(Port))
            lock.release()
        return True

    def run(self):
        while not self.SingleQueue.empty():
            #获取扫描队列,并扫描
            host,port = self.SingleQueue.get()
            self.Ping(host,port)


class Work(object):
    def __init__(self, scan_id = "", scan_target = "", scan_type = "" ,scan_args = "", back_fn = None):
        self.scan_id = scan_id
        self.target = scan_target
        self.scan_type = scan_type
        self.args = scan_args
        self.back_fn = back_fn
        self.result = []        

    def run(self):
        ThreadList = []
        #扫描队列
        SingleQueue = GetQueue(self.target)
        #存储结果队列
        resultQueue = Queue.Queue()
        #启动200线程并发
        for i in range(0, 200):
            t = ScanThread(SingleQueue,resultQueue)
            ThreadList.append(t)
        for t in ThreadList:
            t.start()
        for t in ThreadList:
            #需要设置线程为后台,然后没法结束;join等待结束后台线程
            t.join(0.1)

        data = []
        while not resultQueue.empty():
            line = resultQueue.get() 
            data.append({ "bug_name" : str(line[0]) ,"bug_summary" : str(line[1]) }) 
        result = { "status" : 1 , "data" : data , "scan_id": self.scan_id , "scan_type": "nmap" }
        self.back_fn(result)


# def save(nmap_result):
#     print nmap_result,"----------------"

# t = Work(scan_target = "100tal.org",back_fn = save)
# t.run()



你可能感兴趣的:(python-portscan)