《Python网络安全项目实战》项目4 编写网络扫描程序

《Python网络安全项目实战》项目4 编写网络扫描程序

  • 项目4 编写网络扫描程序
    • 任务4.1 扫描内网有效IP地址
      • 任务描述
      • 任务分析
      • 任务实施
      • 任务拓展
    • 任务4.2 编写端口扫描工具
      • 任务描述
      • 任务分析
      • 任务实施
      • 相关知识
      • 任务评价
      • 任务拓展
      • 项目评价

项目4 编写网络扫描程序

许多扫描工具是由Python编写的。本项目中我们将用python写一个IP扫描工具,用来发现内网在线的IP以及开放的端口。
项目目标:
 能够正确获取系统的类型,是Windows还是Linux;
 能够正确获得本机IP的地址;
 能够正确得到IP地址的在线和端口开放情况。

任务4.1 扫描内网有效IP地址

任务描述

在对局域网进行管理时,为了知道网段内的IP在线情况,知道网段IP地址的使用情况,我们可以对网段的所有IP地址进行一次扫描。

任务分析

判断一个IP是否在线,最简单的方法就是去ping这个IP,通过ping返回的信息来判断IP是否在线,在Windows中ping命令默认发送4个数据包,而Linux中默认是一直发送数据,但是这个值也是可以更改的,Windows中只需要加上-n参数后面跟上一个数字,就是发送多少个数据包,而Linux中为-c,为了统一发送数据包的个数,需要先判断系统为Linux还是Windows。
确定好系统之后就是本网段的所有网址,对于一个C类内网网段,,一共有256个内网地址,从0到255,通过获取自己的IP地址,再对IP地址进行编辑,就可以获得内网所有IP,再通过ping命令去ping所有的IP,再通过返回信息就可以得到内网所有有效的IP地址。
使用python编程进行内网的IP扫描,那么需要用到网络相关的模块,在扫描内网前,先要知道自己的IP地址,而自己的IP地址是本地系统上的信息,所以还需要用到os模块,为了一次ping多个IP同时进行,还需要treading模块。

任务实施

【步骤1】:由于这次IP扫描的编程过程中需要使用系统、网络、线程、时间模块,所以在编程前先引用需要的模块(见图4-1-1)。
在这里插入图片描述

图4-1-1 引用需要使用的模块
【步骤2】:先获取系统信息,判断自己的系统是windows,还是linux,返回ping时需要使用-n,还是-c参数来确定数据包的个数(见图4-1-2)。
在这里插入图片描述

图4-1-2 获取系统类型
【步骤3】:获取到系统信息之后,再根据返回判断是windows,还是linux,根据不同的系统使用不同的方法获取IP(见图4-1-3)。
在这里插入图片描述

图4-1-3 获得本机IP地址
【步骤4】:获取到本机内网IP之后,调用系统ping命令来确认IP是否在线(见图4-1-4)。
在这里插入图片描述

图4-1-4 判断IP是否在线
【步骤5】:通过对获取本机内网IP的处理,生成整个网段的IP,生成一个IP就调用ping_IP这个方法看IP是否在线(见图4-1-5)。
在这里插入图片描述

图4-1-5 判断当前网段的在线IP
【步骤6】:在所有方法和功能都编写完成之后,编写主函数调用各方法(见图4-1-6)。
在这里插入图片描述

图4-1-6 编写主函数
【步骤7】:在Python IDLE中打开并运行程序(见图4-1-7)。
在这里插入图片描述

图4-1-7 运行程序
相关知识
platform模块:platform模块中有很多函数用来获取操作系统信息,包括操作系统名称,版本号,操作系统的位数,计算机类型,计算机网络名称等。
threading模块:threading模块的主要做用是来处理和控制线程的,一个进程可以有多个线程。
socket模块:socket模块是用来处理网络连接问题的,可以用做服务端,也可以用作客户端。
subprocess模块:subprocess模块的功能是用来创建个管理子进程的,还提供一些管理标准流和管道的工具,在进程间使用文本通信。
任务评价
请学生按照下表中的要求完成本次评价,并在物理机桌面上以自己的两位学号+姓名的形式命名文件夹,保存所有截图文件,文件保存为jpeg或 png格式。
在这里插入图片描述

任务拓展

  1. 编写程序扫描内网有效IP,并将找到的IP自动记录在文本文件当中。
  2. 编写程序读取记录IP的文本文件,与扫描到的内网有效IP进行对比验证。

任务4.2 编写端口扫描工具

任务描述

使用python对指定端口进行扫描。

任务分析

在对服务器的探测中,能否正确的判断端口的开放是十分重要的,一个服务器开放的端口越多,就代表着打开的窗户越多,而这些打开的窗户,难免就会存在一些问题,那么我们为了能够更好安全性,就必须了解一个服务器开放了哪些端口,利用python,就可以很好的实现端口的发现。
在python编程中,可以使用socket模块中的connect()来与指定IP的指定端口建立连接,连接建立成功则说明IP的端口是开放状态,若长时间没能成功建立连接,我们就认为这个端口是关闭的。
端口一共有65535个,周知端口为0-1023,注册端口为1024-49151,动态端口为49152-65535,而常用的服务一般都在0-1023之间,除了这个1024个端口外,还有一些常见端口,如1433,3389,4899等。
本任务要求在192.168.1网段对指定的IP地址区间进行扫描,扫描每一个IP地址的端口,并将扫描结果保存在一个文件中。
IP地址的生成。
端口号的生成。
扫描端口是否开放。

任务实施

【步骤1】:引用socket模块,如图4-2-1所示。
在这里插入图片描述

图4-2-1 引用模块
【步骤2】:定义变量接收开始IP和结束IP,如图4-2-2所示。
在这里插入图片描述

图4-2-2 IP
【步骤3】:定义变量接受开始端口和结束端口,如图4-2-3所示。
在这里插入图片描述

图4-2-3 端口
【步骤4】:使用socket模块中的connect()函数,函数不报错,不报异常,则表示端口连接成功,端口开放,否则端口就是关闭的,如图4-2-4所示。
在这里插入图片描述

图4-2-4 端口连接
【步骤5】:调用函数,如图4-2-5所示。
在这里插入图片描述

图4-2-5 调用函数
【步骤6】:在python IDLE中运行python程序或扫描指定IP的端口,会在python程序所在的目录生成一个IP_Port.txt文件,文件中会保存python程序运行的结果,如图4-2-6所示。
在这里插入图片描述

图4-2-6 运行python程序
【步骤7】:打开IP_Port.txt文件可以看到程序的运行结果,如图5-2-7所示。
在这里插入图片描述

图4-2-7 IP_Port.txt文件内容

相关知识

Socket模块:在使用socket模块中的connect()函数连接目标IP和端口时,设定一个超时时间,当端口不可达时,则会一直连接,端口可达时,则无状态,将超时的端口定位未开放端口。
Connect()扫描:这种扫描模式,是发起正常的访问请求,通过“三次握手”来确认端口的开放。
(1)服务器端口开放:
客户端发送一个SYN包给服务器。
服务器返回一个SYN/ACK包,表明端口开放。
客户端返回一个ACK包,建立接连。
客户端主动断开连接。
(2)服务器端口关闭:
客户端发送一个SYN包给服务器。
服务器返回一个RST/ACK包,表明端口未开放。

任务评价

请学生按照下表中的要求完成本次评价,并在物理机桌面上以自己的两位学号+姓名的形式命名文件夹,保存所有截图文件,文件保存为jpeg或 png格式。
在这里插入图片描述

任务拓展

  1. 编写慢速内网有效IP扫描程序,避免占用过多的网络资源。
  2. 编写随机延时慢速端口扫描程序,隐藏扫描行为避免被网络管理员发现。

项目评价

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/468873.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件设计开发规程,制度(word原件)

技术解决方案过程包括: 1、选择最佳解决方案; 2、制定架构设计; 3、制定概要设计; 4、制定详细设计和数据库设计; 5、利用准则进行接口设计; 6、实现设计; 7、进行单元测试; 8、进行…

Spring Boot框架的知识分类技术解析

2 开发技术 2.1 VUE框架 Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架。 Vue 只关注视图层, 采用自底向上增量开发的设计。 Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。 2.2 Mysql数据库 …

Knowledge Graph-Enhanced Large Language Models via Path Selection

研究背景 研究问题:这篇文章要解决的问题是大型语言模型(LLMs)在生成输出时存在的事实不准确性,即所谓的幻觉问题。尽管LLMs在各种实际应用中表现出色,但当遇到超出训练语料库范围的新知识时,它们通常会生…

Spark中的宽窄依赖

一、什么是依赖关系 这里通过一张图来解释: result_rdd是由tuple_rdd使用reduceByKey算子得到的, 而tuple_rdd是由word_rdd使用map算子得到的,word_rdd又是由input_rdd使用flatMap算子得到的。它们之间的关系就称为依赖关系! 二…

实现uniapp-微信小程序 搜索框+上拉加载+下拉刷新

pages.json 中的配置 { "path": "pages/message", "style": { "navigationBarTitleText": "消息", "enablePullDownRefresh": true, "onReachBottomDistance": 50 } }, <template><view class…

在vscode中如何利用git 查看某一个文件的提交记录

在 Visual Studio Code (VSCode) 中&#xff0c;你可以使用内置的 Git 集成来查看某个文件的提交历史。以下是具体步骤&#xff1a; 使用 VSCode 内置 Git 功能 打开项目&#xff1a; 打开你的项目文件夹&#xff0c;确保该项目已经是一个 Git 仓库&#xff08;即项目根目录下…

如何用python求导数

打开python运行环境。 导入微分的模块包&#xff1a;from sympy import *。 定义符号变量&#xff1a;x symbols(x) 定义一个函数&#xff1a;f x**9 diff diff(f,x)求导 最后输入diff&#xff0c;即可显示其变量值了。

Protobuf——基本使用

什么是Protobuf Protobuf是 Google的⼀种语⾔⽆关、平台⽆关、可扩展的序列化结构数据的⽅法&#xff0c;它可⽤于&#xff08;数据&#xff09;通信协议、数据存储等。 Protobuf类比于XML&#xff0c;是一种灵活&#xff0c;高效&#xff0c;自动化机制的结构数据序列化方法&…

【人工智能】ChatGPT多模型感知态识别

目录 ChatGPT辅助细化知识增强&#xff01;一、研究背景二、模型结构和代码任务流程一&#xff1a;启发式生成 三、数据集介绍三、性能展示实现过程运行过程训练过程 ChatGPT辅助细化知识增强&#xff01; 多模态命名实体识别&#xff08;MNER&#xff09;最近引起了广泛关注。…

Spring源码(十二):Spring MVC之Spring Boot

本篇将详细讨论Spring Boot 的启动/加载、处理请求的具体流程。我们先从一个简单的Spring Boot项目日志开始分析&#xff08;这里假设读者已经仔细阅读完了前面的文章&#xff0c;且对Spring源码有一定深度的了解&#xff0c;否则会看得一脸懵逼&#xff09;。 本文为2024重置…

c语言-教零基础/新手入门

C 简介 一提到语言这个词语&#xff0c;自然会想到的是像英语&#xff0c;汉语等这样的自然语言&#xff0c;因为它是人和人交换信息不可缺少的工具。而今天计算机普遍了我们生活的每一个角落&#xff0c;除了人和人的相互交流之外&#xff0c;我们必须和计算机交流。就像人类…

【安装配置教程】二、VMware安装并配置ubuntu22.04

一、准备&#xff1a; 虚拟机安装ubuntu&#xff0c;首先要先找到一个镜像&#xff0c;可以去ubuntu官方下载一个&#xff0c;地址&#xff1a;下载Ubuntu桌面系统 | Ubuntu&#xff0c;下载好iso的镜像文件后保存好&#xff0c;接下来打开VMware。 二、安装&#xff…

立体视觉的核心技术:视差计算与图像校正详解

立体视觉的核心技术&#xff1a;视差计算与图像校正详解 在立体视觉中&#xff0c;通过双目相机&#xff08;即左右两台相机&#xff09;的不同视角捕获的图像&#xff0c;结合几何关系&#xff0c;我们可以推算出场景中物体的深度。本文将深入讲解如何基于视差&#xff08;di…

深度学习基础练习:从pytorch API出发复现LSTM与LSTMP

2024/11/5-2024/11/7&#xff1a; 前置知识&#xff1a; [译] 理解 LSTM(Long Short-Term Memory, LSTM) 网络 - wangduo - 博客园 【官方双语】LSTM&#xff08;长短期记忆神经网络&#xff09;StatQuest_哔哩哔哩_bilibili 大部分思路来自于&#xff1a; PyTorch LSTM和LSTMP…

scala学习记录,Set,Map

set&#xff1a;集合&#xff0c;表示没有重复元素的集合&#xff0c;特点&#xff1a;唯一 语法格式&#xff1a;val 变量名 Set [类型]&#xff08;元素1&#xff0c;元素2...&#xff09; 可变不可变 可变&#xff08;mutable&#xff09;可对元素进行添加&#xff0c;删…

Docker了解

Docker是一种容器化技术&#xff0c;它可以将应用程序和其依赖项打包到一个独立的、可移植的容器中&#xff0c;以便在不同的环境中运行。Docker基于Linux操作系统的容器化技术&#xff0c;可以提供更轻量、更快速、更灵活、更一致的应用部署和管理方式。 Docker的基本概念包括…

‘conda‘ 不是内部或外部命令,也不是可运行的程序或批处理文件,Miniconda

下载了conda&#xff0c;但是在cmd里执行conda --version会显示’conda’ 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件。 原因是环境变量里没有添加conda&#xff0c;无法识别路径。 需要在系统环境变量里添加如下路径&#xff1a; 保存之后重新打开cmd&am…

《TCP/IP网络编程》学习笔记 | Chapter 4:基于TCP的服务器端/客户端(1)

《TCP/IP网络编程》学习笔记 | Chapter 4&#xff1a;基于TCP的服务器端/客户端&#xff08;1&#xff09; 《TCP/IP网络编程》学习笔记 | Chapter 4&#xff1a;基于TCP的服务器端/客户端&#xff08;1&#xff09;理解TCP和UDPTCP/IP协议栈TCP/IP协议的诞生背景链路层网络层T…

【C语言】。末尼

用js写一个冒泡排序 当然可以。在JavaScript中&#xff0c;你可以使用递归的方式来实现冒泡排序算法。这是一个简单的示例&#xff1a; function bubbleSort(arr) { let len arr.length; if(len < 1){ return arr; // 如果数组只有一个元素或为空&#xf…

深度学习笔记12

1.神经网络的代价函数 神经网络可同时用于解决分类问题和回归问题&#xff0c;对于不同的问题会在输出层后&#xff0c;加上不同的变换函数。一般来说&#xff0c;回归问题使用恒等函数,分类问题使用sigmoid或softmax函数。而不同的变换函数&#xff0c;也对应不同的代价函数。…