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中使用gzip模块压缩文件的简单教程
Apr 08 Python
简单介绍Python的Django框架加载模版的方式
Jul 20 Python
详解C++编程中一元运算符的重载
Jan 19 Python
AI人工智能 Python实现人机对话
Nov 13 Python
python实现俄罗斯方块
Jun 26 Python
详解Python odoo中嵌入html简单的分页功能
May 29 Python
django框架model orM使用字典作为参数,保存数据的方法分析
Jun 24 Python
pybind11和numpy进行交互的方法
Jul 04 Python
django model通过字典更新数据实例
Apr 01 Python
Python with语句用法原理详解
Jul 03 Python
Python字典fromkeys()方法使用代码实例
Jul 20 Python
Python字符串及文本模式方法详解
Sep 10 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
从零开始 教你如何搭建Discuz!4.1论坛
2006/07/07 PHP
PHP编码转换
2012/11/05 PHP
浅析PHP的静态成员函数效率更高的原因
2014/06/13 PHP
php列出mysql表所有行和列的方法
2015/03/13 PHP
php输出指定时间以前时间格式的方法
2015/03/21 PHP
Mac下php 5升级到php 7的步骤详解
2017/04/26 PHP
zShowBox 图片放大展示jquery版 兼容性
2011/09/24 Javascript
javascript 文本框水印/占位符(watermark/placeholder)实现方法
2012/01/15 Javascript
一款由jquery实现的整屏切换特效
2014/09/15 Javascript
js闭包实例汇总
2014/11/09 Javascript
bootstrap的3级菜单样式,支持母版页保留打开状态实现方法
2016/11/10 Javascript
完美解决node.js中使用https请求报CERT_UNTRUSTED的问题
2017/01/08 Javascript
bootstrap中模态框、模态框的属性实例详解
2017/02/17 Javascript
微信小程序 template模板详解及实例
2017/02/21 Javascript
vue 请求后台数据的实例代码
2017/06/22 Javascript
js时间戳与日期格式之间转换详解
2017/12/11 Javascript
JavaScript迭代器的含义及用法
2019/06/21 Javascript
Node.js在图片模板上生成二维码图片并附带底部文字说明实现详解
2019/08/07 Javascript
Vue基础配置讲解
2019/11/29 Javascript
Vue页面刷新记住页面状态的实现
2019/12/27 Javascript
[01:56]2014DOTA2西雅图邀请赛 MVP外卡赛老队长精辟点评
2014/07/09 DOTA
[02:44]完美大师赛主赛事淘汰赛第二日观众采访
2017/11/24 DOTA
Python中__new__与__init__方法的区别详解
2015/05/04 Python
Python 详解基本语法_函数_返回值
2017/01/22 Python
Django 实现对已存在的model进行更改
2020/03/28 Python
pyspark给dataframe增加新的一列的实现示例
2020/04/24 Python
TensorFlow中如何确定张量的形状实例
2020/06/23 Python
详解html5 canvas 微信海报分享(个人爬坑)
2018/01/12 HTML / CSS
Hotels.com香港酒店网:你的自由行酒店订房专家
2018/01/22 全球购物
生产厂厂长岗位职责
2013/12/25 职场文书
生日派对邀请函
2014/01/13 职场文书
违反交通安全法检讨书
2014/10/24 职场文书
2014公司年终工作总结
2014/12/19 职场文书
开幕式邀请函
2015/01/31 职场文书
社区节水倡议书
2015/04/29 职场文书
MySQL七大JOIN的具体使用
2022/02/28 MySQL