python端口扫描系统实现方法


Posted in Python onNovember 19, 2014

本文实例讲述了python端口扫描系统实现方法。分享给大家供大家参考。具体实现方法如下:

该程序的主要功能如下:

1. 从自有API接口获取所有的外网IP段;
2. 用Nmap 遍历扫描所有的IP段,-oX 生成XML的扫描报告;
3. 用xml.etree.ElementTree模块方法读取XML文件,将ip,开放端口,对应服务等写入Mysql数据库。
功能很简单,没有满足老大高大上的需求,所以这个小项目就这么英勇的挂掉了!~~~完全都还没考虑程序异常终止,扫描服务器异常歇菜的情况。
贴上代码:

#coding:utf-8 

import sys,os,time,subprocess 

import MySQLdb 

import re,urllib2 

import ConfigParser 

from IPy import IP 

import xml.etree.ElementTree as ET 

  

nowtime = time.strftime('%Y-%m-%d',time.localtime(time.time())) 

configpath=r'c:portscanconfig.ini'

#传入api接口主路径,遍历获取所有的ip列表,用IPy模块格式成127.0.0.1/24的格式 

def getiplist(ipinf): 

serverarea=['tj101','tj103','dh','dx'] 

iplist=[] 

for area in serverarea: 

ipapi=urllib2.urlopen(ipinf+area).read() 

for ip in ipapi.split('n'): 

#判断如果ip列表不为空,转换成ip/网关格式,再格式化成ip/24的格式 

if ip: 

ip=ip.replace('_','/') 

ip=(IP(ip)) 

iplist.append(str(ip)) 

ipscan(iplist,nmapathx) 

  

#传递ip地址文件和nmap路径 

def ipscan(iplist,nmapath): 

#古老的去重,对ip文件中的ip地址进行去重 

newiplist=[] 

scaniplist=[] 

for ip in iplist: 

if ip not in newiplist: 

newiplist.append(ip) 

#遍历所有ip段,批量扫描,生成xml格式报告 

for ip in newiplist: 

filename=nowtime+ip.split('/')[0]+'.xml'

filepath=r"c:portscanscanres\"

nmapcmd=nmapath+' -PT '+ip.strip('rn')+' -oX '+filepath+filename 

os.system(nmapcmd) 

scaniplist.append(ip) 

writeinmysql(scaniplist) 

  

#入库模块是某大婶发写好的给我 我只是简单修改了哈,主要是xml.etree.ElementTree模块。 

def writeinmysql(scaniplist): 

filepath=r"c:portscanscanres"

for ip in scaniplist: 

xmlfile=filepath+'\'+ip+'.xml' 

#缩进哈 发文章的时候临时改的,懒得缩进了 

root=ET.parse(xmlfile).getroot() 

allhost=root.findall('host') 

conn=MySQLdb.connect(host='10.5.10.57',user='nxadmin',passwd='nxadmin.com',port=3306,db='scandb',charset='utf8')

cur= conn.cursor() 

for host in allhost: 

address = host.find('address') 

#首先判断端口是不是open的,如果是再进行入库 

for port in host.find('ports').findall('port'): 

if port.find('state').attrib['state']=="open": 

ip=address.attrib['addr'] 

portval=port.attrib['portid'] 

state=port.find('state').attrib['state'] 

sql = "INSERT INTO portscan (ip,port,state) VALUES(%s,%s,%s)"

params=[ip,portval,state] 

cur.execute(sql,params) 

conn.commit() 

cur.close() 

conn.close() 

if __name__=="__main__": 

#读取配置文件中要扫描的IP apiurl和nmap安装文件路径 

config=ConfigParser.ConfigParser() 

config.readfp(open(configpath,'rb')) 

nmapathx=config.get('nmap','nmapath') 

ipinf=config.get('ip','ipinf') 

getiplist(ipinf)

配置文件c:portscanconfig.ini中主要是api接口主url,nmap安装路径。

感兴趣的朋友可以进一步完善该实例的功能。希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
实例讲解Python的函数闭包使用中应注意的问题
Jun 20 Python
python之文件的读写和文件目录以及文件夹的操作实现代码
Aug 28 Python
Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)
Sep 21 Python
python3中bytes和string之间的互相转换
Feb 09 Python
Python实现修改文件内容的方法分析
Mar 25 Python
CentOS7安装Python3的教程详解
Apr 10 Python
Python实现AI换脸功能
Apr 10 Python
完美解决keras保存好的model不能成功加载问题
Jun 11 Python
结束运行python的方法
Jun 16 Python
详解pycharm2020.1.1专业版安装指南(推荐)
Aug 07 Python
python-for x in range的用法(注意要点、细节)
May 10 Python
分享3个非常实用的 Python 模块
Mar 03 Python
Python提示[Errno 32]Broken pipe导致线程crash错误解决方法
Nov 19 #Python
python中urllib模块用法实例详解
Nov 19 #Python
python统计一个文本中重复行数的方法
Nov 19 #Python
python通过zlib实现压缩与解压字符串的方法
Nov 19 #Python
python判断字符串是否纯数字的方法
Nov 19 #Python
python使用any判断一个对象是否为空的方法
Nov 19 #Python
python编写暴力破解FTP密码小工具
Nov 19 #Python
You might like
php之对抗Web扫描器的脚本技巧
2008/10/01 PHP
php下使用strpos需要注意 === 运算符
2010/07/17 PHP
php数组声明、遍历、数组全局变量使用小结
2013/06/05 PHP
php结合md5实现的加密解密方法
2016/01/25 PHP
基于PHP实现数据分页显示功能
2016/05/26 PHP
php基于websocket搭建简易聊天室实践
2016/10/24 PHP
PHP添加文字水印或图片水印的水印类完整源代码与使用示例
2019/03/18 PHP
PHP并发场景的三种解决方案代码实例
2021/02/27 PHP
JS实多级联动下拉菜单类,简单实现省市区联动菜单!
2007/05/03 Javascript
jquery的$(document).ready()和onload的加载顺序
2010/05/26 Javascript
JavaScript 高级篇之闭包、模拟类,继承(五)
2012/04/07 Javascript
利用jquery包将字符串生成二维码图片
2013/09/12 Javascript
JavaScript判断对象是否为数组
2015/12/22 Javascript
jquery 动态增加,减少input表单的简单方法(必看)
2016/10/12 Javascript
jquery UI Datepicker时间控件冲突问题解决
2016/12/16 Javascript
JavaScript 事件流、事件处理程序及事件对象总结
2017/04/01 Javascript
jQuery实现可编辑表格并生成json结果(实例代码)
2017/07/19 jQuery
浅谈vue-lazyload实现的详细过程
2017/08/22 Javascript
关于angularJs清除浏览器缓存的方法
2017/11/28 Javascript
js实现超级玛丽小游戏
2020/03/18 Javascript
JavaScript中数组去重的5种方法
2020/07/04 Javascript
VUE项目实现主题切换的多种方法
2020/11/26 Vue.js
[01:01:18]VP vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python实现希尔排序算法的原理与用法实例分析
2017/11/23 Python
Python打包方法Pyinstaller的使用
2018/10/09 Python
Python操作Excel插入删除行的方法
2018/12/10 Python
Python3 单行多行万能正则匹配方法
2019/01/07 Python
python3 线性回归验证方法
2019/07/09 Python
python录音并调用百度语音识别接口的示例
2020/12/01 Python
一文读懂python Scrapy爬虫框架
2021/02/24 Python
canvas实现滑动验证的实现示例
2020/08/11 HTML / CSS
W Concept美国:精选全球独立设计师
2017/02/22 全球购物
定义一结构体数组表示分数,并求两个分数相加之和
2013/06/11 面试题
企业员工爱岗敬业演讲稿
2014/08/26 职场文书
青春飞扬演讲稿
2014/09/11 职场文书
2016年端午节寄语
2015/12/04 职场文书