誤刪了之前的shell腳本,之前的shell腳本因?yàn)閿U(kuò)展性不強(qiáng),就打算用python來(lái)重新實(shí)現(xiàn)。
端口掃描的方法特別多,我這里是把結(jié)果處理成json格式,交給后端的django來(lái)處理。
#!/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()
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。