python 计算机网络课程设计(网络主机扫描程序)

我们的运行环境是pycharm

目录

python 计算机网络课程设计(网络主机扫描程序)

背景

随着网络技术的发展,越来越多的计算机接入互联网上,网络安全逐渐成 为一个潜在的巨大问题,如何保障自身的网络安全,其中一个主要的方法就是 自查自纠,而在这个过程中,对自己的网络活动主机扫描成为一种较为快捷, 直观,简单的方法。本次课程设计就是对网络主机扫描技术的研究以及实现, 其中技术包括 ARP , ICMP , TCP , UDP 网络协议的网络活动主机扫描。 利用 ARP 协议获取活动主机的 mac 地址,当获取的不为 ”00-00-00-00-00-00” 时,则是主机可达到,认为是活动主机;利用 ICMP 协议,使用系统自带的 ping 程序功能,当且 ping 通目标主机时,认为是活动主机;基于 TCP 的链接状态, 当判断连接成功,认为是主机活动主机; UDP 是不可靠传输,给目标主机发送 消息,能狗看得到返回的消息,则主机可达到,则认为是活动主机。通过四种 不同的协议,不同的方法都可以得到网络上的活动主机号;

需求分析

网络安全扫描技术是类 重要的网络安全技术。安全扫描技术与防火墙、入侵 检测系统互相配合,能够有效提高网络的安全性。安全扣描是一种主动的防范 措施,可以有效避免黑客攻击行为,做到防患于未然,网络安全扫描的首要任 务是发现网络中活动的主机。对活动主机扫描就是向主机发送特定的数据报, 若主机有响应消息返回则说明该主机处于活动状态,否则主机不存在或处于关 机状态。当主机安装的防火墙软件进行了访问控制时 ( 例如禁用了 Ping 响应或者 禁用了所有的 ICMP 响应 ) ,这时使用常用的扫描方法就不起作用了,就需要使 用其它的方法进行探测。网络扫描的基础是互联网的协议,通过对协议的分析 找到适合网络扫描的协议类型和消息类型。根据互联网的协议标准构造特定类 型的数据报,把这些数据报发送到日的主机,从响应消息中提取信息。整个扫 描过程都是基于这种请求一应答 - 分析机制进行的

扫描技术

主机打描的目的是确定在口标网络上的主机是否可达,现行主要技术 有:ICMP Echo 扫描、TCP connect()扫描、UDP 回馈和 ARP 获取适配器编号扫 描,并日通计多线程,提向了扫描效率

基于 ICMP 协议的活动主机扫描

1.ICMP Echo 扫描精度相对较高。通过简单地向目标主机发送 ICMP Echo Request 数据包、并等待回复的 ICMP Eche Reply 包,如 Ping. 2.ICMP Sweep 扫描: Swepp 这个词的动作很像机枪扎射,ICMP 进行扣射式 的打描,就是并发性扫描,使用 ICMP Echo Request 一次探测多台主机,通 常这种探测包会并行发送,以提高探测效率,适用于人范围的评估 3.Broadcast ICMP 扫措:广播型 ICMP 扫描,利用了一些主机在 ICMP 实现上的差 异,设置 ICMP 请求包的口标地址为广播地址或网络地址,则可以探测广播域或 整个网络范国内的主机,子网内所有有活主机都会给以回应。 4.Non-Echo ICMP 扫描:在 ICMP 协议中不仅只有 ICMP-ECHO 的 ICMP 查询信息类 型,在 ICMP 扫描技术中也用到 Non-ECIO-ICMP 技术(不仅仅能探测主机,也可 以探测网络设备如路山)。利用了 ICMP 的服务类型(Timestamp 和 Timestamp Reply Information Request 和 Information-Reply,Address-Mask-Requesl 和 Address-Mask-Reply)。

程序功能流程图

python 计算机网络课程设计(网络主机扫描程序)

 函数的设计与程序

图形化界面库——tkinter 库 tkinter 库是 Python 里自带的图形化库,可以在大多数 Unix 平台以及 Windows 系统上使用。在 Tkinter 库中有着许多接口模块,而这些接口模块分别实现不 同的功能。 表格制作库——ttk.Treeview 库 在 ttk.Treeview 库是 Python GUI 里的一个基本表格输出库,它能够使开发人员 轻松构建表格,将数据以表格化的形式输出。 TreeView 组件是一个树状结构和表格的结合体。第一列是树状结构,后几列是列表。 每一行表示一个 item,树的 item 可以分级,每个 item 有子 item,名称对应 text 标签。 每一行的值用 values 元组里的值表示。 item 有 5 个标签,分别是:text,image,values,open,tags。 在该程序里,我使用 TreeView 组件构造了子网划分结果的表格,其主要代码如下所示: table = ttk.Treeview(win, show="headings", ) # 定义表格 table['columns'] = ['序号', '主机活跃号', '主机活跃端口'] # 定义 表头 table.pack() # 下面代码为设计每一列的宽度 table.column('序号', width=100, anchor='center') table.column('主机活跃号', width=500, anchor='center') table.column('主机活跃端口', width=300, anchor='center') table.column('花费总时间', width=100, anchor='center') # 定义表头内容 table.heading('序号', text='序号') table.heading('主机活跃号', text='主机活跃号') table.heading('主机活跃端口', text='主机活跃端口') #下面代码为设计每一列表格的表头显示的文字 # 定义文本输入框 bin1 = Button(win, text='开始检测', command=run) bin2 = Button(win, text='数据库保存', command=run2) bin3 = Button(win, text='数据库查询', command=run3) bin4 = Button(win, text='清空数据库', command=run4) 4.1.2 Button 函数 7 桂林航天工业学院本科课程设计报告 Button()函数常用于制作事件按钮,当用户点击 Button 按钮时,程序便 会根据预设来执行特定的事件,完成预期的事件。在此程序里,Button 按钮用 来触发 run()函数,以完成子网划分任务。其代码如下所示: # 定义文本输入框 bin1 = Button(win, text='开始检测', command=run) bin2 = Button(win, text='数据库保存', command=run2) bin3 = Button(win, text='数据库查询', command=run3) bin4 = Button(win, text='清空数据库', command=run4) # 定义界面按钮,模块的位置及大小 bin1.place(relx=0.1, rely=0.8, relwidth=0.4, relheight=0.1) bin2.place(relx=0.55, rely=0.8, relwidth=0.4, relheight=0.1) bin3.place(relx=0.55, rely=0.6, relwidth=0.4, relheight=0.1) bin4.place(relx=0.1, rely=0.6, relwidth=0.4, relheight=0.1)

数据库的应用和程序

SQLite 是一款轻量级的、基于文件的嵌入式数据库,实现自包容、零配置、 支持事务的 SQL 数据库引擎。与其他数据库管理系统不同,SQLite 的安装和运 行非常简单,在大多数情况下,只要确保 SQLite 的二进制文件存在即可开始创 建、连接和使用数据库。第一个 Alpha 版本诞生于 2000 年 5 月,直到今天已经 成为最流行的嵌入式数据库,包括 Google 在内的许多公司在其桌面软件中亦使 用 SQLite 存储用户数据,由此看来,其稳定性毋庸置疑。 实际应用中,SQLite 作为目前最为流行的开源嵌入式关系型数据库,在系 统的架构设计中正扮演着越来越重要的角色。和很多其它嵌入式 NoSQL 数据库 (如 BerkeleyDB、MemBASE 等)不同的是,SQLite 支持很多关系型数据库的基本 特征,如标准 SQL 语法、事务、数据表和索引等,这在数据移植、程序演示等 应用中有着不可替代的优势。从官方文档中我们可以获悉到,SQLite 支持的数 据量和运行效率都是非常骄人的,因此在海量数据的解决方案中,SQLite 可以 作为数据预计算的桥头堡,从而显著减少存储在关系型数据库服务器中的数据 数量,最终提高系统的查询效率和运行期效率,同时也可以显著的降低数据备 份的磁盘开销
#######################
###本程序只用于学习交流无用于其它用途
###有需要请联系博主QQ:2397746994
#######################

#部分代码如下

from tkinter import *
from tkinter import ttk
from multiprocessing.pool import ThreadPool
import subprocess
import socket
import sqlite3
import time
THREADING_NUM = 100 # 定义线程数

pool = ThreadPool(THREADING_NUM) # 定义线程池
Activity_IP = []
filename = 'ip.txt'
def get_host()

运行界面如下:

python 计算机网络课程设计(网络主机扫描程序)

 python 计算机网络课程设计(网络主机扫描程序)

 

上一篇:JavaFX实现三个风扇、每个风扇有按钮控制、一个总按钮控制三个风扇


下一篇:转载 一个示例用来演示libgdx的下载文件