ASP.Net写追捕方法

转载 2007年09月18日 15:11:00

 在写程序之间,飞刀还是让大家看看追捕是如何通过IP来判断用户的来源地的(恩恩,现在就要揭揭"追捕"的"老底"了,大家好好听啦)。
如果让您去编写追捕软件的话,我想您首先想到的就是去收集一张IP分配表,并将他们存入数据库以便读取。在追捕软件中,确实存在一张IP分配表,但是这张表在哪儿呢?
呵呵,我们知道在追捕的下载包含两个文件,其一为wry.exe,这是追捕的主程序,其二为wry.dll,注意啦这便是我们辛辛苦苦想找的IP分配表。但是哪种数据文件是以dll结尾呢?dll文件不是动态链接库吗?
不用急,我们接着分析,在使用追捕的过程中发现,程序生成的数据库多为DBF数据库,那么这个wry.dll是否也是FoxPro的数据库?
想到做到,马上将wry.dll改为wry.dbf,然后用Visual FoxPro打开,如图2,呵呵,果然是DBF数据库。它主要包含四个字段Startip(启始IP),Endip(结束IP),Country(IP所在国家或省),Local(用户上网类型)。
^&^ 知道了这些,程序就不难写出来了,一句话,查询数据库。
慢慢,在网络上用MDF数据库,是否有些......
不管三七二十一,将MDF转换成SQL Server再说。
什么!?不会将MDF转换SQL Server?!呵呵,这本杂志是给程序员看的,这些基础的东东,还是先看看其它的书吧,如果再讲这些东东,流浪大哥会骂我骗稿费的:(

实现此功能时,为了程序的可读性,同样使用一个函数来完成:

public string GetIPFrom(string sIP)
{
......
}

在前面程序中得到的IP通常为202.101.96.54这种格式,而在IP分配表中的格式是202.101.096.054,所以最先需要完成的就是对IP各段中不足三位的部分补0。

char[] de={'.'};
string[] aIP = sIP.Split(de);

string SingleIP;
StringBuilder nIPx = new StringBuilder();
int SIPLen;
string strResult = "查不出";
for(int i=0;i<4;i++)
{
SingleIP = aIP[i];
SIPLen = SingleIP.Length;
if(SIPLen<3)
{
for(int j=0;j<3-SIPLen;j++) SingleIP ="0"+SingleIP;
}
aIP[i] = SingleIP;
}

//重新组合成为新的IP
for(int i=0;i<aIP.Length;i++)
{
if(i!=aIP.Length-1)
{
nIPx.Append(aIP[i]+".");
}
else
{
nIPx.Append(aIP[i]);
}
}
string nIP = nIPx.ToString();

nIP便是我们的需要的IP格式。
紧接着,就是在数据库中查找符合所取IP条件的IP段:

string StartIP = nIP.Substring(0,11);
string EndIP = nIP.Substring(12,3);
string dbStartIP,dbEndIP;
Double dblEndIP,dbldbStartIP,dbldbEndIP;

//查询数据库
string strSel = "select * from wry where Left(STARTIP,11)='"+StartIP+"'";
SQLConnection MyConn = new SQLConnection(strConn);
SQLCommand MyComm = new SQLCommand(strSel,MyConn);
MyConn.Open();
SQLDataReader dr;
MyComm.Execute(out dr);
if(dr.Read())
{
//能够查到三段以后的IP
do
{
dbStartIP = dr["STARTIP"].ToString();
dbEndIP = dr["ENDIP"].ToString();
dbStartIP = dbStartIP.Substring(12,3);
dbEndIP = dbEndIP.Substring(12,3);
dblEndIP = Double.Parse(EndIP);
dbldbStartIP = Double.Parse(dbStartIP);
dbldbEndIP = Double.Parse(dbEndIP);
strResult = dr["COUNTRY"].ToString()+dr["LOCAL"].ToString();
if((dbldbStartIPdblEndIP {
break;
}
}
while(dr.Read());
}
else
{
//三段后不存在,查二段
StartIP = nIP.Substring(0,7);
EndIP = nIP.Substring(9,3);
strSel = "select * from wry where Left(STARTIP,7)='"+StartIP+"' order by STARTIP desc";
SQLConnection CloneConn =(SQLConnection) MyConn.Clone();
SQLCommand OComm = new SQLCommand(strSel,CloneConn);
CloneConn.Open();
SQLDataReader Odr;
OComm.Execute(out Odr);
if(Odr.Read())
{
dbStartIP = Odr["STARTIP"].ToString();
dbStartIP = dbStartIP.Substring(9,3);
dbldbStartIP = Double.Parse(dbStartIP);
dblEndIP = Double.Parse(EndIP);
do
{
strResult=Odr["COUNTRY"].ToString()+Odr["LOCAL"].ToString();
if(dbldbStartIP {
break;
}
}
while(Odr.Read());
}
Odr.Close();
CloneConn.Close();
}
dr.Close();
MyConn.Close();

在查询数据库时,飞刀采用的方法是先查前三段匹配的记录,如果没有,再查找前二段匹配的记录。
程序很简单,相信大家能看懂,这里需要意一下的就是,程序中飞刀使用了DataReader而没有使用功能更强大的DataSet,是因为此程序中仅需要读取数据,而不需要对数据库进行修改,删除,所以这时使用DataReader比使用DataSet节约系统资源。

综合上面的程序代码,一个WEB追捕做大功告成,本想将全部代码也贴出来,But这样似乎有骗稿费之嫌,所以还是请大家去我们的站点自行下载吧(http://www.aspcn.com/products/wry/wry.zip)。

测试程序,在本地机上测试,如图3。完了,我主机上的一点小秘密全让大家知道了:(

因为ASP.Net与Visual C#、VC等共用一个.Net对象库,也就是说,只要逻辑上存在可能,那么VC能做到的事情,ASP.Net同样也能做到。也就是说我们这个程序,只要稍加修改,便能做成一个真正的追捕软件,有兴趣的朋友可以自已动手喔。

通过编写这个程序,现在我想不会有人再说"ASP.Net与ASP差不多了"吧。

来源:编程爱好者网站 作者:未知

NOI2007.Day2.T3.追捕盗贼

这道题是看的郑暾大牛的论文《平衡思想》 里面说这道题是树的Search Number问题,有O(n)解法,恰好我这里有数据&标程,一看标程8.5k…… 郑暾大牛给出了一种DP构造解 虽然不是...
  • OrpineX
  • OrpineX
  • 2011年12月17日 10:10
  • 1221

ASP.NET追捕休整版

用,ASP.NET追捕休整版! 这个程序,是前天我买到Visual Studio.NET beta 2 中文版后编写的第一个正式程序,感觉只真是好极了!! 这个追捕的代码参考过飞刀的ASP.N...
  • zgqtxwd
  • zgqtxwd
  • 2008年04月24日 03:50
  • 78

追捕

 [日]西村寿行
  • ddkiller
  • ddkiller
  • 2007年11月17日 13:42
  • 244

网络经典命令行---ping/netstat/tracert

1.最基本,最常用的,测试物理网络的 ping 192.168.0.8 -t ,参数-t是等待用户去中断测试 2.查看DNS、IP、Mac等 A.Win98:winipcfg B....
  • rheostat
  • rheostat
  • 2011年12月18日 15:08
  • 1087

在asp.net中使用自定义事件(带参数)

1.首先定义一个参数类public partial class SayEventArgs : EventArgs...{    public String Username;    public St...
  • baozhenliang
  • baozhenliang
  • 2007年07月03日 12:15
  • 882

编写asp.net接口小结(痛苦的回忆)

由于上司需要,需要编写一个asp.net的小接口。该接口的作用是:接收json数据,经过后台处理(与数据库交互等),产生一个json数据返回过去。。。。 同时这个要求这个接口只能被固定IP访问,拥有比...
  • cloudmaplex
  • cloudmaplex
  • 2013年10月25日 20:41
  • 1516

Asp.net前端页面开发总结

经过半个月的奋斗,善良公社项目书画院前台的web界面竣工了。虽然界面并不是很完美,说明学习的地方还有很多。在界面部分需要的技术:div+css、JavaScript、Ajax、HTML和一般处理程序等...
  • jiuqiyuliang
  • jiuqiyuliang
  • 2014年01月17日 14:02
  • 15532

追捕盗贼

【COCI2007】追捕盗贼 (Standard IO) Time Limits: 3000 ms Memory Limits: 65536 KB Detailed Limits Descri...
  • cyc66
  • cyc66
  • 2015年08月05日 11:55
  • 312

ASP.Net增删查改写的一个通讯录系统---ShinePans

1.开发环境 vs 2013,sqlserver 2012,win 8.1x64,C#语言,.net 4.5 2.更能说明 通讯录人性化的增删查改 3.网页效果...
  • panshang1994
  • panshang1994
  • 2015年06月19日 11:07
  • 2054

asp.net js方法互调 asp.net 前台如何调用后台方法

1. JavaScript函数中执行C#代码中的函数: 方法一:1、首先建立一个按钮,在后台将调用或处理的内容写入button_click中; 2、在前台写一个js函数,内容为document...
  • u011966339
  • u011966339
  • 2017年04月06日 16:21
  • 1188
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ASP.Net写追捕方法
举报原因:
原因补充:

(最多只允许输入30个字)