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 相关文章推荐
urllib和BeautifulSoup爬取维基百科的词条简单实例
Jan 17 Python
python学生管理系统代码实现
Apr 05 Python
删除DataFrame中值全为NaN或者包含有NaN的列或行方法
Nov 06 Python
python tkinter canvas 显示图片的示例
Jun 13 Python
python print出共轭复数的方法详解
Jun 25 Python
python写入文件自动换行问题的方法
Jul 05 Python
这可能是最好玩的python GUI入门实例(推荐)
Jul 19 Python
python 解决tqdm模块不能单行显示的问题
Feb 19 Python
TensorFlow-gpu和opencv安装详细教程
Jun 30 Python
浅谈pytorch中stack和cat的及to_tensor的坑
May 20 Python
教你用python实现12306余票查询
Jun 30 Python
Python编程编写完善的命令行工具
Sep 15 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
global.php
2006/12/09 PHP
基于wordpress主题制作的具体实现步骤
2013/05/10 PHP
图文详解PHP环境搭建教程
2016/07/16 PHP
PHP实现非阻塞模式的方法分析
2018/07/26 PHP
laravel框架使用极光推送消息操作示例
2020/02/15 PHP
json-lib出现There is a cycle in the hierarchy解决办法
2010/02/24 Javascript
使用js实现关闭js弹出层的窗口
2014/02/10 Javascript
jQuery学习总结之jQuery事件
2014/06/30 Javascript
使用jquery.upload.js实现异步上传示例代码
2014/07/29 Javascript
javascript实现框架高度随内容改变的方法
2015/07/23 Javascript
基于jQuery实现Ajax验证用户名是否存在实例
2016/03/30 Javascript
JS中判断字符串中出现次数最多的字符及出现的次数的简单实例
2016/06/03 Javascript
解决vue2 在mounted函数无法获取prop中的变量问题
2018/11/15 Javascript
微信小程序select下拉框实现源码
2019/11/08 Javascript
在vue中实现给每个页面顶部设置title
2020/07/29 Javascript
jQuery实现计算器功能
2020/10/19 jQuery
[01:35:53]完美世界DOTA2联赛PWL S3 Magma vs GXR 第二场 12.13
2020/12/17 DOTA
在Django中进行用户注册和邮箱验证的方法
2016/05/09 Python
python executemany的使用及注意事项
2017/03/13 Python
python特性语法之遍历、公共方法、引用
2018/08/08 Python
Python lxml解析HTML并用xpath获取元素的方法
2019/01/02 Python
对python实现模板生成脚本的方法详解
2019/01/30 Python
python按键按住不放持续响应的实例代码
2019/07/17 Python
Python-opencv 双线性插值实例
2020/01/17 Python
如何使用 Flask 做一个评论系统
2020/11/27 Python
pytorch 计算Parameter和FLOP的操作
2021/03/04 Python
单身旅行者的单身假期:Just You
2018/04/08 全球购物
Nike澳大利亚官网:Nike.com (AU)
2019/06/03 全球购物
电脑教师的教学自我评价
2013/11/26 职场文书
艺术设计专业个人求职信
2014/04/10 职场文书
会计学专业求职信
2014/07/17 职场文书
创先争优个人承诺书
2014/08/30 职场文书
申报材料格式
2014/12/30 职场文书
2015年小学教科研工作总结
2015/07/20 职场文书
浅谈pytorch中的dropout的概率p
2021/05/27 Python
HDFS免重启挂载新磁盘
2022/04/06 Servers