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中的各种装饰器详解
Apr 11 Python
python中OrderedDict的使用方法详解
May 05 Python
Python基于递归算法实现的汉诺塔与Fibonacci数列示例
Apr 18 Python
Python爬取qq空间说说的实例代码
Aug 17 Python
用python拟合等角螺线的实现示例
Dec 27 Python
python实现扑克牌交互式界面发牌程序
Apr 22 Python
python交互模式基础知识点学习
Jun 18 Python
浅析Python面向对象编程
Jul 10 Python
Python timeit模块原理及使用方法
Oct 10 Python
python 多进程和协程配合使用写入数据
Oct 30 Python
Pycharm安装第三方库失败解决方案
Nov 17 Python
python基于tkinter制作无损音乐下载工具
Mar 29 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
function.inc.php超越php
2006/12/09 PHP
探讨PHP删除文件夹的三种方法
2013/06/09 PHP
使用PHP遍历文件目录与清除目录中文件的实现详解
2013/06/24 PHP
学习php设计模式 php实现适配器模式
2015/12/07 PHP
PHP快速排序算法实现的原理及代码详解
2019/04/03 PHP
简单的无缝滚动程序-仅几行代码
2007/05/08 Javascript
js/jQuery简单实现选项卡功能
2014/01/02 Javascript
javaScript 页面自动加载事件详解
2014/02/10 Javascript
JS判断移动端访问设备并加载对应CSS样式
2014/06/13 Javascript
Javascript图片上传前的本地预览实例
2014/06/16 Javascript
jquery实现将获取的颜色值转换为十六进制形式的方法
2014/12/20 Javascript
javascript为按钮注册回车事件(设置默认按钮)的方法
2015/05/09 Javascript
JS实现带提示的星级评分效果完整实例
2015/10/30 Javascript
js实现接收表单的值并将值拼在表单action后面的方法
2015/11/23 Javascript
js计算时间差代码【包括计算,天,时,分,秒】
2016/04/26 Javascript
jQuery ui autocomplete选择列表被Bootstrap模态窗遮挡的完美解决方法
2016/09/23 Javascript
react-router实现按需加载
2017/05/09 Javascript
详解vue slot插槽的使用方法
2017/06/13 Javascript
详解10分钟学会vue滚动行为
2017/09/21 Javascript
使用Nuxt.js改造已有项目的方法
2018/08/07 Javascript
webstorm中配置Eslint的两种方式及差异比较详解
2018/10/19 Javascript
Javascript读写cookie的实例源码
2019/03/16 Javascript
VUE.CLI4.0配置多页面入口的实现
2019/11/25 Javascript
基于aotu.js实现微信自动添加通讯录中的联系人功能
2020/05/28 Javascript
[01:02:18]VGJ.S vs infamous Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
Python全局变量操作详解
2015/04/14 Python
Python中输出ASCII大文字、艺术字、字符字小技巧
2015/04/28 Python
Python环境下搭建属于自己的pip源的教程
2016/05/05 Python
Python+matplotlib实现填充螺旋实例
2018/01/15 Python
Python如何使用函数做字典的值
2019/11/30 Python
python 三种方法提取pdf中的图片
2021/02/07 Python
CSS3 实现倒计时效果
2020/11/25 HTML / CSS
新西兰杂志订阅:isubscribe
2019/08/26 全球购物
防溺水安全教育主题班会
2015/08/12 职场文书
golang中字符串MD5生成方式总结
2021/07/04 Golang
Go gorilla securecookie库的安装使用详解
2022/08/14 Golang