Python实现端口扫描

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

原文地址:http://blog.51cto.com/whnba/2116189

时间: 2024-08-25 23:32:21

Python实现端口扫描的相关文章

Python实现端口扫描,只需做这几步走战略

一.常见端口扫描的原理 0.秘密扫描 秘密扫描是一种不被审计工具所检测的扫描技术. 它通常用于在通过普通的防火墙或路由器的筛选(filtering)时隐藏自己. 秘密扫描能躲避IDS.防火墙.包过滤器和日志审计,从而获取目标端口的开放或关闭的信息.由于没有包含TCP 3次握手协议的任何部分,所以无法被记录下来,比半连接扫描更为隐蔽. 但是这种扫描的缺点是扫描结果的不可靠性会增加,而且扫描主机也需要自己构造IP包.现有的秘密扫描有TCP FIN扫描.TCP ACK扫描.NULL扫描.XMAS扫描和

python实现端口扫描监控,宕机则发送邮件

import socket def get_ip_status(ip,port): server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) try: server.connect((ip,port)) print('{0} port {1} is open'.format(ip,port)) except Exception as err: print('{0} port {1} is down'.format(ip,port)) se

Python常用端口扫描

from socket import *import sys host=sys.argv[1]service={'21':'FTP','23':'Telnet','25':'SMTP','53':'DNS','69':'TFTP','80':'HTTP','135':'RPC','137':'NetBIOS','139':'Samba','443':'HTTPS','1080':'SOCKS','1521':'Oracle','1433':'SQL_Server','3306':'MySQL',

Python 第三方模块pythonnmap来实现高效的端口扫描

Python_Clamad 实现高效的端口扫描器pythonnmap Python的第三方模块pythonnmap来实现高效的端口扫描 python-nmap模块的安装方法如下: yum -y install nmap #安装nmap工具 pip install python-nmap #模块源码安装 ## https://pypi.python.org/pypi/python-nmap tar -zxvf python-nmap-0.1.4.tar.gz cd python-nmap-0.1.

Python 脚本学习笔记(五)集中式病毒扫描,端口扫描以及分段数据库操作

Clam AntiVirus是一个免费而且开放源码的防毒软件,软件与病毒库的更新由开源社区免费发布,目前ClamdAV主要为Linux.Uinux系统提供病毒扫描查杀pyClamad是一个python的第三方模块,可让python直接使用ClamAV病毒扫描守护进程clamd来实现一个高效的病毒检测功能. 一.实现集中式的病毒扫描 1.安装clamavp clamd 服务的相关程序包 yum install clamav clamd clamav-update -y chkconfig clam

python写的端口扫描脚本

今天看到群里哥们发了一个需求,如下: "如何批量检测一批主机的端口,是否存在,端口都是对外的",感觉不难,就用py写了个小脚本,有问题的地方,还望大家指出,谢谢! #!/usr/bin/env python import socket file = "C:\Users\Administrator\py_demo\ip.txt" port = 80 a = open(file, 'r') b = a.readlines() a.close() for i in b:

运维脚本:python实现批量IP端口扫描

运维脚本:python实现批量IP端口扫描 专注网络运维,只发实用干货 扫描二维码关注公众 今天不想更新,发一篇存货,分享一小段python代码给大家,能实现简单的批量端口扫描,废话不多说,先上代码: =========================================================== # -*- coding: utf-8 -*- import socket import time import xlrd import threading hostfile =

用Python实现一个端口扫描,只需简单几步就好

一.常见端口扫描的原理 0.秘密扫描 秘密扫描是一种不被审计工具所检测的扫描技术. 它通常用于在通过普通的防火墙或路由器的筛选(filtering)时隐藏自己. 秘密扫描能躲避IDS.防火墙.包过滤器和日志审计,从而获取目标端口的开放或关闭的信息.由于没有包含TCP 3次握手协议的任何部分,所以无法被记录下来,比半连接扫描更为隐蔽. 但是这种扫描的缺点是扫描结果的不可靠性会增加,而且扫描主机也需要自己构造IP包.现有的秘密扫描有TCP FIN扫描.TCP ACK扫描.NULL扫描.XMAS扫描和

小白日记10:kali渗透测试之端口扫描-UDP、TCP、僵尸扫描、隐蔽扫描

端口扫描 二三四层发现的目的只是为了准确发现所有活着主机IP,确定攻击面,端口扫描即发现攻击点,发现开放端口.端口对应网络服务及应用端程序,服务端程序的漏洞通过端口攻入.[所有的扫描结果,都不要完全相信] 一个端口就是一个潜在的通信通道,也就是一个入侵通道.对目标计算机进行端口扫描,能得到许多有用的信息.进行扫描的方法很多,可以是手工进行扫描,也可以用端口扫描软件进行扫描.在手工进行扫描时,需要熟悉各种命令.对命令执行后的输出进行分析.用扫描软件进行扫描时,许多扫描器软件都有分析数据的功能.通过