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 02 Python
python安装教程 Pycharm安装详细教程
May 02 Python
快速了解Python开发中的cookie及简单代码示例
Jan 17 Python
Python常用特殊方法实例总结
Mar 22 Python
python opencv 批量改变图片的尺寸大小的方法
Jun 28 Python
python调用webservice接口的实现
Jul 12 Python
基于Python实现大文件分割和命名脚本过程解析
Sep 29 Python
python小项目之五子棋游戏
Dec 26 Python
python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案
Feb 18 Python
简述 Python 的类和对象
Aug 21 Python
5行Python代码实现一键批量扣图
Jun 29 Python
python实现简易自习室座位预约系统
Jun 30 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实现小型站点广告管理(修正版)
2006/10/09 PHP
PHP版自动生成文章摘要
2008/07/23 PHP
使用php来实现网络服务
2009/09/15 PHP
windows中为php安装mongodb与memcache
2015/01/06 PHP
PHP实现通过正则表达式替换回调的内容标签
2015/06/15 PHP
PHP中PCRE正则解析代码详解
2019/04/26 PHP
css图片自适应大小
2007/11/28 Javascript
高效的表格行背景隔行变色及选定高亮的JS代码
2010/12/04 Javascript
从QQ网站中提取的纯JS省市区三级联动菜单
2013/12/25 Javascript
jQuery抛物线运动实现方法(附完整demo源码下载)
2016/01/08 Javascript
关于List.ToArray()方法的效率测试
2016/09/30 Javascript
jQuery学习笔记之入门
2016/12/14 Javascript
canvas绘制表盘时钟
2017/01/23 Javascript
Vue.js手风琴菜单组件开发实例
2017/05/16 Javascript
Form表单上传文件(type="file")的使用
2017/08/03 Javascript
jQuery绑定事件方法及区别(bind,click,on,live,one)
2017/08/14 jQuery
Vue2.x通用条件搜索组件的封装及应用详解
2019/05/28 Javascript
js逆向解密之网络爬虫
2019/05/30 Javascript
深入解析koa之中间件流程控制
2019/06/17 Javascript
[01:01:24]LGD vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Django中对数据查询结果进行排序的方法
2015/07/17 Python
Python中enumerate函数代码解析
2017/10/31 Python
django之session与分页(实例讲解)
2017/11/13 Python
Python基于ThreadingTCPServer创建多线程代理的方法示例
2018/01/11 Python
python列表使用实现名字管理系统
2019/01/30 Python
numpy.random模块用法总结
2019/05/27 Python
python关闭占用端口方式
2019/12/17 Python
浅析两列自适应布局的3种思路
2016/05/03 HTML / CSS
澳大利亚最超值的自行车之家:Reid Cycles
2019/03/24 全球购物
马来西亚奢侈品牌购物商城:Valiram 247
2020/09/29 全球购物
就业推荐自我鉴定
2013/10/06 职场文书
孝敬父母的演讲稿
2014/05/14 职场文书
个人工作能力自我评价
2015/03/05 职场文书
2015年街道办事处团委工作总结
2015/10/14 职场文书
2016年党校科级干部培训班学习心得体会
2016/01/06 职场文书
2016优秀护士先进个人事迹材料
2016/02/25 职场文书