千家信息网

Python实现端口扫描

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,误删了之前的shell脚本,之前的shell脚本因为扩展性不强,就打算用python来重新实现。端口扫描的方法特别多,我这里是把结果处理成json格式,交给后端的django来处理。#!/usr/bi
千家信息网最后更新 2025年01月20日Python实现端口扫描

误删了之前的shell脚本,之前的shell脚本因为扩展性不强,就打算用python来重新实现。

端口扫描的方法特别多,我这里是把结果处理成json格式,交给后端的django来处理。


#!/usr/bin/env python# -*- coding: utf-8 -*-"""Date:2018-05-14Author:BobDescription:Processing nmap scan results"""import osimport timeimport jsonimport requestsimport subprocessfrom xml.etree import ElementTree as ETurl = '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_filedef 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.textdef 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()


0