收藏 分销(赏)

毕业设计之网卡流量监控.doc

上传人:精**** 文档编号:4640151 上传时间:2024-10-08 格式:DOC 页数:33 大小:347KB
下载 相关 举报
毕业设计之网卡流量监控.doc_第1页
第1页 / 共33页
毕业设计之网卡流量监控.doc_第2页
第2页 / 共33页
点击查看更多>>
资源描述
毕业设计之网卡流量监控 28 2020年5月29日 文档仅供参考 网 卡 流 量 监 控 ——毕业设计说明书 系 部: 学生姓名: 专业班级: 学 号: 指导教师: 年 月 日 网 卡 流 量 监 控 摘 要 随着社会的发展,互联网已成为我们生活中不可缺少的一部分,而网卡在其中起着重要的作用,它是个人用户与互联网沟通的桥梁。经过对网卡流量的监控,使用相应的软件对流量出入的监视,清楚的知道流量的状态,从而不论在管理方面还是在安全方面,都会对网络管理人员有很大的帮助。本文介绍经过在.net开发平台上开发一个简单的网卡流量监控系统的过程,了解针对网卡监控的功能实现,掌握相关开发技术,同时利用软件工程的相关理论知识,了解软件开发的方法与步骤。 首先,简单介绍下几款带有监控功能的软件,比360安全卫士等,然后了解这些软件的功能;其次选择在微软的.net开发平台上使用C#语言进行开发,编写出功能简单实用方便的监控软件。主要包括以下几个方面:开发本软件所使用的开发平台与技术;IPv4、IPv6简单介绍;功能模块;功能设计;功能实现等。最后,对本软件的开发过程进行简要总结,并介绍一下本人的体会和感想。 【关键词】:网卡流量 ;.NET;C#; 目 录 一、概 述 1.1 项目背景与意义 随着互联网时代快速的发展,各类的应用软件层出不穷,也有许多专门提供各种软件下载的专业网站,如天空,华军等,这些网站提供的免费软件大大满足了普通用户的需求,也给她们展示了互联网的神奇之处。然而,有利也有弊,互联网在高速发展的同时也带着安全的隐患,比如黑客的攻击,木马等,因此,网络安全也很快得到了专业人士的重视,一系列的关于安全的软件应运而生,最大特点的就是杀毒软件和防火墙。 而在一些企业中,网络安全起着至关重要的作用,数据的出入是不允许出现任何闪失的。因此网管人员在做好防护的同时也利用一些专业软件对网络进行实时的监控,以便及时的做出相应措施。可是这些专业的网络软件都是针对网络流量的监控,属于企业级使用范围,而对于普通用户来说,虽然有杀毒软件和防火墙,但却不知道一些恶意程序也能够悄悄的在后台运行,能够神不知鬼不觉的连接网络,来窃取用户的信息和隐私。 在我们的个人计算机上,网卡是比较容易被忽略的,它是个人用户与互联网连接的关键所在,而且它也有流量的出入,因为网络上的信息流量是经过计算机的网卡转换把网上的信息呈现在我们眼前。我们往往都是关注网络流量,这也是网卡为什么容易被忽略的原因了。可是小事物往往有着大作用,经过对网卡流量的监控,普通用户的下载速率肯定是比上传速率大很多,当恶意程序连接网络时,上传速率却大大大超过下载的速率,此时用户就该注意是否存在不正常的网络连接。 作为学习网络技术专业的一员,也学习了一点软件方面的编程语言,同时也掌握了一定的软件开发理论,借助这次毕业设计,想对自己的想法做个论证,开发一个简单便易操作的针对本地计算机网卡流量监控的小软件,但作为毕业设计,由于本人没有任何软件开发的经验,肯定还存在许多的不足,以后会随着学习的深入而继续对它加以改进。 1.2 常见监控软件简介 下面举例介绍比较常见的网络监控系统,比如360安全卫士集成的网络监控,网路岗,分析它们的功能特点。 1.2.1 360安全卫士的网络监控 360安全卫士是一款安全类上网辅助软件,它拥有查杀恶意软件,插件管理,病毒查杀,诊断及修复四大主要功能,同时还提供弹出插件免疫,清理使用痕迹以及系统还原等特定辅助功能。而在它的7.0版本中也正式推出了网络流量的监控功能,主要作用是能够查看系统内各个软件使用网络上传/下载速度,能够帮助用户找出后台偷偷上传的软件。 现在网络上出现越来越多的软件因各种目的而联网,有是为产品更新升级,有的是为了宣传广告,特别是有些下载工具和一些视频软件及在线音乐播放器等软件,会产生很多的上传流量,这样不但许多用户的隐私因此而被泄漏,而且上网的效率也会有大大的折扣,而360的流量监控功能能够清晰的看到每个网络连接使用的IP地址和端口,而且流量监控使用系统标准的底层智能流量获取技术,不占用带宽资源,不会影响系统性能和网速。 从以上简单的介绍能够看出,360安全卫士整体是个功能强大,很好用的安全防范软件。但从单个看来,它依然有一些问题。当用户安装某些程序,而且是完全信任的程序的时候,会提示一些不必要的安全信息,而且一旦拒绝,有些程序是无法安装成功的。它的流量监控也很是强大,它可能能保证不获取用户的隐私,可是它能保证不得到用户计算机的相关信息么,这个就不知道了。 1.2.2 网监管软件-----网路岗 网路岗是当前国内领先的上网监管软件,现在已经推出很多代的网路岗,而且越来越强大,能经过旁路对网络数据流进行采集、分析和识别,实时监视网络系统的运行状态,记录网络事件、发现安全隐患,并对网络活动的相关信息进行存储、分析和协议还原。能追踪网络运作情况,一旦发送问题,立即传送警示讯息,或重新启动异常中止的服务,或自动启动某个程序,搜集网络上各装置的重要信息,然后利用这些数据制作出各装置不同层面的利用率与可用性的报表,使之一览无遗。 正是这一系列的强大功能,使之在一下机构,企事业单位和校园网吧得到了广泛的应用,但对于个人用户来说,它的功能太杂,而且一般用户只是简单的上上网,根本用不到这些功能,最终要的,它还不是免费的。 以上简单介绍的网络监控软件都是针对与网络流量的,而网络流量跟网卡流量是有区别的,对于个人用户来说,网卡流量的状态也能够从一定程度上体现带宽使用的情况。 1.3 相关技术及开发工具介绍 本系统采用面向对象的软件开发办法,以Microsoft公司的可视化集成开发环境 Visual Studio .Net 作为开发平台,以C#作为开发语言实现预定的需求功能。 1.3.1 Visual Studio .Net集成开发环境简介 .Net是 Microsoft XML Web services 平台。.Net 平台为创立新一代分布式Web应用提供了所有的工具和技术(表示技术、构件技术和数据库技术)。它支持标准的Internet协议,包括HTTP协议、XML(可扩展标记语言)和SOAP(简单对象访问协议),从而实现了异构系统间应用程序的集成和通信。.Net 平台包括5个主要部分: Ø Windows .Net Ø .Net企业级服务器 Ø .Net Web服务构件 Ø .Net Framework Ø Visual Studio .Net Visual Studio .Net 是为建立基于.Net Framework应用程序而设的一个可视化集成开发环境(Integrated Development Enviroment,IDE)。它提供了更优秀的多种编译语言的编辑和编译统一的开发平台,她是一个快速开发企业级Web应用程序以及高性能桌面应用的工具。它为所有的编程语言提供了简单统一的代码编辑器,包括XML编辑器、HTML编辑器、SQL Server接口、以图形化的方法设计服务器构件的设计器、监控远程机器的Server Explorer。能够说,VisualStdio .Net集中了建立分布式应用所需的功能。使用此集成开发工具而不是用SDK编辑C#程序有以下主要原因: Ø IDE支持首行缩进,切c#程序的关键字等可用不同的颜色直观表示,以便检查。 Ø IDE的语法导航功能可实现动态查找、提示编辑工程中的错误。 Ø 便于开发Windows应用程序。能够像Visual Basic一样直接拖放控件来”绘制”Windows窗体。 1.3.2 C#语言简介 C#是一种现代的、面向对象的语言,它结合了C/C++和Visual C++的强大功能以及Visual Basic 的简单易用性。C#有以下新特性: Ø 简单,C#做了些该进,使语言更简单。 Ø 面向对象,C#支持面向对象的三种编程原则:封装、继承和多态。 Ø 类型安全,C#去掉了指针,从根本上保证了程序的稳定性和类型安全。 Ø 版本控制,C#实现了版本技术,避免了”DLL灾难”。 Ø 兼容性,C#允许在遵守.Net Framework CLS 的条件下访问不同的API,能够与Windows的几种传统服务交互。 Ø 灵活性,C#允许声明一些不安全的方法和类,从而使用指针、结构和静态数组。 总之,C#是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的编程语言。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏和模版,不允许多重继承)。C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。 1.3.3 IPv4、IPv6协议的简介及比较 IPv4是Internet Protocol version 4(网际协议版本4)的英文简称,而中文简称为”网协版4”。 当前的全球因特网所采用的协议族是TCP/IP协议族。IP是TCP/IP协议族中网络层的协议,是TCP/IP协议族的核心协议。 IPv4的协议结构:如图1-1所示: 图1-1 Ipv4协议格式图 它的最大问题是网络地址资源有限,而IPv6的出现完全解决了这个问题,它所拥有的地址容量是IPv4的约8×10^28倍,IPV6地址长度为128比特,地址空间增大了2的96次方倍,灵活的IP报文头部格式使用一系列固定格式的扩展头部取代了IPV4中可变长度的选项字段。IPV6中选项部分的出现方式也有所变化,使路由器能够简单路过选项而不做任何处理,加快了报文处理速度,IPV6简化了报文头部格式,字段只有7个,加快报文转发,提高了吞吐量,提高安全性,更支持多种的服务类型。 IPv6的包头格式:如图1-2所示: 图1-2 Ipv6协议格式图 IPv6与IPv4相比有以下特点和优点: (1) 更大的地址空间。IPv4中规定IP地址长度为32,即有2^32-1个地址;而IPv6中IP地址的长度为128,即有2^128-1个地址。夸张点说就是,如果IPV6被广泛应用以后,全世界的每一粒沙子都会有相对应的一个IP地址。   (2) 更小的路由表。IPv6的地址分配一开始就遵循聚类(Aggregation)的原则,这使得路由器能在路由表中用一条记录(Entry)表示一片子网,大大减小了路由器中路由表的长度,提高了路由器转发数据包的速度。    (3) 增强的组播(Multicast)支持以及对流的支持(Flow-control)。这使得网络上的多媒体应用有了长足发展的机会,为服务质量(QoS)控制提供了良好的网络平台。 (4) 加入了对自动配置(Auto-configuration)的支持。这是对DHCP协议改进和扩展,使得网络(特别是局域网)的管理更加方便和快捷。 (5) 更高的安全性。在使用IPv6网络中,用户能够对网络层的数据进行加密并对IP报文进行校验,这极大地增强了网络安全。 二、 总体功能设计与实现 在第一章中简单的分析了一些个人和企业所使用的监控软件,IPv4、IPv6的简单介绍,还有编写本程序使用的技术、工具等,下面将从功能设计、功能实现两个方面重点描述。 2.1 功能设计 现在的计算机无疑都是比较前卫的,而且随着无线技术的发展,无线网卡也出现在个人计算机上,因此一般计算机都具备两块以上的网卡,根据一下监控软件的功能,去掉那些复杂的功能,保留最实用常见的功能,专门针对本机网卡的流量监控。下面主要介绍程序的功能设计及描述、功能模块图等。 2.1.1 功能设计及描述 本程序的主要任务和目的是对本地计算机所有的网卡流量进行监控,加上一些辅助的本地信息查询,进程的显示得到当前计算机的基本信息,达到功能简洁方便,消耗资源少而又不影响日常娱乐的需求。其主要划分为下面三个功能模块,每个功能模块的作用描述如下: 本机基本信息查询: 查看IP地址:主要查看本机在局域网内中的IP地址 查看主机名:用于查看本机计算机的名称 查看MAC地址:查看网卡的唯一地址 查看CPU信息:获取CPU型号、序列号 流量监控:获取到本机的网卡列表,然后针对某块网卡进行动态的流量监控,并显示出来 显示进程:获取当前计算机正在前台或后台运行的应用程序的进程 2.1.2 功能模块图 其具体功能如图2-1所示: 图2-1 2.2 功能实现 下面主要介绍如何根据上述的功能模块图实现具体的功能 2.2.1 主界面实现 下图为本系统的主要界面,由Visual Studio中已安装模板Windows 应用窗体程序(winform)生成,所用的控件、组件、容器、文本框等都是有Winform提供,本想添加点颜色使之更加的生动,但本人对于美工不是很擅长,以后另行绘制,由于界面是控件、组件等拖放组成,大部分代码有窗体设计器自动生成,需个人改动的并不多,所用这部分就不详细说明了,只把主窗体MainForm的代码示下。如图2-2所示: 图2-2 ponents = new System.ComponentModel.Container(); this.tabControl1 = new System.Windows.Forms.TabControl(); this.tabPage1 = new System.Windows.Forms.TabPage(); this.groupBox1 = new System.Windows.Forms.GroupBox(); this.labelCPU = new System.Windows.Forms.Label(); this.tbMAC = new System.Windows.Forms.TextBox(); this.tbname = new System.Windows.Forms.TextBox(); this.tbIP = new System.Windows.Forms.TextBox(); this.chakCPU = new System.Windows.Forms.Button(); this.chakMAC = new System.Windows.Forms.Button(); this.chakIPaddress = new System.Windows.Forms.Button(); this.chakcompname = new System.Windows.Forms.Button(); this.tabPage2 = new System.Windows.Forms.TabPage(); this.groupBox2 = new System.Windows.Forms.GroupBox(); this.groupBox4 = new System.Windows.Forms.GroupBox(); this.down = new System.Windows.Forms.Label(); this.up = new System.Windows.Forms.Label(); this.label1 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); this.groupBox3 = new System.Windows.Forms.GroupBox(); this.listadapters = new System.Windows.Forms.ListBox(); this.download = new System.Windows.Forms.Label(); this.bshow = new System.Windows.Forms.Button(); this.tabPage4 = new System.Windows.Forms.TabPage(); this.listprocess = new System.Windows.Forms.ListView(); this.shows = new System.Windows.Forms.Button(); this.endupprogram = new System.Windows.Forms.Button(); this.timercounter=newSystem.Windows.Forms.Timer(ponents); this.tabControl1.SuspendLayout(); this.tabPage1.SuspendLayout(); this.groupBox1.SuspendLayout(); this.tabPage2.SuspendLayout(); this.groupBox2.SuspendLayout(); this.groupBox4.SuspendLayout(); this.groupBox3.SuspendLayout(); this.tabPage4.SuspendLayout(); this.SuspendLayout(); 2.2.2 本地信息查询功能实现 1、查询IP地址:这个功能需要使用到 System.Net命名空间,在C#编程中,可利用它提供的DNS类获取IP地址,主要代码如下: string ipaddress = ""; IPAddress[] addresslist=Dns.GetHostAddresses(Dns.GetHostName()); for (int i = 1; i < addresslist.Length; i++) { ipaddress += addresslist[i].ToString() + ""; } tbIP.Text = ipaddress.ToString() + ""; 上面的代码就是利用了DNS类,它主要是从域名系统中查找关于指定主机的信息,经过Dns.GetHostAddresses(Dns.GetHostName())得到指定主机的IP地址,并把它赋予IPAddress[]类中的变量,再把它在文本框中显示出来。 2、查询主机名:这部分功能与上面的IP地址功能类似,也经过System.Net命名空间和DNS类来从域名系统中获得主机名,主要代码如下: string hostname = Dns.GetHostName(); tbname.Text = ""; tbname.Text = hostname + "\n"; 看上去非常的简单,最主要的还是同过DNS类来实现 3、查询MAC地址:在获取本地MAC地址时,能够使用WMI规范,在.NET框架中,WMI规范的实现定义在System.Management命名空间中,但要使用该命名空间就必须先引用该程序指令集,因此在右侧右击引用,选择添加引用,在.NET中找到System.Management即可。主要代码如下: ManagementClass mac = new ManagementClass("win32_networkadapterconfiguration"); ManagementObjectCollection mc = mac.GetInstances(); foreach (ManagementObject m in mc) { if ((bool)m["IPEnabled"] == true) tbMAC.Text += m["MacAddress"].ToString() + "\n"; m.Dispose(); } 经过ManagementClass类来提取MAC地址信息,再用ManagementObjectCollection类来检索并返回对象的集合,经过循环来找到MAC地址字段值,并在文本框中显示。 4.查询CPU信息:与获取MAC地址的功能类似,也是经过能够使用WMI规范,System.Management的命名空间来实现模块功能。主要代码如下: ManagementObjectSearcher query; ManagementObjectCollection querycollection; string sql = "select * from win32_processor"; query = new ManagementObjectSearcher(sql); querycollection = query.Get(); foreach (ManagementObject mo in querycollection) { labelCPU.Text += "cpu型号:" + "\n" + mo["name"].ToString() + "\n" + "\n"; } string cpuInfo = ""; ManagementClass cimobject = new ManagementClass("Win32_Processor"); ManagementObjectCollection moc = cimobject.GetInstances(); foreach (ManagementObject mo in moc) { cpuInfo = mo.Properties["ProcessorId"].Value.ToString(); labelCPU.Text += "cpu序列号:" + "\n" + cpuInfo.ToString() + "\n"; } 这段代码中: ManagementObjectSearcher类用于根据指定的查询检索管理对象的集合 ManagementObjectCollection类为管理对象的集合,分别定义这个两个类的变量,经过SELECT语句提取处理器的所有信息,并提取其中的信息,经过循环语句得到CPU的型号。CPU的序列号则是硬件ID,经过上述两个类调用CPU属性值,得到属性ID字段值,并显示出来。 2.2.3 流量监控功能的实现 这个模块的功能也可分为两个小模块,分别是获取网卡列表和对指定的网卡进行流量监控。流量监控功能的实现跟上面的功能实现相似,也是经过引用NetworkMonitor的程序指令集和调用using Echevil命名空间。值得注意的是,这个模块所引用的链接库在软件的调用库中没有,因此,不得不寻求网上朋友的帮助了。把下载下来的NetworkMonitor.dll放到程序文件中,并在代码页引用。 1、 获取网卡列表: 主要代码如下: monitor = new NetworkMonitor(); this.adapters = monitor.Adapters; if (adapters.Length == 0) { this.listadapters.Enabled = false; MessageBox.Show("No network adapters found on this computer."); return; } this.listadapters.Items.AddRange(this.adapters); 定义NetworkMonitor类中的变量,经过调用monitor.Adapters得到本机所有适配器的信息,并添加到列表框中。联网状态下流量信息如图2-3所示: 图2-3 迅雷下载任务如图2-4所示: 图2-4 迅雷下载下网卡流量信息如图2-5所示: 图2-5 2、 监控指定的网卡: 这个模块需要用到类似计数器的功能 主要代码如下: monitor.StopMonitoring(); monitor.StartMonitoring(adapters[this.listadapters.SelectedIndex]); this.timercounter.Stop(); this.up.Text = ""; this.down.Text = ""; 上述是在列表框控件上实现针对选择具体的列表项,然后对该网卡的上传速率和下载速率分别赋空值,当点击显示信息时才开始监控: if (this.listadapters.SelectedIndex < 0) { MessageBox.Show("请指定要监控的网卡", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); this.timercounter.Stop(); } else this.timercounter.Start(); 上述代码是防止在没有选择网卡项的情况下而实现的,if语句判断有没有选中指定的网卡,如果没有选择,则this.listadapters.SelectedIndex等于-1,即小于0,反之就会触发计数器对指定网卡进行监控。 NetworkAdapter adapter = this.adapters[this.listadapters.SelectedIndex]; this.up.Text = string.Format("{0:n} kbps ", adapter.UploadSpeedKbps); this.down.Text=string.Format("{0:n}kbps",adapter.DownloadSpeedKbps; nsc1.Value = (int)adapter.UploadSpeed / 100; nsc2.Value = (int)adapter.DownloadSpeed / 100; 上面一部分也是经过调用monitor.StopMonitoring()和monitor.StartMonitoring()来实现对列表框中的指定网卡进行监控,中间的命令是当选中指定网卡后开始执行监控,调用计数器,在这个过程中,又经过调用format把NetworkMonitor中的adapter.UploadSpeedKbps(上传流量)和adapter.DownloadSpeedKbps(下载流量)转换成{0:n} kbps格式,而且把流量在波形控件中显示,从而实现对指定网卡的流量监控。 2.2.4 显示进程信息的功能实现 这个模块的功能实现大部分用到了listview控件的属性,代码如下: this.listprocess.View = View.Details; 表示在控件中的显示方式 如图2-4 this.listprocess.Columns.Add("进程名称", 170, HorizontalAlignment.Left); this.listprocess.Columns.Add("内存使用", 150, HorizontalAlignment.Left); 上面代码表示在listview控件的第一行显示”进程名称”,”内存使用”,如图2-6所示: 图2-6 再调用System.Diagnostics.process得到本地系统的进程信息,代码如下: Process[] processes = Process.GetProcesses(); //获取进程信息 Process instance; for (int i = 0; i < processes.Length; i++) { instance = processes[i]; ListViewItem temp = new ListViewItem(); temp.Text = instance.ProcessName; temp.SubItems.Add(Convert.ToString((Convert.ToUInt64(instance.WorkingSet.ToString())) / 1024) + "K"); //转换成具体数值字符串 this.listprocess.Items.Add(temp); //添加到控件中 instance.Refresh(); } 再利用workingSet 获取关联进程的物理内存情况,并转换成字符串形式添加到listview控件当中。 三、总 结 从开始的选题,到现在的结束,历时两个多月。在这期间,整个毕业设计的过程并不是一帆风顺的。在前期的选题过程中的迷茫,在开始的程序开发过程中的手足无措,都记忆犹新。以前学习的都是理论知识,突然见要选择一个项目并把它实现,这对我们来说有些措手不及,而且项目设计所用到的知识范围超出了自己所掌握的范畴,顿时一种无力的心情油然而生。幸好在导师的细心指导下,在同学的无私帮助下,经过自己的努力,终于克服了项目设计的技术难题,认真地完成了毕业设计。 在系统的开发过程中,由于是初次自己动手设计开发,在知识、经验方面都存在着许多的不足。而且在整个的开发过程中,对于所用到的知识并不熟悉,从哪方面入手,整个程序要完成什么样的功能成了一直困扰我的问题,后来经过对网上的一些小工具的研究分析,也逐渐了解了这类软件的作用和功能,并确定了主要方向。尽管这个小程序还有很多的不足和缺陷,但功能简单,界面简洁,操作方便等是这个程序必备的。 在此我要特别感谢的是何亮老师,作为我的指导老师,在这个过程中遇到很多技术上难题,何老师给我提供了很好的解决建议,给了我不少帮助,也避免了我走许多的弯路,没有她的指导,我就不能较好的完成课题设计任务,在此真诚感谢老师的帮助和辅导。 经过这个项目设计,我了解了软件开发的过程,巩固了我对visual studio 的使用和学习,同时也掌握更宽的知识面。虽然我是学习网络技术专业的,但我相信经过这次的亲手实践,不论是现在还是将来,我都将受益匪浅。 致 谢 在论文即将完成之际,回顾充实的学习和开发过程,本人在此向我的指导老师何亮表示真诚的感谢,整个过程当中遇到很多不懂的知识和难题,何老师给我提供了相当好的解决建议,给了我不少帮助,使我少走好多弯路。在撰写论文阶段,何老师几次审阅我的论文,提出了许多宝贵意见,没有她的指导,我就不能较好的完成课题设计的任务。在此真诚感谢她耐心的辅导。 参 考 文 献 1、<Visual C#.NET应用编程150例> 尹力宏主编,电子工业出版社 2、<Visual C# 程序设计教程> 崔淼,陈明非 主编,机械工业出版社 3、<C#网络应用编程> 马骏主编,人民邮电出版社 4、<C#从入门到精通> 王小科主编,清华大学出版社 5、C#高级编程 第六版(PDF电子书) 6、360流量监控介绍 7、网路岗介绍
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 学术论文 > 毕业论文/毕业设计

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服