文档库 最新最全的文档下载
当前位置:文档库 › 如何使用.NET生成C#源代码

如何使用.NET生成C#源代码

如何使用.NET生成C#源代码
如何使用.NET生成C#源代码

怎么使用.NET一个自动生成源代码,配合上一篇文章您就可以使用自己产生代码供自己消费了(上一篇文章请参考:https://www.wendangku.net/doc/d117379324.html,/Develop/read_article.asp?id=34659)。

听起来是不是很爽?有些朋友可能会说这个有点难吧,其实不然。我们工程里面使用了微软提供的CodeDom命名空间,所以可以轻松实现。有关CodeDom的详细信息可以参考MSDN,上面说的非常清楚!我在这里也就不罗索了。连接参考:https://www.wendangku.net/doc/d117379324.html,/library/en-us/cpref/html/frlrfSystemCodeDom.asp?frame=true

本文介绍一个简单的数据访问层的源代码自动生成的实现,所有的代码都是使用hard-code 的方式写的,如果您有兴趣可以使用其他的方法,比如数据库(资源文件)中获得资源,生成源代码,还可以实现一些O-R Mapping的操作。

该文章中的数据访问层中有一个属性一个字段以及一个方法。属性是一个获得连接对象的属性,字段是一个连接对象的私有成员,方法是一个Get方法,得到一个查询结果集。源代码生成以后就象下面这个样子:

using System;

using System.Data;

using System.Data.SqlClient;

namespace Power.Cuike519 {

public class PowerDataAccess {

private SqlConnection m_connection;

public PowerDataAccess() {

}

public virtual SqlConnection Connection {

get {

return this.m_connection;

}

set {

this.m_connection = value;

}

}

public virtual DataSet GetAllAuthors(string s_State) {

try {

if (this.m_connection!=null) {

System.Data.SqlClient.SqlDataAdapter da = new SqlDataAdapter(string.Format("select * from authors where state like '{0}'",s_State),this.m_connection);

System.Data.DataSet ds = new DataSet();

da.Fill(ds);

return ds;

}

else {

return null;

}

}

catch (System.ApplicationException ex) {

throw ex;

}

finally {

this.m_connection.Close();

}

}

}

}

下面看看我们用了什么方法生成这段代码的,为了可以生成该代码我们需要一个工程,我建立了一个Windows应用程序来做这件事情,你也可以使用控制台或者https://www.wendangku.net/doc/d117379324.html,程序将你生成的源代码发布到网络上让更多的人看到。我们在工程里面写了一个方法CreatePowerDataAccessLayer,该方法创建了上面的源代码,下面我们就看看源代码的片断:

首先我们需要一个保存源代码的流,我们使用下面的代码创建流:

Stream codeStream = File.Open("sample.cs", FileMode.Create);

StreamWriter codeWriter = new StreamWriter(codeStream);

接着我们想要编写的是CSharp的代码那么我们就使用CSharpCodeProvider来创建一个代码生成器。

CSharpCodeProvider provider = new CSharpCodeProvider();

ICodeGenerator codeGenerator = provider.CreateGenerator(codeWriter); CodeGeneratorOptions codeGeneratorOptions = new CodeGeneratorOptions();

为了可以让我们的源代码可以正确运行我们使用下面方法为我们的源代码添加命名空间CodeSnippetCompileUnit literal = new CodeSnippetCompileUnit("using System;\nusing System.Data;\nusing System.Data.SqlClient;\n");

codeGenerator.GenerateCodeFromCompileUnit(literal,codeWriter,codeGeneratorOptions);

接着我们就要为我们的源代码设置一个命名空间以及在此命名空间下面创建一个类CodeNamespace codeNamespace = new CodeNamespace("Power.Cuike519");//命名空间名称CodeTypeDeclaration codeTypeDeclaration = new CodeTypeDeclaration(); https://www.wendangku.net/doc/d117379324.html, = "PowerDataAccess"; // 类名

codeTypeDeclaration.IsClass = true;

codeTypeDeclaration.TypeAttributes = TypeAttributes.Public;

codeNamespace.Types.Add(codeTypeDeclaration);

接着我们为该类创建一个构造函数,这里只创建一个默认的构造函数

CodeConstructor codeConstrustor = new CodeConstructor();

codeConstrustor.Attributes = MemberAttributes.Public;

codeTypeDeclaration.Members.Add(codeConstrustor);

接着为我们的类创建一个字段,该字段是私有的,它是SqlConnection类型的名字叫m_connection

CodeMemberField codeMember = new CodeMemberField();

https://www.wendangku.net/doc/d117379324.html, = "m_connection";

codeMember.Attributes = MemberAttributes.Private;

codeMember.Type = new CodeTypeReference("SqlConnection");

codeTypeDeclaration.Members.Add(codeMember);

有了字段我们为该字断添加一个可以操作和读取的属性,我们为它指定set和get方法,同时它是public的,是SqlConnection类型的,如下所示:

CodeMemberProperty codeMemberProperty = new CodeMemberProperty(); https://www.wendangku.net/doc/d117379324.html, = "Connection";

codeMemberProperty.Attributes = MemberAttributes.Public;

codeMemberProperty.Type = new CodeTypeReference("SqlConnection"); codeMemberProperty.GetStatements.Add(new CodeMethodReturnStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(),"m_connection"))); codeMemberProperty.SetStatements.Add(new CodeAssignStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(),"m_connection"),new CodePropertySetValueReferenceExpression()));

codeTypeDeclaration.Members.Add(codeMemberProperty);

为了让我们的类看起来更有用我们使用下面的方法创建一个函数以及函数里面的内容,这里可以一次将函数体写入其中,这里没有这样做的原因是可以提供一个机会,看到微软在该命名空间下提供了其他很多有关源代码中使用的语句的类。

它是public的返回的是DataSet类型的方法的名字叫GetAllAuthors。虽然叫这个名字但是我们还是提供了一个参数,以提供更加灵活的使用空间,同时也为了说明函数中使用参数的方法。

CodeMemberMethod codeMemberMethod = new CodeMemberMethod(); https://www.wendangku.net/doc/d117379324.html, = "GetAllAuthors";

codeMemberMethod.Attributes = MemberAttributes.Public;

codeMemberMethod.ReturnType = new CodeTypeReference("DataSet"); codeMemberMethod.Parameters.Add(new

CodeParameterDeclarationExpression(typeof(string),"s_State"));

为了让我们的源代码更强壮我们使用了try-catch-finnaly语句,就像下面这样:CodeTryCatchFinallyStatement try1 = new CodeTryCatchFinallyStatement();

为了判断我们的m_connection是不是已经初始化了我们使用下面的判断语句来判断:CodeConditionStatement conditionalStatement = new CodeConditionStatement(); conditionalStatement.Condition = new CodeVariableReferenceExpression("this.m_connection!=null");

我们在条件为真的时候希望我们的源代码执行下面的代码:CodeVariableDeclarationStatement variableDeclarationDA = new CodeVariableDeclarationStatement(typeof(System.Data.SqlClient.SqlDataAdapter),"da",new CodeVariableReferenceExpression("new SqlDataAdapter(string.Format(\"select * from authors where state like '{0}'\",s_State),this.m_connection)") );

conditionalStatement.TrueStatements.Add(variableDeclarationDA); CodeVariableDeclarationStatement variableDeclarationDS = new CodeVariableDeclarationStatement(typeof(DataSet),"ds",new CodeVariableReferenceExpression("new DataSet()") );

conditionalStatement.TrueStatements.Add(variableDeclarationDS);

CodeExpression invokeExpression = new CodeMethodInvokeExpression(new CodeTypeReferenceExpression("da"),"Fill", new CodeVariableReferenceExpression("ds") ); CodeExpressionStatement expressionStatement = new CodeExpressionStatement( invokeExpression );

conditionalStatement.TrueStatements.Add(expressionStatement);

conditionalStatement.TrueStatements.Add(new CodeV ariableReferenceExpression("return ds"));

而在假的时候执行下面的语句:

conditionalStatement.FalseStatements.Add(new CodeVariableReferenceExpression("return null"));

接着我们把if语句添加到try语句中间,就像下面这样:

try1.TryStatements.Add(conditionalStatement);

同时我们使用下面的方法把try语句添加到我们的方法里面:

codeMemberMethod.Statements.Add(try1);

接着就是我们遇到异常的时候希望抛出异常信息,代码如下:

CodeCatchClause catch1 = new CodeCatchClause("ex", new CodeTypeReference("System.ApplicationException"));

catch1.Statements.Add(new CodeVariableReferenceExpression("throw ex") );

try1.CatchClauses.Add( catch1 );

接着就是需要回收资源的代码,我们在这里将连接关闭(其实应该先检查状态再关闭,虽然SqlDataAdapter不需要显式的关闭,但是如果加上判断写在这里也没有什么错)

try1.FinallyStatements.Add( new CodeVariableReferenceExpression("this.m_connection.Close()"));

codeTypeDeclaration.Members.Add(codeMemberMethod);

下面就可以将代码生成了

codeGenerator.GenerateCodeFromNamespace(codeNamespace,codeWriter,codeGeneratorOptions );

在最后不要忘了关闭资源

codeWriter.Close();

codeStream.Close();

以太网常用抓包工具介绍_464713

v1.0 可编辑可修改 i RTUB_105_C1 以太网常用抓包工具介绍 课程目标: 课程目标1:了解常见抓包软件 课程目标2:掌握根据需要选择使用抓包软件并分析报文

v1.0 可编辑可修改 目录 第1章以太网常用抓包工具介绍.............................................................................................................. 1-1 1.1 摘要 ................................................................................................................................................ 1-1 1.2 简介 ................................................................................................................................................ 1-1 1.3 抓包工具介绍 ................................................................................................................................ 1-2 1.4 Sniffer使用教程 .......................................................................................................................... 1-3 1.4.1 概述 ..................................................................................................................................... 1-3 1.4.2 功能简介 ............................................................................................................................. 1-3 1.4.3 报文捕获解析 ..................................................................................................................... 1-4 1.4.4 设置捕获条件 ..................................................................................................................... 1-8 1.4.5 报文放送 ........................................................................................................................... 1-10 1.4.6 网络监视功能 ................................................................................................................... 1-12 1.4.7 数据报文解码详解 ........................................................................................................... 1-14 1.5 ethreal的使用方法 .................................................................................................................... 1-28 1.5.1 ethreal使用-入门 ......................................................................................................... 1-28 1.5.2 ethereal使用-capture选项 ......................................................................................... 1-30 1.5.3 ethereal的抓包过滤器 ................................................................................................... 1-31 1.6 EtherPeekNX ................................................................................................................................ 1-35 1.6.1 过滤条件设置 ................................................................................................................... 1-35 1.6.2 设置多个过滤条件 ........................................................................................................... 1-41 1.6.3 保存数据包 ....................................................................................................................... 1-45 1.6.4 分析数据包 ....................................................................................................................... 1-47 1.6.5 扩展功能 ............................................................................................................................. 1-1 1.6.6 简单分析问题的功能 ......................................................................................................... 1-5 1.6.7 部分解码功能 ..................................................................................................................... 1-9 1.6.8 案例 ..................................................................................................................................... 1-1 1.7 SpyNet ............................................................................................................................................ 1-1 1.7.1 使用简介 ............................................................................................................................. 1-1 1.7.2 使用步骤: ......................................................................................................................... 1-2 i

IGMP及抓包分析

IGMP IGMP 是Internet Group Management Protocol(互联网组管理协议)的简称。它是TCP/IP 协议族中负责IP 组播成员管理的协议,用来在IP 主机和与其直接相邻的组播路由器之间建立、维护组播组成员关系。 到目前为止,IGMP 有三个版本: 1、IGMPv1(由RFC 1112 定义) 2、IGMPv2(由RFC 2236 定义) 3、IGMPv3(由RFC 3376定义) 一、IGMPv1 1.1报文格式 1、版本: 版本字段包含IGMP版本标识,因此设置为1。 2、类型: 成员关系查询(0x11) 成员关系报告(0x12) 3、校验和 4、组地址: 当一个成员关系报告正被发送时,组地址字段包含组播地址。 当用于成员关系查询时,本字段为0,并被主机忽略。 1.2组成员加入过程 当一个主机希望接收一个组播组的数据,则发送成员加入报告给组播组。

IGMPv1 join包如下: 1.3查询与响应过程 路由器RTA(IGMP查询器)周期性地(默认60秒)向子网内所有主机(224.0.0.1代表子网内所有主机)发送成员关系查询信息。

所有主机收到IGMPv1成员关系查询信息,一主机首先向组播组发送IGMPv1成员关系报告。 组的其他成员监听到报告后抑制自己的成员关系报告发送。 1.4 抑制机制 当主机收到IGMP成员关系查询时,对它已经加入的每个组播组启动一个倒计数报告计时器。各个报告计时器初始值为从0到最大响应之间一个随机数,默认值是10秒。 计时器到时的主机则主动发送成员关系报告,目的地为该主机所属的组地址。 其它主机收到该成员关系报告,则抑制成员关系报告的发送,并删除计时器。 1.5 组成员离开过程 主机“默不作声”地离开组(不发送报告了)。 路由器发送成员关系查询信息。 路由器没有收到该组的IGMP报告,则再发送成员关系信息(3次查询周期过后)。 组播组超时,剪枝。 二、IGMPv2 2.1报文格式 1、类型 成员关系查询(0x11) 常规查询:用于确定哪些组播组是有活跃的,即该组是否还有成员在使用,常规查询地址由全零表示; 特定组查询:用于查询某具体组播组是否还有组成员。 版本2成员关系报告(0x16) 版本1成员关系报告(0x12) 离开组消息(0x17)

第6章 控件与用户窗体代码【超实用VBA】

第6章控件与用户窗体 范例67 文本框只能输入数值 Private Sub TextBox1_KeyPress(ByVal KeyANSI As MSForms.ReturnInteger) With TextBox1 Select Case KeyANSI Case Asc("0") To Asc("9") Case Asc("-") If InStr(1, .Text, "-") > 0 Or .SelStart > 0 Then KeyANSI = 0 End If Case Asc(".") If InStr(1, .Text, ".") > 0 Then KeyANSI = 0 Case Else KeyANSI = 0 End Select End With End Sub Private Sub TextBox1_Change() Dim i As Integer Dim Str As String With TextBox1 For i = 1 To Len(.Text) Str = Mid(.Text, i, 1) Select Case Str Case ".", "-", "0" To "9" Case Else .Text = Replace(.Text, Str, "") End Select Next End With End Sub

范例68 限制文本框的输入长度 Private Sub TextBox1_Change() TextBox1.MaxLength = 6 End Sub 范例69 验证文本框输入的数据 Private Sub CommandButton1_Click() With TextBox1 If (Len(Trim(.Text))) = 15 Or (Len(Trim(.Text))) = 18 Then Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) = .Text Else MsgBox "身份证号码错误,请重新输入!" End If .Text = "" .SetFocus End With End Sub 范例70 文本框回车自动输入 Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) Dim r As Integer r = Cells(Rows.Count, 1).End(xlUp).Row With TextBox1 If Len(Trim(.Text)) > 0 And KeyCode = vbKeyReturn Then Cells(r + 1, 1) = .Text .Text = "" End If End With End Sub 范例71 文本框的自动换行 Private Sub UserForm_Initialize() With TextBox1 .WordWrap = True

抓包工具演示

Wireshark抓包软件简单使用 wireshark是一款抓包软件,比较易用,在平常可以利用它抓包,分析协议或者监控网络。 一、抓包使用简单过程: Wireshark启动界面: 看到启动界面后,现在主要会用到这几个按钮:

2.点击“开始”获取抓取结果(抓取到的为未加密数据)

4.显示结果:

加密数据抓取: 抓取结果:

二、捕捉过滤器使用方法: Protocol(协议): 可能的值: ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp and udp. 如果没有特别指明是什么协议,则默认使用所有支持的协议。 Direction(方向): 可能的值: src, dst, src and dst, src or dst 如果没有特别指明来源或目的地,则默认使用“src or dst”作为关键字。 例如,”host 10.2.2.2″与”src or dst host 10.2.2.2″是一样的。 Host(s): 可能的值:net, port, host, portrange. 如果没有指定此值,则默认使用”host”关键字。 例如,”src 10.1.1.1″与”src host 10.1.1.1″相同。 Logical Operations(逻辑运算): 可能的值:not, and, or. 否(“not”)具有最高的优先级。或(“or”)和与(“and”)具有相同的优先级,运算时从左至右进行。 例如,

“not tcp port 3128 and tcp port 23″与”(not tcp port 3128) and tcp port 23″相同。“not tcp port 3128 and tcp port 23″与”not (tcp port 3128 and tcp port 23)”不同。 例子: tcp dst port 3128 //捕捉目的TCP端口为3128的封包。 ip src host 10.1.1.1 //捕捉来源IP地址为10.1.1.1的封包。 host 10.1.2.3 //捕捉目的或来源IP地址为10.1.2.3的封包。 ether host e0-05-c5-44-b1-3c //捕捉目的或来源MAC地址为e0-05-c5-44-b1-3c的封包。如果你想抓本机与所有外网通讯的数据包时,可以将这里的mac地址换成路由的mac 地址即可。 src portrange 2000-2500 //捕捉来源为UDP或TCP,并且端口号在2000至2500范围内的封包。 not imcp //显示除了icmp以外的所有封包。(icmp通常被ping工具使用) src host 10.7.2.12 and not dst net 10.200.0.0/16 //显示来源IP地址为10.7.2.12,但目的地不是10.200.0.0/16的封包。 (src host 10.4.1.12 or src net 10.6.0.0/16) and tcp dst portrange 200-10000 and dst net 10.0.0.0/8 //捕捉来源IP为10.4.1.12或者来源网络为10.6.0.0/16,目的地TCP端口号在200至10000之间,并且目的位于网络10.0.0.0/8内的所有封包。 src net 192.168.0.0/24 src net 192.168.0.0 mask 255.255.255.0 //捕捉源地址为192.168.0.0网络内的所有封包。

wireshark抓包分析实验报告

Wireshark抓包分析实验 若惜年 一、实验目的: 1.学习安装使用wireshark软件,能在电脑上抓包。 2.对抓出包进行分析,分析得到的报文,并与学习到的知识相互印证。 二、实验内容: 使用抓包软件抓取HTTP协议通信的网络数据和DNS通信的网络数据,分析对应的HTTP、TCP、IP协议和DNS、UDP、IP协议。 三、实验正文: IP报文分析: 从图中可以看出: IP报文版本号为:IPV4 首部长度为:20 bytes 数据包长度为:40 标识符:0xd74b 标志:0x02 比特偏移:0 寿命:48 上层协议:TCP 首部校验和:0x5c12 源IP地址为:119.75.222.18 目的IP为:192.168.1.108

从图中可以看出: 源端口号:1891 目的端口号:8000 udp报文长度为:28 检验和:0x58d7 数据长度:20 bytes UDP协议是一种无需建立连接的协议,它的报文格式很简单。当主机中的DNS 应用程序想要惊醒一次查询时,它构造一个DNS查询报文段并把它给UDP,不需要UDP之间握手,UDP为报文加上首部字段,将报文段交给网络层。

第一次握手: 从图中看出: 源端口号:56770 目的端口号:80 序列号为:0 首部长为: 32 bytes SYN为1表示建立连接成功当fin为1时表示删除连接。

第二次握手: 从图中看出: 源端口号是:80 目的端口号为:56770 序列号为:0 ack为:1 Acknowledgement为1表示包含确认的报文Syn为1表示建立连接。

第三次握手: 从图中看出: 源端口:56770 目的端口:80 序列号为:1 ACK为:1 首部长为:20bytes Acknowledgement为1表示包含确认的报文 所以,看出来这是TCP连接成功了 Tcp是因特网运输层的面向连接的可靠的运输协议,在一个应用进程可以开始向另一个应用进程发送数据前,这两个进程必须先握手,即它们必须相互发送预备文段,建立确保传输的参数。

DNS抓包分析

TCP/IP原理与应用课程作业一对DNS域名系统的抓包分析 姓名:XXX 学号:XXXXXXXXXX 学院:计算机科学与工程

一、实验目的 通过网络抓包试验,深刻理解TCP/IP协议簇中DNS域名系统的使用方式与报文具体格式与含义,加强对课程的理解与应用。 二、相关原理 2.1 DNS的定义 DNS 是域名系统(Domain Name System) 的缩写,它是由解析器和域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。其中域名必须对应一个IP地址,而IP地址不一定有域名。域名系统采用类似目录树的等级结构。域名服务器为客户机/服务器模式中的服务器方,它主要有两种形式:主服务器和转发服务器。将域名映射为IP地址的过程就称为“域名解析”。在Internet上域名与IP地址之间是一对一(或者多对一)的,域名虽然便于人们记忆,但机器之间只能互相认识IP地址,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,DNS就是进行域名解析的服务器。DNS 命名用于Internet 等TCP/IP 网络中,通过用户友好的名称查找计算机和服务。当用户在应用程序中输入DNS 名称时,DNS 服务可以将此名称解析为与之相关的其他信息,如IP 地址。因为,你在上网时输入的网址,是通过域名解析系统解析找到了相对应的IP地址,这样才能上网。其实,域名的最终指向是IP。 2.2 DNS的构成 在IPV4中IP是由32位二进制数组成的,将这32位二进制数分成4组每组8个二进制数,将这8个二进制数转化成十进制数,就是我们看到的IP地址,其范围是在0~255之间。因为,8个二进制数转化为十进制数的最大范围就是0~255。现在已开始试运行、将来必将代替IPv4的IPV6中,将以128位二进制数表示一个IP地址。 2.3 DNS的查询 DNS查询可以有两种解释,一种是指客户端查询指定DNS服务器上的资源记录(如A记录),另一种是指查询FQDN名的解析过程。 一、查询DNS服务器上的资源记录 您可以在Windows平台下,使用命令行工具,输入nslookup,返回的结果包括域名对应的IP地址(A记录)、别名(CNAME记录)等。除了以上方法外,还可以通过一些DNS查询站点如国外的国内的查询域名的DNS信息。 二、FQDN名的解析过程查询 若想跟踪一个FQDN名的解析过程,在Linux Shell下输入dig www +trace,返回的结果包括从跟域开始的递归或迭代过程,一直到权威域名服务器。 2.4 DNS的报文格式 DNS报文的首部:

C++ MFC各控件代码练习例子

void CMy122Dlg::OnButton1open() { m_OPEN.EnableWindow(false ); //EnableWindow()方法可以使按钮失效 MessageBox("已打开"); m_CLOSE.EnableWindow(true ); } void CComboboxDlg::Onmony() { UpdateData(TRUE); CString str,strmoy; strmoy.Format("%d",m_money); str="你确定要将"; str+=strmoy; str+="元打入对方账户?"; if (IDOK==MessageBox(str,"提示",MB_ICONQUESTION|MB_OKCANCEL)) { MessageBox("付款成功","提示",MB_ICONASTERISK); } } 控制显示的文本利用成员函数SetWindowText/GetWindowText 用于设置/得到当前显示的文本。 通过GetLimitText/SetLimitText 可以得到/设置在输入框中输入的字符数量。 输入框几种常用的消息映射宏: ON_EN_CHANGE 输入框中文字更新后产生 ON_EN_ERRSPACE 输入框无法分配内存时产生 ON_EN_KILLFOCUS / ON_EN_SETFOCUS 在输入框失去/得到输入焦点时产生 在创建滚动条后需要调用void SetScrollRange( int nMinPos, int nMaxPos, BOOL bRedraw = TRUE )设置滚动范围, int GetScrollPos( )/int SetScrollPos( )用来得到和设置当前滚动条的位置。 void ShowScrollBar( BOOL bShow = TRUE );用来显示/隐藏滚动条。 BOOL EnableScrollBar( UINT nArrowFlags = ESB_ENABLE_BOTH )用来设置滚动条上箭头是否为允许状态。nArrowFlags 可取以下值: ESB_ENABLE_BOTH 两个箭头都为允许状态 ES_DISABLE_LTUP 上/左箭头为禁止状态 MessageBox("这个是自定义的消息!!!" ,"自定义消息对话框!!!",MB_ICONINFORMATION); MB_ABORTRETRYIGNORE 显示终止重试或忽然按钮 MB_OK 显示确定按钮 MB_RETRYCANCEL 显示确定或取消按钮 MB_YESNO 显示重试或取消按钮 MB_YESNOCANCEL 显示是或否按钮 MB_ICONQUESTION 带问号图标 MB_ICONHAND 、MB_ICONSTOP 、MB_ICONERROR 三种都是带叉号图标 MB_ICONEXCLAMA TION 、MB_ICONW ARNING 两种都是带感叹号图标 MB_ICONASTERISK MB_ICONINFORMA TION 带信息号图标 AfxMessageBox()函数缺点就无法设置消息对话框的标,提示消息框的标题与工程名称相同, 优点:就是在动态链接库工程或其它工程中,可以直接用它来显示消息提示对话框。 MessageBox()函数必须用于一个窗口对象,没有窗口对象,就无法调用MessageBox()函数

WIN8系统抓包工具使用介绍

抓包过程简要说明 对于工程上某些需要确认网管下发到设备上的数据或者设备上报给网管的数据正确性,需要对网卡进行数据抓包分析。现将详细的抓包方法进行说明(此版本抓包工具可用于windows server2003、WIN7和windows server2008操作系统上,其他的没试用过) 说明: windows server2008操作系统有两种,一种32位,一种64位。 查看操作系统位数的方法有两种(输入命令后可能会等待5~20s时间): 1、运行---输入“cmd”---在命令提示符窗口中输入“systeminfo”---找到其中的“System type:(系统类型)”对应的就是了。 2、运行DXDIAG就可以查看系统位数了。x86代表32位,X64代表64位! 该抓包工具根据操作系统位数有以下区别,x86为32位操作系统,x64为64位操作系统。本文档以32位操作系统为例进行说明。 步骤一:将附件的netmon_34.rar解压到任何位置,例如D:\ 步骤二:运行D:\netmon_3\ NM34_x86.exe文件,执行安装,步骤中全部选择默认安装即可。安装完成后,桌面会生成Microsoft Network Monitor 3.4的快捷图标。 步骤三:双击运行Microsoft Network Monitor 3.4,在菜单栏选择Tools->Options..可以看到下面的面板,在Faster Parsing上点击右键选择Create->Create From Selected,

步骤四:在Create New Parser Profile面板中可以自己命名Name(本例中命名为fiberhome_set,可自定义), 并选中路径列表中的第2项,然后选择Open Folder,

802.11抓包分析

802.11抓包分析 1.实验目的 分析802.11协议,了解802.11的帧格式 2.实验环境及工具 操作系统:ubuntu 实验工具:WireShark 3.实验原理 (1)802.11MAC层数据帧格式: Bytes 2 2 6 6 6 2 0-2312 4 Bits 2 2 4 1 1 1 1 1 1 1 1 Version:表明版本类型,现在所有帧里面这个字段都是0 Type:指明数据帧类型,是管理帧,数据帧还是控制帧,00表示管理帧,01表示控制帧,10表示数据帧 Subtype:指明帧的子类型 ,Data=0000,Data+CF-ACK=0001,Data+CF-Poll=0010, Data+CF-ACK+CF-Poll=0011,Nulldata=0100,CF-ACK=0101, CF-Poll=0110,Data+CF-ACK+CF-Poll=0111,QoS Data=1000, Qos Data+CF-ACK=1001,QoS Data+CF-Poll=1010, QoS Data+CF-ACK+CF-Poll=1011,QoS Null =1100, QoS CF-ACK=1101,QoS CF-Poll=1110,QoS Data+CF-ACK+CF-Poll=1111 To DS/From DS:这两个数据帧表明数据包的发送方向,分四种情况: 若数据包To DS为0,From DS为0,表明该数据包在网络主机间传输 若数据包To DS为0,From DS为1,表明该数据帧来自AP

若数据包To DS为1,From DS为0,表明该数据帧发送往AP 若数据包To DS为1,From DS为1,表明该数据帧是从AP发送往AP

实验一 wireshark抓包工具使用

实验一wireshark抓包工具使用[实验目的] 学习wireshark抓包工具的使用 了解wireshark抓包工具的功能 通过学习,进一步理解协议及网络体系结构思想 [实验原理] Wireshark是网络包分析工具。网络包分析工具的主要作用是尝试捕获网络包,并尝试显示包的尽可能详细的情况。 主要应用: 网络管理员用来解决网络问题 网络安全工程师用来检测安全隐患 开发人员用来测试协议执行情况 用来学习网络协议 [实验内容] 下载WIRESHARK,学习工具的使用和功能。

Wireshark 是网络包分析工具。网络包分析工具的主要作用是尝试捕获网络包,并尝试显示包的尽可能详细的情况。 你可以把网络包分析工具当成是一种用来测量有什么东西从网线上进出的测量工具,就好像使电工用来测量进入电信的电量的电度表一样。(当然比那个更高级) 过去的此类工具要么是过于昂贵,要么是属于某人私有,或者是二者兼顾。 Wireshark出现以后,这种现状得以改变。 Wireshark可能算得上是今天能使用的最好的开元网络分析软件。 工作流程 (1)确定Wireshark的位置。如果没有一个正确的位置,启动Wireshark后会花费很长的时间捕获一些与自己无关的数据。 (2)选择捕获接口。一般都是选择连接到Internet网络的接口,这样才可以捕获到与网络相关的数据。否则,捕获到的其它数据对自己也没有任何帮助。 (3)使用捕获过滤器。通过设置捕获过滤器,可以避免产生过大的捕获文件。这样用户在分析数据时,也不会受其它数据干扰。而且,还可以为用户节约大量的时间。 (4)使用显示过滤器。通常使用捕获过滤器过滤后的数据,往往还是很复杂。为了使过滤的数据包再更细致,此时使用显示过滤器进行过滤。 (5)使用着色规则。通常使用显示过滤器过滤后的数据,都是有用的数据包。如果想更加突出的显示某个会话,可以使用着色规则高亮显示。 (6)构建图表。如果用户想要更明显的看出一个网络中数据的变化情况,使用图表的 形式可以很方便的展现数据分布情况。

VB控件的使用

VB控件 VB作为可视化的编程,提供了很多控件。控件工具箱在VB程序界面的左边,如下图所示。 一、按钮控件(command),按钮控件主要用来执行某一功能。 每一个控件都有一个名称,在程序里面,我们要通过控件的名称引用该控件。如下图所示,我们在窗体画了一个按钮控件 选中该控件,在属性面板“名称”一行可以看到该按钮控件的名称是“Command1”

按钮控件有很多属性,其中Caption属性的值控制着按钮显示的文字,我们想要改变一个控件的属性的值有两种方法,第一种方法是在属性面板修改,如下图所示: 我们把按钮控件的Caption属性的值改成了“开始”,那么按钮上显示的文字就改为了“开始”,如下图所示: 我们还可以通过写代码的方式改变控件属性的值,假如要把上图按钮上的文字改为“暂停”,除了可以在属性面板修改之外,还可以通过以下代码进行修改: Command1.Caption = "暂停" 代码的格式为:控件名称.控件属性=值

例子: 问题描述:窗体上有一个按钮,初始时按钮文字显示“开始”。当按钮上的文字为“开始”时,点击按钮,按钮文字改变为“暂停”。当按钮上的文字为“暂停”时,点击按钮时改为“开始”。 界面如下: 代码如下:

二、标签控件(label),主要用于显示文本,通常用于显示提示性的文字, 控制标签控件显示文本的是Caption属性的值,我们可以通过属性面板改变该属性的值,也可以通过以下代码改变: Label1.Caption = "Hello World!"。 控制标签控件字体和字号的属性是font,控制其文字颜色的是forecolor属性的值。 例子:利用label控件制作一个欢迎界面,界面如下:

抓包工具使用简介

抓包工具wireshark使用简介 在wireshark安装包安装完成后,以管理员身份运行Wireshark.exe,进入wireshark主界面,如图1-1所示。 图1-1 wireshark主界面 在主界面上,在菜单栏中选择Capture->interface,在点击interface按钮弹出的对话框中点击start按钮,进入如图1-2所示界面。 图1-2启动wireshark 当您在客户端点击某路视频时,会出现如图1-3所示界面,目前我们播放视频采用的是UDP协议,你在抓包工具中看到的大部分数据包都是UDP数据包。此时如果你只想去查看给某台机器上发的数据包时,可以通过过滤条件进行过滤,比如我只想查看我给172.20.32.168这台机器上发送的数据包,那么你只需要在Filter后面输入

ip.dst==172.20.32.168即可,需要注意的是这里是“==”而不是“=”。多个条件之间用&&。 数据过滤操作如图1-4所示。 图1-3 视频数据展示界面 图1-4数据过滤界面 此时你看到的数据包就都是发给172.20.32.168的UDP数据包,此处需要说明的是如果你点击视频时播放不出来视频,那么是不会有持续的UDP数据包发给指定的客户端的,客户端控件播放不出来视频那就不是控件的问题了,因为就根本没有视频数据包发送到客户端。 如果你在抓包时发现有持续的数据包时,那么你想看一下你抓的数据包是否正常,能不能播放出来,那么也可以通过wireshark将抓的数据包保存成文件用VLC播放试一下,具体操作流程如下: (1)点击某条视频数据,右键选择decode as(如图1-5),此时会弹出如图1-6所示界面;(2)在如图1-6所示的界面上选择RTP,点击OK,此时就会把所有的UDP数据包转换成RTP数据包,转换之后界面如图1-7所示; (3)在图1-7所示的界面上,在菜单栏中选择Telephony,在下拉的菜单中选择RTP,在其子菜单中选择Stream analysis,会弹出如图1-8所示界面; (4)在图1-8所示的界面上点击Savepayload按钮,进入视频保存页面(如图1-9),选择你保存的位置并设置保存的视频文件名; (5)此时就会在保存的目录下生成出来对应的视频文件,此处需要说明的是视频文件不

matlab_GUI设计中常用控件格式要点

MATLAB GUI新手备忘录 1、从最简单的开始 编程最基本的目的:就是——我执行一个操作,程序做出一个反应。 “一个操作”包括:点击鼠标,拖动滑块,填写数据,选择选项…… “做出一个反应”包括:计算一些东西,然后储存在哪里,或者贴个图出来,或者显示在哪里……-------------------------------------------------------------------------------------- 编程的基本思想: 目的->当点击按钮A时,然后执行任务C,则->进入按钮A的回调函数callback里,写下任务C的代码。 -------------------------------------------------------------------------------------- a:不知道callback在哪??右键单击按钮,view callbacks->选择callback)别的控件也一样。 a:不同的回调函数啥意思?? callBack 最常用的就是它。如果控件是按钮,那点击按钮时,则按钮下的Callback就会执行;如果是滑块,则拖动滑块时,滑块名下的callback就会执行;总之,就是对控件默认操作时,matlab后台就会自动调用它名下的的callback。正常用途,全放在callback下就够了。如果其他的,实在是想知道,了解一下也未尝不可。 ButtonDownFcn 就是鼠标在它(代指各种控件)上面点击一下,你放在这个函数名下的代码就会执行。(ps:按钮的callback也是点击,所以会覆盖掉这个buttondownfcn。) CreateFcn 顾名思义,在生成这个控件,显示之前,执行你放在这个函数名下的代码; DeleteFcn 一样。在控件要销毁,但是被毁灭之前执行这个函数名下的代码。貌似“真的要退出吗”这一类就是写在这里。 KeyPressFcn 当前控件获得焦点且有按键按下时执行。(什么是焦点?就是这个控件被鼠标点了(或者是tab 轮选到了)。你打开一个记事本,然后再点这个网页,再随便按几个按键,记事本上有字不?没有对吧。因为它没获得焦点,所以你的按键它不会反应的。只有你最后再点它一下,再按几个按键,结果怎么样?有字了吧?)这里的KeyPressFcn也是一样的道理。 一般在这下面的代码还会判断下按键是什么,然后执行相应的代码。 ResizeFcn,SelectionChangeFcn 不常用。也懒得去看了。附几句,控件都有Resize的属性,好像默认是不可调整,如果要用到这个函数,去把它打开先。 SelectionChangeFcn 是在群按钮组件中,改变选择时,所执行的函数。 -------------------------------------------------------------------------------------- 哪些控件支持哪些回调函数?你在它上面右键就可以看到了,点进去就可以编辑了。 可以在property inspect中在需要的回调函数下设置%automatic就可以自动添加相应的回调

数据包抓包分析

数据链路层数据包抓包分析 实验内容 (1)安装Wireshark软件。 (2)掌握抓包软件的使用 (3)掌握通过抓包软件抓取帧并进行分析的办法 实验步骤 (1)常用的抓包软件包括Sniffer、NetXRay、Wireshark (又名EtheReal)。 我们采用免费的Wireshark,可以从https://www.wendangku.net/doc/d117379324.html,或其他网站下载。安装完成后,Wireshark的主界面和各模块功能如下: 命令菜单(command menus):最常用菜单命令有两个:File、Capture。File菜单允许你保存捕获的分组数据或打开一个已被保存的捕获分组数据文件。Capture菜单允许你开始捕获分组。 显示筛选规则(display filter specification):在该字段中,可以填写协议的名称或其他信息,根据此内容可以对分组列表窗口中的分组进行过滤。 捕获分组列表(listing of captured packets):按行显示已被捕获的分组内容,其中包括:Wireshark赋予的分组序号、捕获时间、分组的源地址和目的地址、协议类型、分组中所包含的协议说明信息。在该列表中,所显示的协议类型是发送或接收分组的最高层协议的类型。分组首部明细(details of selected packet header):显示捕获分组列表窗口中被选中分组的头部详细信息。包括:与以太网帧有关的信息,与包含在该分组中的IP数据报有关的信息。如果利用TCP或UDP承载分组, Wireshark也会显示TCP或UDP协议头部信息。最后,分组最高层协议的头部字段也会被显示。 分组内容窗口(packet content):以ASCII码和十六进制两种格式显示被捕获帧的完整内容。(2)下面我们进行抓包练习。 在capture菜单中选中options,可以设置抓包选项,如下图所示,这里我们需要选

抓包工具学习总结

抓包工具学习 一、配置镜像端口方法:(机换器型号:S2008) 方法一: 1、打开串口,把串口线接入交换机端口 2、从串口“选项-会话选项”把“波特率设为9600” 3、按确认键 4、输入system-view 5、输入monitor-port e0/8 //8指的是PC线接到交换机的端口号(如果要撤销该端口使用命令: (undo port mirror Ethernet 0/1 to Ethernet 0/2 observing-port Ethernet 0/8) (undo monitor-port e0/8),如果需查看端口是否成功用该命令:display mirror) 6、port mirror Ethernet 0/1 to Ethernet 0/2 //指的是盒接到交换机1到2之间的端口号都可 以抓包 7、配置完后启动Ethereal抓包 方法二: 可以一次性定义镜像和被镜像端口 port mirror Ethernet 0/1 to Ethernet 0/2 observing-port Ethernet 0/8 //0/1 to Ethernet 0/2被镜像端口号,0/8指PC接到交换机端口号 二、抓包工具如何使用: 1、抓包工具基础功能介绍 从本机上双击Ethereal工具,在工具栏目点击capture->Interfaces选项界面 Packets/s 指的是每秒钟抓包的个数。Packets 指抓包总数量,点击options进入抓包过虑条件页面,Interface 选择本机网卡,IP address 指本机IP;capture packets in promiscuous mods 指的混合模式抓包;capture Filter 指是输入过虑条件;file 指定包存放路径;update list of packets in real time 指抓包过程中“实时更新”;Automatic scrolling in live capture 指以滚动方式显示;Hide capture info dialog 指显示TCP/UDP/ICMP/ARP等信息点击start开始抓包;cancle 退出抓包 2、抓包前过虑使用命令: 在capture->options->capture Filter对应框输入: Host 119.1.1.180 //指的是抓180机顶盒包 Ether host 00:07:63:88:88:08 //在没IP情况下抓盒子包,比如DHCP还未给机顶盒分配到IP时,此时需要抓包 Port 33200 //指指定端口抓包 Port 554 //指rtsp包 Port 123 //指NTP服务器包 (Port 33200 || port 8082 ) && host 119.1.1.180 //指抓33200端口同时也抓8082端口包,同时还抓180盒子包 Host 238.255.2.2 //指抓一个组播流包

相关文档
相关文档 最新文档