用ASP.Net写追捕(源程序)

Posted on 2005-07-10 10:41  flourish  阅读(337)  评论(0)    收藏  举报
作者:www.aspcn.com飞刀

<% @ Page Language="C#" %>
<% @ Assembly Name="System.Net" %>
<% @ Import Namespace="System" %>
<% @ Import Namespace="System.Data" %>
<% @ Import Namespace="System.Data.SQL" %>
<% @ Import Namespace="System.Net" %>
<% @ Import Namespace="System.Net.Sockets" %>
<% @ Import Namespace="System.IO" %>
<% @ Import Namespace="System.Text" %>
<Script Language="C#" Runat="Server">

/*
Created By: http://www.aspcn.com 飞刀
Created Date: 2001/5/20
本文已经发表在2001年7月《程序春秋》杂志上,所以各合作站点请不要转载本文。
本文是在5月份写的,因为杂志的原因,到今天才能贴出来,所以所有程序全是在.Net
Framework Beta 1上调试的。现在新出来的Beta 2中是不能通过的。请大家自行修改。
*/

public string strCome = "查不出";
public string strHTTP = "没有HTTP服务";
public string strFTP = "没有FTP服务";
public string strDNS = "没有DNS服务";
public string strTelnet =  "没有Telnet服务";
public string strPOP3 = "没有POP3服务";
public string strSMTP = "没有STMP服务";
public string strSystem = "检测不出";
public string strConn = "server=localhost;uid=sa;pwd=123456;database=aspcn";

public void Page_Load(Object src,EventArgs e)
{
OppSystem.Text = "待命中...";
OppHTTP.Text = "待命中...";
OppFTP.Text = "待命中...";
OppDNS.Text = "待命中...";
OppTelnet.Text = "待命中...";
OppSmtp.Text = "待命中...";
OppPOP3.Text = "待命中...";

OppFrom.Text = "测试中...";

//如果是非POST请求,则在OppFrom控件中显示本机信息
if(!Page.IsPostBack)
{
string LocalHost = DNS.GetHostName();
IPAddress LocalIP = DNS.Resolve(LocalHost);
OppFrom.Text = LocalHost+",就是你啊";
IPHost.Text = LocalIP.ToString();
}
}


public void Hute_Click(Object src,EventArgs e)
{
string strIPHost = IPHost.Text;

//检查地址的有效性,这个也可以用验证控件完成
if(-1==strIPHost.IndexOf("."))
{
OppFrom.Text = "地址无效";
return;
}

//转换为IPAddress实例
IPAddress OppIP = DNS.Resolve(strIPHost);
IPHost.Text = OppIP.ToString();
if(chkHute.Checked == true)
{
OppFrom.Text = GetIPFrom(OppIP.ToString());
}


//检测机器
if(chkMachine.Checked == true)
{
//初始化信息
OppSystem.Text = "测试中...";
OppHTTP.Text = "测试中...";
OppFTP.Text = "测试中...";
OppDNS.Text = "测试中...";
OppTelnet.Text = "测试中...";
OppSmtp.Text = "测试中...";
OppPOP3.Text = "测试中...";


//检查服务
DetectService(OppIP);
//检查特定的端口
DetectPort(OppIP);

//最后显示结果
OppSystem.Text = strSystem;
OppHTTP.Text = strHTTP;
OppFTP.Text = strFTP;
OppDNS.Text = strDNS;
OppTelnet.Text = strTelnet;
OppSmtp.Text = strSMTP;
OppPOP3.Text = strPOP3;

}




}

//DetectPort查端口,以确定有哪些服务
public void DetectService(IPAddress OppIP)
{
//打开联结实例
TCPClient tcp = new TCPClient();

//开始测试HTTP服务

if(0==tcp.Connect(OppIP,80))
{
int OppHTTPStart;
int OppHTTPEnd;
string strHTTPx;
string sendmsg="POST /index.htm HTTP/1.1\r\n";
sendmsg += "Connection: Keep-Alive\r\n\r\n";

Stream sm = tcp.GetStream();
sm.Write(Encoding.Default.GetBytes(sendmsg.ToCharArray()),0,sendmsg.Length);
StreamReader sr = new StreamReader(tcp.GetStream(), Encoding.Default);
    
while (-1 != sr.Peek())
    {
     strHTTPx = sr.ReadLine();
 OppHTTPStart = strHTTPx.IndexOf("Server");
 if(OppHTTPStart!= -1 )
 {
strHTTP = strHTTPx;
break;
 }
    }
tcp.Close();
}

//测试TCP服务
string TestFTP = TcpConnect(OppIP,21);
string TestTelnet = TcpConnect(OppIP,23);
string TestDNS = TcpConnect(OppIP,43);
string TestPOP3 = TcpConnect(OppIP,110);
string TestSMTP = TcpConnect(OppIP,25);

if(TestFTP!="None") strFTP = TestFTP;
if(TestTelnet!="None") strTelnet = TestTelnet;
if(TestDNS!="None") strDNS = TestDNS;
if(TestPOP3!="None") strPOP3 = TestPOP3;
if(TestSMTP!="None") strSMTP = TestSMTP;

}

//取得用户的来源地
public string GetIPFrom(string sIP)
{
//首先对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();
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((dbldbStartIP<dblEndIP)&&(dblEndIP<dbldbEndIP))
{
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<dblEndIP)
{
break;
}
}
while(Odr.Read());
}
Odr.Close();
CloneConn.Close();
}
dr.Close();
MyConn.Close();
return strResult;
}

//检查一些特定的端口,来确定主机的类型
public void DetectPort(IPAddress OppIP)
{
//首先判断是strHTTP中是否有信息
if(strHTTP.IndexOf("Microsoft")!=-1)
{
strSystem = "Windows";
if(strHTTP.IndexOf("IIS")!=-1)
{
strSystem = "Window 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(OppIP,139)!="None")
{
strSystem = "Win98/Me";
}
else if(TcpConnect(OppIP,1433)!="None")
{
strSystem = "Windows NT / 2000";
}
else
{
strSystem = "Windows/Linux/Unix";
}
}
}

//单独联结
public string TcpConnect(IPAddress OppIp,int Port)
{
TCPClient tcp = new TCPClient();
StreamReader sr ;
if(0==tcp.Connect(OppIp,Port))
{
sr = new StreamReader(tcp.GetStream(),Encoding.Default);
return sr.ReadLine();
}
else
{
return "None";
}
tcp.Close();
}
</script>
<html>
<head>
<title>WEB追捕</title>
<style>
td{font-size:9pt}
</style>
</head>
<body bgcolor=#666633>
<form runat="server">
</form>
<table border=1 >
<tr>
<td width="70%">
<table >
<tr><td><asp:TextBox id="IPHost" Width="200" runat="Server" /></td></tr>
<tr><td><asp:Label id="OppFrom" ForeColor="White" runat="Server" /></td></tr>
<tr><td>对方主机情况:</td></tr>
<tr><td><br></td></tr>
<tr><td>对方操作系统:<asp:Label Font-Size=9pt ForeColor="White" id="OppSystem" runat="Server" /></td></tr>
<tr><td>HTTP服务:<asp:Label Font-Size=9pt ForeColor="White" id="OppHTTP" runat="Server" /></td></tr>
<tr><td>FTP服务:<asp:Label Font-Size=9pt ForeColor="White" id="OppFTP" runat="Server" /></td></tr>
<tr><td>Telnet服务:<asp:Label Font-Size=9pt ForeColor="White" id="OppTelnet" runat="Server" /></td></tr>
<tr><td>Smtp服务:<asp:Label Font-Size=9pt ForeColor="White" id="OppSmtp" runat="Server" /></td></tr>
<tr><td>POP3服务:<asp:Label Font-Size=9pt ForeColor="White" id="OppPOP3" runat="Server" /></td></tr>
<tr><td>DNS服务:<asp:Label Font-Size=9pt ForeColor="White" id="OppDNS" runat="Server" /></td></tr>
</table></body>
</html>

博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3