hudeya 发表于 2018-8-6 06:11:24

Python实现端口扫描

#!/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.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.get('addr')
  
      # Get ports, protocols, and other information
  
      if len(host) == 5:
  
            for port in host:
  
                # print port
  
                port_ = str(port.get('portid'))
  
                protocol_ = str(port.get('protocol'))
  
                if port.tag == 'extrareasons':
  
                  continue
  
                state_ = port.get('state')
  
                service_ = str(port.get('name'))
  
                product_ = str(port.get('product'))
  
                version_ = str(port.get('version'))
  
                extrainfo_ = str(port.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()
页: [1]
查看完整版本: Python实现端口扫描