欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOCX文档下载  

    计算机网络课程设计 端口扫描 实验报告材料.docx

    • 资源ID:6691563       资源大小:132.26KB        全文页数:19页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    计算机网络课程设计 端口扫描 实验报告材料.docx

    1需求分析31.l课程设计目的31.2 课程设计容31.3 课程设计要求32概要设计32. 1原理概述32.1 运行环境32.2 基本设计思路32.3 功能模块设计33详细设计33. 1程序流程33.1 主要算法53.2 主要数据结构63.4主要函数说明64用户使用手册75项目分析与总结75.1项目分析75.2总结与建议8附录A源程序代码文件说明8附录B参考文献201 .需求分析1.1 课程设计目的加深对TCP/IP的理解,熟悉SOCket编程。课程设计容实现一个扫描器,使用TCPCOnneCt进行端口扫描,并把扫描到的结果记录下来。课程设计要求(1) WindOWS或LinUX环境下,程序在单机上运行;(2)使用端口扫描对一台主机进行扫描,并显示出结果;对一个网段进行IP扫描,显示出结果;(3)提供友好的用户界面。2 .概要设计2.1 1原理概述TCPCOnneCt扫描是最基本的扫描,操作系统提供的COnneCt()系统调用,用来与每一个感兴趣的目标计算机的端口进行连接。如果端口处于侦听状态,那么COnneCt()就能成功。否则,这个端口是不能用的,即没有提供服务。2.2 运行环境Windowsxp,VC+6.02.3 基本设计思路创建一个CSocket套接字,通过CSOCket的Connect函数测试该主机的某个端口是否能够连通,获得该端口的打开状态。2.4 功能模块设计(1)测试主机某个端口是否打开;(2) “扫描结果”标题栏;(3)扫描单个或多个端口的单选按钮;(4) “扫描”,“停止”,“保存”按钮。3 .详细设计3.1程序流程3.2主要算法(1)测试主机某个端口是否打开的函数TeStCOnneetion():BOOLCMyDlg::TestConnection(CStringIP,UINTnPort)CSocket*pSocket;pSocket=newCSocket;ASSERT(pSocket);if(!pSocket->CreateO)deletepSocket;pSocket=NULL;returnfalse;)whiIe(!pSocket->Connect(IP,nPort)deletepSocket;pSocket=NULL;returnfalse;1pSocket->Close();deletepSocket;returntrue;1(2)响应单选按钮“扫描单个端口”和“扫描多个端口”的单击消息:voidCMyDlg::OnRadiolSingleOm_bSinglePort=true;m_cSinglePort.EnableWindowO;m_cPortFrom.EnableWindow(false);m_cPortTo.EnableWindow(false);m_cBtnStop.EnableWindow(false);1voidCMyDlg::OnRadio2RangeOm_bSinglePort=false;m_cSingIePort.Enab1eWindow(false);m_cPortFrom.EnableWindowO;m_cPortTo.EnableWindowO;m_cBtnStop.EnableWindow(Ialse);)(3)显示列表框标题栏的成员函数:增加列表框标题栏的某一列BOOLCMyDlg::AddColumn(LPCTSTRstritem,intnltem,intnSubltem,intnMask,intnFmt)LV_COLUMNIvc;lvc.InaSk=nMask;lvc.fmt=nFmt;lvc.PszText=(LPTSTR)strltem;lvc.cx=m_cResult.GetStringWidthdvc.pszText)+25;if(nMask&LVCF_SUBITEM)if(nSubItem!=-l)lvc.iSubItem=nSubItem;elselvc.iSubItem=nItem;1returnm_cResult.InsertColumn(nltern,&lvc);)在列表框中加一条BOOLCMyDlg::AddItem(intnltem,intnSubltern,LPCTSTRstritem,intnlmagelndex)LV_ITEMIvItern;IvItem.mask=LVIF_TEXT;IvItem.iltem=nltem;IvItem.iSub11em-nSub11em;IvItem.pszText=(LPTSTR)stritem;if(nlmagelndex!=-l)IvItem.mask|=LVIF_1MAGE;IvItem.iImage=LVIF_1MAGE;)if(nSubItem-O)returnm_cResult.InsertItem(&lvltern);returnm_cResult.SetItem(ftlvltem);)加一列标题栏字符voidCMyDlg::AddHeader(LPTSTRhdr)if(m_pColumns)m_pColumns->AddTail(hdr);)显示列表框标题栏voidCMyDlg::ShowHeaders0intn!ndex=O;POSITIONpos=m-pColumns->GetHeadPositionO;while(pos)CStringhdr=(CString)m_pColumns->GetNext(pos);AddColumn(hdr,nlndex+);)(4)“扫描”,“停止”,“保存”按钮,见附录程序。3.3主要数据结构及主要函数说明(1)测试主机某个端口是否打开TestConnection函数;(2)“扫描结果”标题栏成员函数AddlIeader,AddColumn,ShowlIeaders;在列表框中添加字符串的函数AddItem;(3)扫描单个或多个端口的单选按钮OnRadioSingleO和OnRaclioRangeO;(4)“扫描停止”,“保存”按钮OnButtonlStart(),0nButton2Stop(),0nButton3Save();4 .用户使用手册输入要扫描的主机IP地址,选择“扫描单个端口”或“扫描多个端口”,若选择前者,则输入单个端口号;若选择后者,则输入端口围。再输入扫描次数(默认值为1),单击“扫描”按钮,扫描结果列表框中将会显示所输入端口的扫描结果。单击“停止”时停在那一刻的状态,并显示已扫描的结果。单击“保存”时,可将结果保存在文本文件中。5 .项目分析与总结5.1项目分析扫描单个端口的结果:扫描多个端口:王端口扫描主机地址:105. 104 . 36扫描单个端口G扫描多个端口扫描次数:扫描结果:20到 |30工P地址端口号端口状态尝试连接次数标记5.5.5.5,5.5.5.50.0.s0.0.s20212223242s262728*30Close1Close1Close1Close1Close1Open1Close1Close1Close1Close1Close1当前扫描状态扫描停止 I保存通过观察,主机IP为10.5.104.36的25号端口是打开的。5.2总结与建议通过这次实验,加深了对端口的理解,也对SoCket编程有了进一步的认识。实验中遇到许多函数和定义需要上网查阅资料,而且调试的过程也比较困难,需要向同学请教。所以,今后在编程和查阅资料方面的能力有待于进一步去提高。附录A源程序代码文件说明:(1)端口扫描Dig.h:# if!defined(AFX_DLG_H_37F5060C_6D8B_42F0_90D9_FBA754BAD52B_INCLUDED_)defineAFX_DLG_H_37F5060C_6D8B_42E0_90D9_FBA754BAD52B_INCLUDED_# if_MSC_VER>1000# Pragmaoncettendif/MSCVER>1000Sinclude<fcntl.h>#include<systypes.h>#include<sysstat.h>include<io.h>include<afxsock.h>扫描结果typedefstructintnAttempts;TCHARIPAddress16;TCHARport5;BOOLbStatus;/1=open,0=close!DATA;Illlltlllllizilizillllizillizziizilizilllizilllinillllllllllllllllllllllll/CMyDlgdialogclassCMyDlg:publicCDialog/Constructionpublic:CMyDlg(CWnd*pParent=NULL);/standardconstructor/DialogData/AFX,DATA(CMyDlg)enumIDD=IDD_MY_DIALOG;CProgressCtrlm_cProgress;CListCtrlm_cResult;CIPAddressCtrlm_cIP;CEditm_cAttempts;CEditm_cPortTo;CEditm_cPortFrom;CEditm_cSinglePort;CButtonm_cBtnStop;CButtonm_cBtnScan;/AFX_DATA/ClassWizardgeneratedvirtualfunctionoverrides/(AFX-VIRTUAL(CMyDlg)protected:virtualvoidDoDataExchange(CDataExchange*pDX);/DDX/DDVsupport/AFX_VIRTUAL/Implementationprotected:HICONm_hlcon;BOOLTestConnection(CStringIP,UINTnPort);测试主机某个端口是否打开voidShowHeaders(void);显示列表框标题栏voidAddHeader(LPTSTRhdr);/增加一列标题栏字符ddltem(intnltem,intnSubltern,LPCTSTRstritem,intnImageIndex=-I);/向m_cResult输出一个结果/向输出结构列表控件增加一列BOOLAddColumn(LPCTSTRstritem,intnltem,intnSubItem=-I,intnMask=LVCF,FMTLVCFJVlDTHLVCF_TEXTLVCF_SUBITEM,intnFmt=LVCFMT_LEFT);/变量UINTBOOL UINTUINTm_nMaxAttempts;m_bSing1ePort; m_minPort,m_maxPort; m_nCounter;CStringList* m_pColumns;试图连接次数的最大值是否只扫描单个端口扫描端口的围端口的个数列表框标题栏CPIrLiSI*m_pSlatusList;保存扫描结果的链表/Generatedmessagemapfunctions/(AFXJlSG(CMyDlg)virtual afx_msg afx_msg afx_msg afx_msg afx_msg afx_msg afx_msg afx_msg /AFX.BOOLOnlnitDialogO;voidOnSysCommand(UINTnIDtLPARAMIParam);voidOnPaintO;HCURSOROnQueryDragIconO;void void void void void MSGOnButtonlStart();OnButton2Stop();OnButtonBSaveO;OnRadiolSingleO;OnRadio2Range();DECLARE_MESSAGE_MAP()1;(AFXNSERLOCATION)/MicrosoftVisualC+willinsertadditionaldeclarationsimmediatelybeforethepreviousline.#endif/!defined(AFX_DLG_H_37F5060C_6D8B_42F0_90D9_FBA754BAD52B_INCLUDED_)(2)端口扫描Dig.cpp:#includewstdafx.hwinclude"端口扫描.h"#include"端口扫描Dig.h,'#ifdef_DEBUGdefinenewDEBUG_NEWIndefTHlS_FILEstaticcharTHIS_FILE=_EILE;#endif1/mi/mu/mu/CAboutDlgdialogusedforAppAboutclassCAboutDlg:publicCDialogpublic:CAboutDlgO;/DialogData/(AFX-DATA(CAboutDlg)enumIDD=IDD,B0UTB0X;/AFX.DTA/ClassWizardgeneratedvirtualfunctionoverrides/AFX_VIRTUAL(CAboutDlg)protected:virtualvoidDoDataExchange(CDataExchange*pDX);/DDX/DDVsupport/AFX_VIRTUAL/Implementationprotected:/(AFXJiSG(CAboutDlg)/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg::CAboutDlgO:CDialog(CAboutDlg::1DD)(/AFX_DATA_INIT(CAboutDlg)/AFX_DATA_INIT)voidCAboutDlg::DoDataExchange(CDataExchange*pDX)(CDialog::DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAP1Beginjiessagejiap(CAboutDig,CDialog)/AFX_MSG_MAP(CAboutDlg)/Nomessagehandlers/AFX_MSG_MAPEND_MESSAGE_MAP()1/Illlllllllllllllimilizillliziimziizilllllllllliziizilllllllll/CMyDlgdialogCMyDlg:CMyDlg(CWnd*pParent/*=NULL*/):CDialog(CMyDlg:IDD,PParenl)在对话框的构造函数中初始化成员变量/AFX_DATANlT(CMyDlg)/AFX_DATA_INIT/NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32m_hlcon=AfxGetApp()->Loadlcon(IDR_M/INFRAME);m_PColUnInS=newCStringList;ASSERT(m_pColumns);m_bSinglePort=true;m_nMaxAttempts=1;m_pStatusList=newCPtrList;ASSERT(m_pStatusList);)voidCMyDlg::DoDataExchange(CDataExchange*pDX)CDialog::DoDataExchange(pDX);DDX_Control(pDX, DDX_Control(pDX, DDX_Control(pDX, DDX_Control(pDX, DDX_Control(pDX, DDX_Control(pDX, DDX_Control(pDX, DDX_Control(pDX, DDX_Control(pDX, /AFX_DATA_MAP )/AFX_DATA_MAP(CMyDlg)IDC.PROGRESS1,m.cProgress);IDC_LIST1,m.cReslt);IDC_IPADDRESS1,m_cIP);IDC_EDIT4_ATTEMPTS,m_cAttempts);IDC_EDIT3_SINGLE_PORT_TO,m.cPortTo);IDC_EDIT2_SINGLE_P0RT_FR0M,m_cPortFrom);IDC_EDIT1_SINGLE_PORT,m_cSingIePort);IDC_BUTT0N2_ST0P,m_cBtnStop);IDC_BUTTON1_START,m_cBtnScan);Beginjiessagejiap(CMyDIg,CDiaIOg)/AFX_MSG_MAP(CMyDlg)on_wm_syscommand()on_wm_paint()ON_W_QUERYDRAGICON()ON_BN_CL1CKED(IDC_BUTTON1_START,OnButtonlStart)ON_BN_CLICKED(1DC_BUTTON2_STOP,0nButton2Stop)ON_BN_CL1CKED(1DC_BUTTON3_SAVE,0nButton3Save)0N_BN_CLICKED(IDC_RADI01_SINGLE,OnRadiolSingle)ON_BN_CL1CKED(IDC_RADI02_RANGE,OnRadio2Range)/AFX_MSG_MAPENDJiESSAGEJWO/CMyDlgmessagehandlersBOOLCMyDlg::OnInilDialog()设置按钮的初始状态和列表框的风格(CDialog::OnlnitDialogO;/Addwbout.”menuitemtosystemmenu./IDM_ABOUTBOXmustbeinthesystemcommandrange.assert(idnlboutbox&OxFFFO)=idm_aboutbox);ASSERTdDNLABOUTBOX<OxFOOO);CMenu*pSysMenu=GetSysteniMenu(FALSE);if(pSysMenu!=NULL)CStringStrAboutMenu;StrAboutMenu.LoadString(1DS_AB0UTB0X);if(!strAboutMen.IsEmptyO)(pSysMenu->ppendMenu(MFSEPARATOR);pSysMenu->ppendMenu(MF_STRING,1DM_ABOUTBOX,StrAboutMenu);1)/Settheiconforthisdialog.Theframeworkdoesthisautomatically/whentheapplication'smainwindowisnotadialogSetIcon(m_hlcon,TRUE);/SetbigiconSetIcon(m_hlcon,FALSE);/Setsmallicon/TODO:Addextrainitializationhere给列表框加标题栏AddHeader(Jr(WIP地址");/加一列标题栏字符AddHeader(_T("端口号");AddHeader(Jr("端口状态");AddHeader(_T("尝试连接次数");AdclHeader(_T("标记");ShowHeaders();设置扫描单个端口CheckRadioButton(II)C-RADlOl-SINGLE,IDC_RADI02_RANGE,IDC_RADI01_SINGLE);设置控件的默认状态m_cSingIePort.EnableWindowO;m_cPortFrom.EnabIeWindow(faIse);m_cPortTo.EnableWindow(false);m_cBtnStop.Enab1eWindow(false);m_cAttempts.SetWindowText(_T(,'1");returnTRUE;/returnTRUEunlessyousetthefocustoacontrol)voidCMyDlg::OnSysConunand(UlNTnID,LPARAMIParam)if(nID&OxFFFO)=1DM.BOUTBOX)CAboutDlgdIgAbout;dIgAbout.DoModal();1elseCDialog:OnSysConimand(nlD,IParam);1)/Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow/todrawtheicon.ForMECapplicationsusingthedocument/viewmodel,/thisisautomaticallydoneforyoubytheframework.voidCMyDlg::OnPaint()if(IsIconicO)CPaintDCde(this);/devicecontextforpaintingSendMessage(WM_ICONERASEBKGND,(WPARAM)de.GetSafeHdcO,0);/Centericoninclientrectangleintcxlcon=GetSystemMetrics(SM_CXICON);intcylcon=GetSystemMetrics(SM_CYICON);CRectrect;GetClientRect(ftrect);intx=(rect.WidthO-cxlcon+1)/2;inty=(rect.HeightO-cylcon+1)/2;/Drawtheiconde.Drawlcon(xty,m_hlcon);1elseCDialog:OnPaintO;1)/Thesystemcallsthistoobtainthecursortodisplaywhiletheuserdrags/theminimizedwindow.HCURSORCMyDlg::OnQueryDragIconOreturn(HCURSOR)m_hlcon;)voidCMyDlg::OnButtonlStartO/"扫描"按钮/TODO:AddyourcontrolnotificationhandlercodehereCStringbtnTxt,IP;UINTnSinglePort;BYTEfl,f2,f3,f4;TCHARtemp10="0w;m_cProgress.SetPos(O);m_cResult.DeleteAllItemsO;POSITIONp=m_pStatusList->GetHeadPosition();while(p)(POSITIONtemp=p;DATA*pNode=(DT*)m_pStatusList->GetNext(p);m-pStatusList->Removet(temp);if(pNode)/pNode!=nul1deletepNode;)if(m_cIP.IsBlankO)MeSSageBOx("请输入主机IP地址");return;if(m_cIP.GetAddress(fl,f2,f3,f4)<4)MeSSageBOx("请输入有效的IP地址");return;IP=.itoa(f1,temp,10);IP+=.T(,.,);IP+=_itoa(f2,temp,10);IP+jT('.');IP+=_itoa(f3,temp,10);IP+=.T(,.,);IP+=_itoa(f4,temp,10);m_cBtnStop.EnableWindowO;m_cBtnScan.Enab1eWindow(false);if(m_bSingIePort)CStringport;m_cSingIePort.GetWindowText(port);m_minPort=m_maxPort=nSinglePort=atoi(port);elseCStringportl,port2;m_cPortFrom.GetWindowText(port1);m_cPortTo.GetWindowText(port2);m_minPort=atoi(portl);m_maxPort=atoi(port2);m_cProgress.SetRange32(0,m_maxPornPort+1);m_cProgress.SetStep(I);)if(!m_bSinglePorl&&m_maxPort<m_minPort)(MeSSageBOXCJ("您输入的端口围有误,请重新输入");return;)UINTm_nMaxAttempts=GetDlgItemlnt(IDC_EDIT4_ATTEMPTS);for(m_nCounter=m_minPort;m_nCounter<=m_maxPort;m_nCounter+)(BOOLblspen=false;UINTnAttempt=l;while(nAttempt<=m_nMaxAttempts&&!blspen)(TCHARtemp10="0"CStringStr=Jr("尝试连接端口:");str+=itoa(m_nCounter,temp,10);str+=Jr(IIP地址为=");str+=IP;str+=Jr(I尝试次数为二);str+=itoa(nAttempt,temp,10);CStatic*pStatic=(CStatic*)GetDlg!tem(IDC_STATIC_STATUS);pStatic->SetWindowText(str);str.EmptyO;bIsOpen=TestConnection(IP,m_nCounter);if(bisOpen)(DATA*pNode=newDATA;ASSERT(pNode);strcpy(pNode->IPddress,IP.GetBufferdP.GetLengthO);strcpy(pNode->port,_itoa(m_nCounter,temp,10);pNode->bStatus=1;/openpNode->nttepts=nAttempt;m_pStatusList->AddTail(pNode);nttempt+;if(IbIsOpen)(DATA*pNode=newDATA;ASSERT(pNode);strcpy(pNode->IPAddress,IP.GetBufferdP.GetLength();strcpy(pNode->port,_itoa(m_nCounter,temp,10);pNode->bStatus=0;/closepNode->nAttempts=nAttempt-l;m-pStatusList->AddTail(pNode);MSGmessage;if(:PeekMessage(&message,NULL,0,0,PM_REMOVE):TranslateMessage(essage);:DispatchMessage(&message);)m_cProgress.StepItO;CStatic*pStatic=(CStatic*)GetDlgItem(IDC_STATIC_STATUS);PStatiC->SetWindowText(CString)_T("当前扫描状态”);m_cBtnScan.EnableWindowO;m_cBtnStop.Enab1eWindow(false);UINTnlndex=;POSITIONpos=m_pStatusList->GetHeadPosition();while(pos)DATA*pNode=(DT*)m_pStatusList->GetNext(pos);AddItern(nlndex,0,pNo加->IPAddress);AddItem(nlndex,1,pNode->port);if(pNode->bStatus)AddItem(nIndex,2,_T(ffOpen");Addltem(nlndex,4,_T("*");elseAddItem(nlndex,2,_T(ffClose");Addltem(nIndex,4,_T("");AddItern(nlndex+,3,-itoa(pNode->nttempts,temp,10);)voidCMyDlg::0nButton2Stop()/"停止"按钮/TODO:Addyourcontrolnotificationhandlercodeherem_nCounter=m_maxPort+l;m_cBtnStop.EnableWindow(false);m_cBtnScan.EnableWindowO;CStatic*pStatic=(CStatic*)GetDlgltem(IDC_STATIC_STATUS);pStatic->SetWindowText(CString)_T("当前扫描状态”);)voidCMyDlg::0nButton3Save()/"保存"按钮/TODO:AddyourcontrolnotificationhandlercodehereCFileDialog*pDlg=newCFileDialog(FALSE,.T(wtxt"),NULL,OFNj)VEKYRlTEPROMPTOFN_EXPLOREROFbLLONGNAMES,_T(WScannedportsfiles(*.txt)"),this);ASSERT(pDlg);if(pDlg->DoModalO=IDOK)(intnHandle,retVal;nHandle=_open(pDlg->GetPathName(),_O_BINARY_O_CREAT|_O_TRUNCL(LRDIVR);if(nHandle=-l)(MessageBox(_T("Unabletoopenoutputfiletowrite."),_T("Error',).MB_OKIMB_ICONEXCLAMATION);deletepDlg;return;)POSITIONpos=m_pStatusList->GeLHeadPositionO;while(pos)(CStringbuffer;DATA*pNode=(DATA*)m_pStatusList->GetNext(pos);buffer=pNode->IPAddress;buffer+=-T(',;buffer+=pNode->port;bffer+=-T('/);if(pNode->bStatus)buffer+=_T(ffOpentf);elsebuffer+=_T(wClosew);buffer+=_T("rnO");retVal=_write(nHandle,(void*)buffer.GetBuffer(buffer.GetLengthO),buffer.GetLengthO);if(retVal!=buffer.GetLengthO)(MessageBox(_T("Anerroroccuredwhilewritingrecords.,'),-TCfErrorw),MB_OKMBCONEXeLAMATIoN);deletepDlg;return;)buffer.EmptyO;)_close(nHandle);)deletepDlg;1voidCMyDlg::OnRadiolSingleO/TODO:Addyourcontrolnotificationhandlercodeherem_bSinglePort=true;m_cSinglePort.EnableWindowO;m_cPortFrom.EnableWindow(false);m_cPortTo.EnableWindow(false);m_cBtnStop.Enab1eWindow(fa1se);1voidCMyDlg::OnRadio2RangeO/TODO:Addyourcontrolnotificationhandlercodeherem_bSinglePort=false;m_cSingIePort.EnableWindow(false);m_cPortFrom.EnableWindowO;m_cPortTo.EnableWindowO;m

    注意事项

    本文(计算机网络课程设计 端口扫描 实验报告材料.docx)为本站会员(李司机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开