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代码制作configure文件示例
Jul 28 Python
探索Python3.4中新引入的asyncio模块
Apr 08 Python
Python中的lstrip()方法使用简介
May 19 Python
Python最火、R极具潜力 2017机器学习调查报告
Dec 11 Python
python实现二叉查找树实例代码
Feb 08 Python
pyQt4实现俄罗斯方块游戏
Jun 26 Python
python实现周期方波信号频谱图
Jul 21 Python
python2和python3的输入和输出区别介绍
Nov 20 Python
解决Python3 控制台输出InsecureRequestWarning问题
Jul 15 Python
Python安装及Pycharm安装使用教程图解
Sep 20 Python
python模块导入的方法
Oct 24 Python
Python游戏开发实例之graphics实现AI五子棋
Nov 01 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实现ODBC数据分页显示一例
2006/10/09 PHP
第八节--访问方式
2006/11/16 PHP
laravel安装zend opcache加速器教程
2015/03/02 PHP
Laravel实现autoload方法详解
2017/05/07 PHP
PHP操作XML中XPath的应用示例
2019/07/04 PHP
使用新的消息弹出框blackbirdjs
2008/10/16 Javascript
javascript appendChild,innerHTML,join性能比较代码
2009/08/29 Javascript
JS运行耗时操作的延时显示方法
2010/11/19 Javascript
jQuery弹性滑动导航菜单实现思路及代码
2013/05/02 Javascript
当json键为数字时的取值方法解析
2013/11/15 Javascript
javascript瀑布流式图片懒加载实例解析与优化
2016/02/23 Javascript
Javascript中级语法快速入手
2016/07/30 Javascript
基于Marquee.js插件实现的跑马灯效果示例
2017/01/25 Javascript
nodejs 子进程正确的打开方式
2017/07/03 NodeJs
js HTML5 canvas绘制图片的方法
2017/09/08 Javascript
浅谈Angular路由复用策略
2017/10/04 Javascript
javascript中神奇的 Date对象小结
2017/10/12 Javascript
Vue动态组件和异步组件原理详解
2019/05/06 Javascript
微信小程序与webview交互实现支付功能
2019/06/07 Javascript
js动态添加带圆圈序号列表的实例代码
2021/02/18 Javascript
Python getopt模块处理命令行选项实例
2014/05/13 Python
Python实现获取照片拍摄日期并重命名的方法
2017/09/30 Python
django解决跨域请求的问题
2018/11/11 Python
python 实现dict转json并保存文件
2019/12/05 Python
python3.8与pyinstaller冲突问题的快速解决方法
2020/01/16 Python
Python实现的北京积分落户数据分析示例
2020/03/27 Python
CSS3中animation实现流光按钮效果
2020/12/21 HTML / CSS
canvas绘制太极图的实现示例
2020/04/29 HTML / CSS
介绍一下HTTP、HTTPS和SSL
2012/12/16 面试题
中学生获奖感言
2014/02/04 职场文书
2015年八一建军节活动总结
2015/03/20 职场文书
面试复试通知单
2015/04/24 职场文书
2015年售后服务工作总结
2015/04/25 职场文书
教师病假条范文
2015/08/17 职场文书
vue3中的组件间通信
2021/03/31 Vue.js
Python实现socket库网络通信套接字
2021/06/04 Python