from multiprocessing import Pool
from functools import partial
?
reload(sys)
sys.setdefaultencoding('utf8')
?
def nmScan(host,portrange,whitelist):
? ? ? ? p = re.compile("^(\d*)\-(\d*)$")
? ? ? ? # if type(hostlist) != list:
? ? ? ? #? ? help()
? ? ? ? portmatch = re.match(p,portrange)
? ? ? ? if not portmatch:
? ? ? ? ? ? help()
?
? ? ? ? if host == '121.42.32.172':
? ? ? ? ? ? whitelist = [25,]
? ? ? ? result = ''
? ? ? ? nm = nmap.PortScanner()
? ? ? ? tmp = nm.scan(host,portrange)
? ? ? ? result = result + "
ip地址:%s 主机名:[%s]? ......? %s
" %(host,tmp['scan'][host]['hostname'],tmp['scan'][host]['status']['state'])
? ? ? ? try:
? ? ? ? ? ? ports = tmp['scan'][host]['tcp'].keys()
? ? ? ? ? ? for port in ports:
? ? ? ? ? ? ? ? info = ''
? ? ? ? ? ? ? ? if port not in whitelist:
? ? ? ? ? ? ? ? ? info = 'Alert:非预期端口 '
? ? ? ? ? ? ? ? else:
? ? ? ? ? ? ? ? ? info = 'Info:正常开放端口 '
? ? ? ? ? ? ? ? portinfo = "%s port : %s state : %s product : %s
" %(info,port,tmp['scan'][host]['tcp'][port]['state'],? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? tmp['scan'][host]['tcp'][port]['product'])
? ? ? ? ? ? ? ? result = result + portinfo
? ? ? ? except KeyError,e:
? ? ? ? ? ? if whitelist:
? ? ? ? ? ? ? ? whitestr = ','.join(whitelist)
? ? ? ? ? ? ? ? result = result + "未扫到开放端口!请检查%s端口对应的服务状态" %whitestr? ? ? ? ? ? ? ?
? ? ? ? ? ? else:
? ? ? ? ? ? ? ? result = result + "扫描结果正常,无暴漏端口"? ? ? ? ?
? ? ? ? return result
?
def help():
? ? ? ? print "Usage: nmScan(['127.0.0.1',],'0-65535')"
? ? ? ? return None
?
if __name__ == "__main__":? ?
? ? hostlist = ['10.10.10.1','10.10.10.2']
? ? pool = Pool(5)
? ? nmargu = partial(nmScan,portrange='0-65535',whitelist=[])
? ? results = pool.map(nmargu,hostlist)
? ? #send email
? ? sender = 'linuxidc@163.com'
? ? receiver = ['linuxidc@qq.com',]
? ? subject = '服务器端口扫描'
? ? smtpserver = 'smtp.exmail.qq.com'
? ? smtpuser = 'linuxidc@163.com'
? ? smtppass = 'linuxidc163'
? ? mailcontent = '
'.join(results)
? ? tool.sendemail(sender,receiver,subject,mailcontent,smtpserver,smtpuser,smtppass)
扫描结果:马赛克阻碍了人类文明的进步,尤其是在欣赏岛国动作片的时候,但是,亲,我不能把俺们的服务器给你看的,你懂的!

--------------------------------------分割线 --------------------------------------