最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)現(xiàn)的多線程端口掃描工具分享

 更新時(shí)間:2015年01月21日 11:10:06   投稿:junjie  
這篇文章主要介紹了Python實(shí)現(xiàn)的多線程端口掃描工具分享,工具實(shí)現(xiàn)了掃單IP和掃IP段功能,本文給出運(yùn)行效果和實(shí)現(xiàn)源碼,需要的朋友可以參考下

昨晚今晚寫了兩晚,總算把Py Port Scanner 寫完了,姑且稱之為0.1版本,算是一個(gè)Python多線程端口掃描工具。

水平有限,實(shí)話中間有一些困惑和不解的地方,代碼可能也寫的比較亂。有些問題并未找到很好的解決方法,還望大家諒解。速度大家自己試驗(yàn),我感覺還行。

送上效果圖兩份,分別是掃單IP和掃IP段:

源碼:

復(fù)制代碼 代碼如下:

# -*- coding: utf-8 -*-
__author__ = 'Phtih0n'
import threading, socket, sys, cmd, os, Queue

#掃描常用端口
PortList = [21, 22, 23, 25, 80, 135, 137, 139, 445, 1433, 1502, 3306, 3389, 8080, 9015]
#得到一個(gè)隊(duì)列
def GetQueue(list):
    PortQueue = Queue.Queue(65535)
    for p in list:
        PortQueue.put(p)
    return PortQueue

#單IP掃描線程個(gè)數(shù)
nThread = 20
#線程鎖
lock = threading.Lock()
#超時(shí)時(shí)間
Timeout = 3.0
#打開的端口列表
OpenPort = []

class ScanThread(threading.Thread):
    def __init__(self, scanIP):
        threading.Thread.__init__(self)
        self.IP = scanIP

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


class ScanThreadSingle(ScanThread):
    def __init__(self, scanIP, SingleQueue):
        ScanThread.__init__(self, scanIP)
        self.SingleQueue = SingleQueue

    def run(self):
        while not self.SingleQueue.empty():
            p = self.SingleQueue.get()
            self.Ping(p)


class ScanThreadMulti(ScanThread):
    def __init__(self, scanIP, PortList):
        ScanThread.__init__(self, scanIP)
        self.List = PortList[:]

    def run(self):
        for p in self.List:
            self.Ping(p)

class Shell(cmd.Cmd):
    u'''Py Port Scanner 0.1 使用說明:
    port [port..] 設(shè)置掃描的端口,用逗號分隔。
        默認(rèn):21, 22, 23, 25, 80, 135, 137, 139, 445, 1433, 1502, 3306, 3389, 8080, 9015
        example:port 21,23,25
        example: port 1000..2000
        example: port 80,443,1000..1500
    scan [IP] 掃描某一IP地址
        example: scan 192.168.1.5
    search [IP begin]-[IP end] 掃描某一IP段
        example: search 192.168.1.1-192.168.1.100
    time [timeout] 設(shè)置超時(shí)時(shí)間,默認(rèn)為3秒
        example: time 5
    cls 清楚屏幕內(nèi)容
    listport 打印端口列表
    help 打開本幫助
        '''
    def __init__(self):
        cmd.Cmd.__init__(self)
        reload(sys)
        sys.setdefaultencoding('utf-8')
        self.prompt = "Port Scan >>"
        self.intro = "Py Port Scanner 0.1"

    def do_EOF(self, line):
        return True

    def do_help(self, line):
        print self.__doc__

    #設(shè)置端口
    def do_port(self, line):
        global PortList
        PortList = []
        ListTmp = line.split(',')
        for port in ListTmp:
            if port.find("..") < 0:
                if not port.isdigit():
                    print "輸入錯(cuò)誤"
                    return False
                PortList.append(int(port))
            else:
                RangeLst = port.split("..")
                if not (RangeLst[0].isdigit() and RangeLst[1].isdigit()):
                    raise ValueError
                    exit()
                for i in range(int(RangeLst[0]), int(RangeLst[1])):
                    PortList.append(i)

    def do_scan(self, line):
        global nThread, PortList
        ThreadList = []
        strIP = line
        SingleQueue = GetQueue(PortList)
        for i in range(0, nThread):
            t = ScanThreadSingle(strIP, SingleQueue)
            ThreadList.append(t)
        for t in ThreadList:
            t.start()
        for t in ThreadList:
            t.join()

    def do_search(self, line):
        global nThread, PortList
        ThreadList = []
        (BeginIP, EndIP) = line.split("-")
        try:
            socket.inet_aton(BeginIP)
            socket.inet_aton(EndIP)
        except:
            print "輸入錯(cuò)誤"
            return
        IPRange = BeginIP[0:BeginIP.rfind('.')]
        begin = BeginIP[BeginIP.rfind('.') + 1:]
        end = EndIP[EndIP.rfind('.') + 1:]
        for i in range(int(begin), int(end)):
            strIP = "%s.%s" % (IPRange, i)
            t = ScanThreadMulti(strIP, PortList)
            ThreadList.append(t)
        for t in ThreadList:
            t.start()
        for t in ThreadList:
            t.join()

    def do_listport(self, line):
        global PortList
        for p in PortList:
            print p,
        print '\n'

    def do_time(self, line):
        global Timeout
        try:
            Timeout = float(line)
        except:
            print u"參數(shù)錯(cuò)誤"

    def do_cls(self, line):
        os.system("cls")


if '__main__' == __name__:
    try:
        os.system("cls")
        shell = Shell()
        shell.cmdloop()
    except:
        exit()

相關(guān)文章

  • python中常用的各種數(shù)據(jù)庫操作模塊和連接實(shí)例

    python中常用的各種數(shù)據(jù)庫操作模塊和連接實(shí)例

    這篇文章主要介紹了python中常用的各種數(shù)據(jù)庫操作模塊和連接實(shí)例,包括sqlite3、oracle、mysql、excel,需要的朋友可以參考下
    2014-05-05
  • opencv+python實(shí)現(xiàn)均值濾波

    opencv+python實(shí)現(xiàn)均值濾波

    這篇文章主要為大家詳細(xì)介紹了opencv+python實(shí)現(xiàn)均值濾波,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • Django集成celery發(fā)送異步郵件實(shí)例

    Django集成celery發(fā)送異步郵件實(shí)例

    今天小編就為大家分享一篇Django集成celery發(fā)送異步郵件實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 查看TensorFlow checkpoint文件中的變量名和對應(yīng)值方法

    查看TensorFlow checkpoint文件中的變量名和對應(yīng)值方法

    今天小編就為大家分享一篇查看TensorFlow checkpoint文件中的變量名和對應(yīng)值方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Python裝飾器簡單用法實(shí)例小結(jié)

    Python裝飾器簡單用法實(shí)例小結(jié)

    這篇文章主要介紹了Python裝飾器簡單用法,結(jié)合實(shí)例形式總結(jié)分析了Python裝飾器的基本功能、簡單用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2018-12-12
  • Python 按字典dict的鍵排序,并取出相應(yīng)的鍵值放于list中的實(shí)例

    Python 按字典dict的鍵排序,并取出相應(yīng)的鍵值放于list中的實(shí)例

    今天小編就為大家分享一篇Python 按字典dict的鍵排序,并取出相應(yīng)的鍵值放于list中的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • 詳解Python驗(yàn)證碼識別

    詳解Python驗(yàn)證碼識別

    這幾天在寫一個(gè)程序的時(shí)候需要識別驗(yàn)證碼,因?yàn)槌绦蚴荘ython寫的自然打算用Python進(jìn)行驗(yàn)證碼的識別。下面把實(shí)現(xiàn)思路分享在腳本之家平臺,感興趣的朋友可以參考下
    2016-01-01
  • Python networkx包的實(shí)現(xiàn)

    Python networkx包的實(shí)現(xiàn)

    這篇文章主要介紹了Python networkx包的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 使用?Flask、Celery?和?Python?實(shí)現(xiàn)每月定時(shí)任務(wù)的步驟

    使用?Flask、Celery?和?Python?實(shí)現(xiàn)每月定時(shí)任務(wù)的步驟

    下面給大家分享使用?Flask、Celery?和?Python?實(shí)現(xiàn)每月定時(shí)任務(wù)的步驟,本文分步驟結(jié)合腳本給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • Django使用redis緩存服務(wù)器的實(shí)現(xiàn)代碼示例

    Django使用redis緩存服務(wù)器的實(shí)現(xiàn)代碼示例

    這篇文章主要介紹了Django使用redis緩存服務(wù)器的實(shí)現(xiàn)代碼示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04

最新評論

金坛市| 祥云县| 宣城市| 镇沅| 隆德县| 崇左市| 曲水县| 新乐市| 应用必备| 三门峡市| 黄骅市| 吉隆县| 新和县| 星座| 武山县| 宁国市| 武宁县| 永康市| 平果县| 宁波市| 苏尼特左旗| 贞丰县| 安乡县| 疏勒县| 乳山市| 太谷县| 长海县| 龙岩市| 南涧| 获嘉县| 南郑县| 绩溪县| 阜新| 扎兰屯市| 罗平县| 师宗县| 喜德县| 克拉玛依市| 聂拉木县| 从化市| 新乡市|