ASP.NET追捕休整版

ASP.NET追捕休整版


作者: 萧寒雪  &;nbsp来自:网络


                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("这个主机无法连接哦!\r\n请重新输入一个正确的吧!","系统提示");
  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.1\r\n" 
    "Connection: Keep-Alive\r\n\r\n";
  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();
  }
 
 
  完整的代码和编译过的程序:http://202.103.224.224/icools/bbs/non-cgi/usr/5_2.zip
 
  记得一定要装 .NET FrameworkSDK beta2
 
  我是初学者,有问题一起研究!
 
  by 萧寒雪(S.F.)
    (2005-8-04:09:38)

 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
 您可能对 [C#] 的这些文章也感兴趣:

采用GDI生成Code39条形码
个性化的分页实例
Visual C# 3.0 新特性概览 (二)
C#编程中的 New 关键词的几种用法
WinForm中的ListBox组件编程
C#和内存指针
谈谈多线程编程(二)- 不变对象
通过.NETFramework访问活动目录(1)
GDI+中常见的几个问题(9)
C#简明教程(五)-数据类型