Python拿取nmap扫描的结果并存在csv文件中-程序员宅基地

技术标签: 网络  服务器  

今天分享一个使用subprocess模块来执行nmap命令,并使用csv模块来将结果写入CSV文件的方法。

代码如下:

import subprocess
import csv

# 定义扫描的参数
ip_address = '172.18.0.1/24'  # 扫描的IP地址或CIDR
port_range = '-p 443'       # 扫描的端口范围
output_filename = 'scan_results.csv'  # 输出的CSV文件名

# 构建nmap命令
nmap_command = ['nmap', '-oX', '-', ip_address, port_range]

# 执行nmap命令并获取输出
try:
    result = subprocess.run(nmap_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, check=True)
    nmap_output = result.stdout.decode('utf-8')
except subprocess.CalledProcessError as e:
    print(f"nmap scan failed with error: {e}")
    exit(1)

# 解析nmap的XML输出并转换为CSV格式
try:
    import xml.etree.ElementTree as ET
    root = ET.fromstring(nmap_output)

    # 打开CSV文件准备写入
    with open(output_filename, 'w', newline='') as csvfile:
        csvwriter = csv.writer(csvfile)

        # 写入CSV文件的标题行
        csvwriter.writerow(['Host', 'Port', 'State', 'Service', 'Protocol'])

        # 遍历nmap扫描结果中的每个主机和端口
        for host in root.findall('host'):
            address = host.find('address').get('addr')

        # 遍历主机的所有端口
            for port_elem in host.findall('ports/port'):
                protocol = port_elem.get('protocol')
                portid = port_elem.get('portid')
                state_elem = port_elem.find('state')
                state = state_elem.get('state') if state_elem is not None else 'unknown'
                service_elem = port_elem.find('service')
                service = service_elem.get('name') if service_elem is not None else 'unknown'


                # 写入CSV文件的一行数据
                csvwriter.writerow([address, portid, state, service, protocol])

    print(f"Scan results have been written to {output_filename}")
except ET.ParseError as e:
    print(f"Failed to parse nmap output: {e}")

输出结果如下:

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_45212655/article/details/137941570

智能推荐

java icon动态变换_Android实现APP安装后动态更换Icon和名称-程序员宅基地

文章浏览阅读200次。最近看到手机自带的时钟App可以实时的修改图标样式,就觉得很神奇。考虑到我自己要做的日记App可能也需要这样的功能,于是研究了一下,目前初步实现了修改图标及点击后进入不同Activity的功能,代码比较简单,点击这里download ZIP。简单效果图:原来调用修改方法:代码很简单,就2个部分:1.修改manifest文件:package="sxkeji.net.aliasdemo" >an..._android app 更换电子门牌 demo

Pytorch中的register_buffer()-程序员宅基地

文章浏览阅读2.4w次,点赞185次,收藏333次。Pytorch中的register_buffer1.register_buffer( )的使用随着例子边看边讲例子1:使用类成员变量(类成员变量并不会在我们的model.state_dict(),即无法保存)例子2:使用类成员变量(类成员变量并不会随着model.cuda()复制到gpu上)例子3:使用register_buffer()总结2.与pa1.register_buffer( )的使用回顾模型保存:torch.save(model.state_dict()),model.state_dict(_register_buffer

HTML 表单标签_html表单标签-程序员宅基地

文章浏览阅读7.8k次,点赞17次,收藏70次。一、什么是表单标签表单是用来采集用户的输入数据,然后将数据提交给服务器二、表单的组成一个表单有三个基本组成部分: ①表单标签:这里面包含了处理表单数据所用程序的URL以及数据提交到服务器的方法。 ②表单域:包含了文本框、密码框、隐藏域、多行文本框、复选框、单选框、下拉选择框和文件上传框等。 ③表单按钮:包括提交按钮、复位按钮和一般按钮;三、表单标签表单标签<form></form>功能:用于申明表单,定义采集数据的范围,也就是<form>和</form>里面包含的数据_html表单标签

python控制小爱同学_从企业微信机器人到小爱同学,用 Serverless 实现生活智能化!...-程序员宅基地

文章浏览阅读1.2k次。通过定时触发器,可以简单快速地定制一个企业微信机器人。我们可以用它来实现喝水、吃饭提醒等小功能,还能实现定时推送新闻、天气,甚至是监控告警的小功能。使用企业微信机器人在企业微信中,选择添加机器人:之后,我们可以根据文档进行企业微信机器人的基础功能定制:以下是用 curl 工具往群组推送文本消息的示例(注意要将 url 替换成机器人的 webhook 地址,content 必须是 utf8 编码):..._小爱同学api python

Linux下shell脚本:bash的介绍和使用(详细)-程序员宅基地

文章浏览阅读6w次,点赞126次,收藏713次。Shell:一般我们是用图形界面和命令去控制计算机,真正能够控制计算机硬件(CPU、内存、显示器等)的只有操作系统内核(Kernel),由于安全、复杂、繁琐等原因,用户不能直接接触内核,需要另外再开发一个程序,让用户直接使用这个程序;该程序的作用就是接收用户的操作(点击图标、输入命令),并进行简单的处理,然后再传递给内核,内核和用户之间就多了一层“中间代理”,Shell 其实就是一种脚本语言,也是..._bash

Linux字符设备驱动框架之IIC总线驱动框架_linux iic 设备是字符设备吗-程序员宅基地

文章浏览阅读621次。目录1、I2C简介2、I2C驱动框架2.1、I2C核心2.1.1、I2C bus初始化2.1.2 IIC核心提供的接口函数2.2 IIC总线驱动2.2.1 I.MX6U 的 I2C 适配器驱动分析2.3、IIC设备驱动2.3.1、I2C设备驱动解析2.3.2、I2C 设备驱动编写流程1、i2c设备信息描述2、i2c设备数据收发处理流程2.3.3、I2C设备驱动实例1、参考链接:https://www.cnblogs.com/linfeng-learning/p/9523046.html#_label22_linux iic 设备是字符设备吗

随便推点

python循环嵌套_python循环j和i每循环9个一分行-程序员宅基地

文章浏览阅读1.9k次。#一,循环嵌套##1,双for循环嵌套"""外层循环每循环一次,内层循环循环所有次,内层循环体执行就是内外层循环次数的乘积for i in "范围": #循环9次 for j in "范围":# 循环9次 "循环体""""for x in range(3): for y in range(3): print("%d %d" % (x, y))#例2打印99 乘法表for i in range(1, 10):# 循环打印数字0到9 for_python循环j和i每循环9个一分行

ubuntu16.04成功安装 百度网盘 by deepin-wine-for-ubuntu_ubuntu kylin16.04 网盘-程序员宅基地

文章浏览阅读9.6k次,点赞2次,收藏6次。ubuntu笔记本 安装百度网盘 ,帮助完成安装 百度网盘 的资料来源,请点击此处hairui@hadoop:~$ git clone https://gitee.com/wszqkzqk/deepin-wine-for-ubuntu.git正克隆到 'deepin-wine-for-ubuntu'...remote: Enumerating objects: 2777, done.remo..._ubuntu kylin16.04 网盘

怎样处理过拟合和欠拟合?_拟合程度 高-程序员宅基地

文章浏览阅读981次。过拟合和欠拟合从模型在不同集合上的表现来看首先来明确一下过拟合和欠拟合的概念。过拟合(下图中最右侧的图像)过拟合指的是训练数据拟合程度过高的情况,也就是说模型在训练集上表现的很好,但是在测试集和新的数据集上表现的较差。欠拟合(下图中最左侧的图像)了解了什么是过拟合,欠拟合也显而易见,当模型在训练集和测试集表现的都不好的时候我们就称这种现象为欠拟合。从方差和偏差的角度来看..._拟合程度 高

Android 进阶解密读书笔记(十四)——插件化原理_android so的插件化-程序员宅基地

文章浏览阅读360次。插件化的客户端由宿主和插件两部分组成,宿主就是指先被安装到手机中的apk,就是我们平常加载的普通apk。插件一般是指经过处理的apk、so和dex等文件,插件可以被宿主进行动态安装。常用的插件化框架 DynamicApk、DroidPlugin、RePlugin。_android so的插件化

jdk1.7和jdk1.8区别-程序员宅基地

文章浏览阅读66次。在jdk7的新特性方面主要有一下几方面的增强本文是我学习了解了jdk7和jdk8的一些新特性的一些资料,有兴趣的大家可以浏览下下面的内容。官方文档在jdk7的新特性方面主要有下面几方面的增强:jdk1.7语法上1.1 二进制变量的表示,支持将整数类型用二进制来表示,以0b开头。所有整数int、short、long、byte都可以用二进制表示// An 8-bit 'byte' v..._jdk 1.8和jdk7

苹果cms在线采集,100多个采集资源接口,可定时采集_cms官方地址影视采集接口-程序员宅基地

文章浏览阅读1.1w次。这是一款苹果v10的采集插件,还可以采集海报,批量搜索,在此分享这个插件下载地址:【蓝奏云】:https://wwa.lanzous.com/iEZBji5xc8b【百度网盘】:https://pan.baidu.com/s/1HGy0kF_A9QS1JLQ-EvH9tg密码:u16j..._cms官方地址影视采集接口

推荐文章

热门文章

相关标签