在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python/ python端口掃描器遇到的線程問題和KeyError

python端口掃描器遇到的線程問題和KeyError

在寫python端口掃描器,想把結(jié)果以html格式發(fā)送到郵箱,提取函數(shù)結(jié)果這一塊參考了知乎的一個回答寫的:

clipboard.png

clipboard.png

附上自己的代碼:
import nmap
from optparse import OptionParser
from threading import Thread

def getaddresslist(addr):

"""
    getaddresslist(addr) -> IP address file

    IP address read from the file.
"""
try:
    with open(addr, 'r') as tgthosts:
        lines = tgthosts.readlines()
        address = [line.strip() for line in lines]
    return address
except (IOError, IndexError) as e:
    return str(e)

class CustomTask:

def __init__(self):
    self._result = None

def nmScan(self, tgthost, tgtport):
    whitelist = []
    result = ''
    nmscan = nmap.PortScanner()
    tmp = nmscan.scan(tgthost, tgtport)
    result = result + "<h2>ip地址:%s ...... %s</h2><hr>" % (tgthost, tmp['scan'][tgthost]['status']['state'])
    try:
        ports = tmp['scan'][tgthost]['tcp'].keys()
        for port in ports:
            if port not in whitelist:
                info = '<strong><font color=red>Alert:非預(yù)期端口</font></strong>&nbsp;&nbsp;'
            else:
                info = '<strong><font color=green>Info:正常開放端口</font></strong>&nbsp;&nbsp;'
            portinfo = "%s <strong>port</strong> : %s &nbsp;&nbsp;<strong>state</strong> : %s &nbsp;&nbsp;<strong>product</strong> : %s <br>" % (info, port, tmp['scan'][tgthost]['tcp'][port]['state'], tmp['scan'][tgthost]['tcp'][port]['product'])
            result = result + portinfo
    except KeyError as e:
        if whitelist:
            whitestr = ','.join(whitelist)
            result = result + "未掃到開放端口!請檢查%s端口對應(yīng)的服務(wù)狀態(tài)" % whitestr
        else:
            result = result + "掃描結(jié)果正常,無暴露端口"
    print(result)
    self._result = result

def get_result(self):
    return self._result

def main():

f1 = open('D:\python_work/iplist.txt', 'ab')
parser = OptionParser()
parser.add_option('-H', dest='tgthost', type='string', help='specify target host')
parser.add_option('-f', dest='file', default='', help='host list', metavar='LIST')
(options, args) = parser.parse_args()
tgthost = options.tgthost
tgtports = [20, 21, 22, 23, 25, 69, 80, 109, 110, 139, 179, 443, 445, 544, 1080, 1433, 1434, 1521, 1158, 2100,3306, 3389, 7001, 8080, 8081, 9080, 9090]
if options.file == '':
    for tgtport in tgtports:
        ct = CustomTask()
        t = Thread(target=ct.nmScan, args=(str(tgthost), str(tgtport)))
        t.start()
        # result = ct.get_result()
    # tool.sendemail(result)
else:
    f = open(options.file, 'r')
    current_host = f.readline().strip()
    while (current_host):
        for tgtport in tgtports:
            ct = CustomTask()
            t = Thread(target=ct.nmScan, args=(str(tgthost), str(tgtport)))
            t.start()
            current_host = f.readline().strip()
        # result = ct.get_result()
    f.close()
    # tool.sendemail(result)
f1.close()

if name == '__main__':

main()

在運行時出現(xiàn)了這樣的錯誤提示,基本每個錯誤類型都是一樣的,請各位大佬指教應(yīng)該如何修改!

clipboard.png

clipboard.png

回答
編輯回答
貓小柒

多謝樓上大佬的提醒傳入值為空,是自己粗心把參數(shù)名字寫錯了,在傳文件的時候的Ip參數(shù)應(yīng)該是 current_host 而不是 tgthost。

2018年1月19日 21:03
編輯回答
大濕胸

很明顯運行到那句的時候tgthostNone,
也就是 t = Thread(target=ct.nmScan, args=(str(tgthost), str(tgtport)))這一句運行的時候,有些tgthost轉(zhuǎn)換為str后為None,
可以在這里做些文章。

2017年6月28日 18:35