误删了之前的shell脚本,之前的shell脚本因为扩展性不强,就打算用python来重新实现。
端口扫描的方法特别多,我这里是把结果处理成json格式,交给后端的django来处理。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Date:2018-05-14
Author:Bob
Description:Processing nmap scan results
"""
import os
import time
import json
import requests
import subprocess
from xml.etree import ElementTree as ET
url = 'http://10.200.56.80:8000/portscan/portScanInterface/'
def remove_file(del_file):
if os.path.exists(del_file):
os.remove(del_file)
return del_file
def alive_ip():
# Detecting live ip
with open('ip_subnet.txt', 'r') as f:
for ip in f:
ip = ip.strip()
cmd = '/usr/bin/nmap -sP -PI -PT %s >> alive_ip.txt' %ip
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
print p.stdout.read(),
# Scan live ip
ips = []
with open('alive_ip.txt', 'r') as f:
for lines in f:
if lines.startswith('Nmap scan'):
ip = lines.split(' ')
ip = ip[4].strip()
ips.append(ip)
ip_str = ' '.join(ips)
nmap_scan = '/usr/bin/nmap -sV -oX nmap_scan_output.xml %s > /dev/null 2>&1' %ip_str
p = subprocess.Popen(nmap_scan, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
print p.stdout.read(),
def deal_scan_xml(xml_file):
# Processing nmap scan results
bd = open(xml_file, 'r').read()
root = ET.fromstring(bd)
data = []
for host in root.findall('host'):
# Print the number of child elements in the host tag
# print len(host),
# Get ip address
ip_ = host[1].get('addr')
# Get ports, protocols, and other information
if len(host) == 5:
for port in host[3][0:]:
# print port
port_ = str(port.get('portid'))
protocol_ = str(port.get('protocol'))
if port[0].tag == 'extrareasons':
continue
state_ = port[0].get('state')
service_ = str(port[1].get('name'))
product_ = str(port[1].get('product'))
version_ = str(port[1].get('version'))
extrainfo_ = str(port[1].get('extrainfo'))
ip_ = ip_
data.append({"ip": ip_, "port": port_, "protocol": protocol_, "state": state_, "service": service_,
"product": product_, "version": version_, "extrainfo": extrainfo_})
json_data = json.dumps({"detail": data})
json_data = requests.post(url, {"detail": json_data})
print json_data.text
def main():
remove_file('alive_ip.txt')
remove_file('nmap_scan_output.xml')
alive_ip()
deal_scan_xml('nmap_scan_output.xml')
if __name__ == '__main__':
main()
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。