Python实现端口扫描

发布时间:2020-07-17 15:48:22 作者:zddnyl
来源:网络 阅读:1198

误删了之前的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()


推荐阅读:
  1. 端口扫描技术
  2. 批量端口扫描

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

端口 扫描

上一篇:路由与交换

下一篇:JAVA如何实现集成Freemarker生成静态html

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》