Reader's Digest

Digest your Internet

开发手记之实现web.config的快速配置

Written By: dch1 - May• 01•08
问题简述:
   
   在Web开发中,对web.cofig进行配置是非技术人员无法胜任的工作,但是常常需要由客户自己来进行简单配置的时候,需要提供一个有效的工具来指导客户完成这项操作,并且防止无效或错误的更改。
   
  解决方案:
   
   首先,必须了解对系统的配置主要包括machine.config和web.config两个部分,这两个文件本质上是Xml文件,包含了ASP.NET的所有配置信息。因此,对系统的配置,实际上是对Xml文件的操作,因此,我们可以采取对Xml文件的读写操作,来实现快速配置的思路。在此我们主要以web.config为例来说明,Web.config中的各个数据项表示的内容,不是探讨的重点,具体内容可以参考Msdn的说明。
   
   实现的核心代码为:
   
   
   private void btnOK_Click(object sender, System.EventArgs e)
   {
   //定义变量
   string strLocation=txtLocation.Text;
   string strProvider=txtProvider.Text;
   string strMode=txtMode.Text;
   string strUser=txtUser.Text;
   string strDataSource=txtDataSource.Text;
   string strPwd=txtPwd.Text;
   
   string semicolon=”;”;
   
   //操作XML节点
   XmlDocument xmlDoc=new XmlDocument();
   xmlDoc.Load(“myXML.xml”);
   XmlNode xNode=xmlDoc.SelectSingleNode(“//appSettings/add[@key=’oledbConnection1.ConnectionString’]”);
   if(xNode!=null)
   {
   xNode.Attributes[“value”].Value=”Location=”+strLocation+semicolon+”Provider=”+strProvider+semicolon+
   “Mode=”+strMode+semicolon+”User ID=”+strUser+semicolon+”Data Source=”+strDataSource+semicolon+
   “Password=”+strPwd;
   }
   xmlDoc.Save(“myXML.xml”);
   
   MessageBox.Show(“设置成功!”);
   }
   
   
   
  代码中,我们以myXML.xml为例,可以代表其他任何XML的修改。
   
  这些只是简单的一个数据项的操作,更进一步的操作需要继续完善。
   
  在下面的操作界面上,非技术人员就可以很方便的修改其中的各项信息。

检测是否还有黑客代码的asp.net函数

Written By: dch1 - May• 01•08
查询是否还有黑客代码的asp.net函数,非常适合留言簿、bbs、聊天室

<%@ Page language=”vb”%>
<script runat=”server”>
dim heike(2) as string
dim i as integer
‘定义黑客代码
public Sub heikeword(a as string)
heike(0)=”1234″
heike(1)=”125″
dim re as System.Text.RegularExpressions.Regex

for i=0 to 1
re=new System.Text.RegularExpressions.Regex(heike(i))
if(re.Match(a).Success)
response.write (heike(i)+” “)
response.write (“success”)
end if
next
end sub
</script>
<%

dim a as string=”1234345″ ‘就是要检测的内容
heikeword(a)
%>

ASP.NET追捕休整版

Written By: dch1 - May• 01•08
C#第一个正式应用,ASP.NET追捕休整版!
这个程序,是前天我买到Visual Studio.net beta 2 中文版后编写的第一个正式程序,感觉只真是好极了!!

这个追捕的代码参考过飞刀的ASP.NET 追捕的文章,但他文章中是针对.NET 框架beta1的,而BETA2中好多的地方都修改调整了,顺便也给程序增加了列表IP的功能,也就是说主机的多个IP地址都可以列出来的.只是那个根据IP查到IP所在地的功能暂时没做,因为当时我用的机器是朋友的,而手头没有IP数据库:~(

static void Main()
{
Application.Run(new Form1());
}

private void Form1_Load(object sender, System.EventArgs e)
{
string Localhost = System.Net.Dns.GetHostName();
int i = 0;
int n = Dns.Resolve(Localhost.ToString()).AddressList.GetLength(0);
lblIpInfo.Text = Localhost.ToString()+”,就是你啊!”;
txtHostname.Text = Dns.Resolve(Localhost.ToString()).AddressList.GetValue(0).ToString();
lblSystem.Text = “待命中…”;
lblHttp.Text = “待命中…”;
lblFtp.Text = “待命中…”;
lblDns.Text = “待命中…”;
lblTelnet.Text = “待命中…”;
lblSmtp.Text = “待命中…”;
lblPop.Text = “待命中…”;
for(;i<n;i++)
{
IPListbox.Items.Add(Dns.Resolve(Localhost.ToString()).AddressList.GetValue(i).ToString());
}
}

private void cmdExec_Click(object sender, System.EventArgs e)
{
IPAddress theIP;
txtHostname.Focus();
if(txtHostname.Text.Length==0)
{
MessageBox.Show(“您可以输入要追捕的IP或者主机名称!但不能为空”,”系统提示”);
return; //false
}
try
{
int i = 0;
int n = Dns.Resolve(txtHostname.Text.ToString()).AddressList.GetLength(0);
IPListbox.Items.Clear();
for(;i<n;i++)
{
IPListbox.Items.Add(Dns.Resolve(txtHostname.Text.ToString()).AddressList.GetValue(i).ToString());
}
theIP = (IPAddress)Dns.Resolve(txtHostname.Text.ToString()).AddressList.GetValue(0);
lblIpInfo.Text = theIP.ToString();
if(check1.Checked==true)
{//
lblSystem.Text = “检测中…”;
lblHttp.Text = “检测中…”;
lblFtp.Text = “检测中…”;
lblDns.Text = “检测中…”;
lblTelnet.Text = “检测中…”;
lblSmtp.Text = “检测中…”;
lblPop.Text = “检测中…”;
//检查服务
DetectService(theIP);
DetectPort(theIP);
lblSystem.Text = strSystem.ToString();
lblHttp.Text = strHttp.ToString();
lblFtp.Text = strFtp.ToString();
lblDns.Text = strDns.ToString();
lblTelnet.Text = strTelnet.ToString();
lblSmtp.Text = strSmtp.ToString();
lblPop.Text = strPop.ToString();
}

if(check2.Checked==true)
{
//查IP 所在地区,未实现
}
}
catch
{
MessageBox.Show(“这个主机无法连接哦!rn请重新输入一个正确的吧!”,”系统提示”);
txtHostname.Text = “”;
txtHostname.Focus();
lblIpInfo.Text = “无法连接或转换IP,所在地大概是外星球!”;
lblSystem.Text = “待命中…”;
lblHttp.Text = “待命中…”;
lblFtp.Text = “待命中…”;
lblDns.Text = “待命中…”;
lblTelnet.Text = “待命中…”;
lblSmtp.Text = “待命中…”;
lblPop.Text = “待命中…”;
}
return;
}

private void DetectService(IPAddress theIP)
{
string tFtp = TcpConnect(theIP,21); //is ftp service
string tTelnet = TcpConnect(theIP,23); //is Telnet service
string tDns = TcpConnect(theIP,43); //is Dns service
string tPop = TcpConnect(theIP,110); //is Pop3 service
string tSmtp = TcpConnect(theIP,25); //is Mail smtp service
if(tFtp!=”None”)strFtp = tFtp;
if(tTelnet!=”None”)strTelnet = tTelnet;
if(tDns!=”None”)strDns = tDns;
if(tPop!=”None”)strPop = tPop;
if(tSmtp!=”None”)strSmtp = tSmtp;

TcpClient tcp = new TcpClient();
tcp.Connect(theIP,80);
int tHttpStart;
string tHttp;
string tMsg = “POST /index.htm HTTP/1.1rn” +
“Connection: Keep-Alivernrn”;
Stream sm = tcp.GetStream();
sm.Write(Encoding.Default.GetBytes(tMsg.ToCharArray()),0,tMsg.Length);
StreamReader sr = new StreamReader(tcp.GetStream(),Encoding.Default);
while(sr.Peek()!=-1)
{
tHttp= sr.ReadLine();
tHttpStart = tHttp.IndexOf(“Server”);
if(tHttpStart!=-1)
{
strHttp = tHttp;
break;
}
}
tcp.Close();
}

private string TcpConnect(IPAddress theIP,int Port)
{
TcpClient tcp = new TcpClient();
StreamReader sr;
string result;
try
{
checked
{
tcp.Connect(theIP,Port);
sr = new StreamReader(tcp.GetStream().ToString(),Encoding.Default);
result = sr.ReadLine().ToString();
tcp.Close();
}
}
catch
{
result = “None”;
}
return result;
}

private void DetectPort(IPAddress theIP)
{
//is
if(strHttp.IndexOf(“Microsoft”)!=-1)
{
strSystem = “Windows”;
if(strHttp.IndexOf(“IIS”)!=-1)
{
strSystem=”Windows NT/2000″;
if(strHttp.IndexOf(“5.0″)!=-1)
strSystem=”Windows 2000″;
else
strSystem=”Windows NT”;
}
}
else if(strHttp.IndexOf(“Apache”)!=-1)
{
strSystem = “Unix/Linux”;
if(strHttp.IndexOf(“Unix”)!=-1)
strSystem=”Unix”;
}
else
{
if(TcpConnect(theIP,139)!=”None”)
strSystem=”Windows 98/Me”;
else if(TcpConnect(theIP,1433)!=”None”)
strSystem=”Windows NT/2000″;
else
strSystem=”Windows/Linux/Unix”;
}
}

private void IPListbox_SelectedIndexChanged(object sender, System.EventArgs e)
{
lblIpInfo.Text = IPListbox.Text.ToString()+”,所在地查询未实现!”;
txtHostname.Text = IPListbox.Text.ToString();
}

private void button1_Click(object sender, System.EventArgs e)
{
Application.Exit();
}

private void linkLabel1_LinkClicked(object sender, System.Windows.Forms.LinkLabelLinkClickedEventArgs e)
{
linkLabel1.Show();
}

记得一定要装 .NET FrameworkSDK beta2

我是初学者,有问题一起研究!