动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
   数据库 → 阅读文章

 利用c#实现对sql server的信息探测

作者来源: 
阅读 3555 人次 , 2006-5-17 11:40:00 

1、原理简述  

  对于SQL Server2000来说,打开SQL Server客户端准备连接,当拉开服务器列表的时候,整个局域网所有的SQL Server服务器都被列出来了。 这是为什么呢?

  原理如下:

  从我自己的机器(192.168.0.1)上从1434端口广播(192.168.0.255)了这个UDP包,然后,整个局域网中的SQL Server服务器都开始响应这个UDP数据包,所有这些都是明文传输的,我们可以很容易探测一个IP地址的1434端口,获得该IP地址上运行的SQL Server的相关信息。  

  这些信息包括:主机名称、实例名称、版本、管道名称以及使用的端口等。这个端口是微软自己使用,而且不象默认的1433端口那样可以改变,1434是不能改变的。  

  2、程序实现  

  下面是一个利用1434进行探测的c#程序,核心代码如下(很简单,呵呵) :

  using System;

  using System.Net.Sockets;

  using System.Net;

  using System.Text;

  using System.Threading;

  namespace ConsoleApplication3

  { 

  class Class1

  {

  //创建一个UDPCLIENT实例

  private static UdpClient m_Client;  

  //LISTEN用来获取返回的信息

  public static string Listen(string hostip)

  {

  string HostIP = hostip;

  IPAddress thisIP = IPAddress.Parse(HostIP);

  IPEndPoint host = new IPEndPoint(thisIP,1434);

  byte [] data = m_Client.Receive(ref host);

  Encoding ASCII = Encoding.ASCII;

  String strData = ASCII.GetString(data);

  return strData;  

  }

  //SEND

  public static void Send(string hostip)

  {

  string HostIP = hostip;

  byte [] buffer = {02};

  //02为要发送的数据,只有02、03、04有回应

  int ecode = m_Client.Send(buffer,1,HostIP,1434);

  //ecode用来返回是否成功发送

  if(ecode <= 0)

  {

  Console.WriteLine("发送时出错:" + ecode);  

  }  

  }

  //对返回的信息的简单的处理

  public static void OutputInfo(string strdata)

  {

  string str = strdata;

  //str.le

  char [] that = {‘;‘,‘;‘};

  string [] strofthis =str.Split(that);

  //int i= 0 ;

  for(int i=0;i
  {

  Console.Write(strofthis[i]);

  Console.Write(‘\n‘);

  }

  

  }

  //输入IP

  public static string InputHostIP()

  {

  Console.Write("enter the ip you want to scan:\n\n");

  string hostip =Console.ReadLine();

  Console.Write(‘\n‘);

  return hostip;

  }

  //EXIT

  public static void Exit()

  {

  Console.WriteLine("if you want to exit ,just input 1\n");

  int a = Console.Read();

  if(a!= 1)

  {

  Console.WriteLine("if you want to exit ,just input 1\n");

  Console.Read();

  }

  else

  {

  }

  }

  [STAThread]

  

  static void Main(string[] args)

  {

  string HostIP;

  HostIP = InputHostIP();

  Console.WriteLine("Begin to send udp to the host");

  m_Client = new UdpClient();

  Send(HostIP);

  string strData=Listen(HostIP);

  OutputInfo(strData);

  Exit();

  }

  }

  }

  3一个典型的返回的信息  

  ServerName;AWEN;

  InstanceName;AWEN;

  IsClustered;No;

  Version;8.00.194;

  tcp;1044; (TCP的端口,可见就算改了端口也是很容易找到的)

  np;\\AWEN\pipe\MSSQL$XHT310\sql\query;
  
 本文Tagsmssql  数据库  C#  
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:新版SQL Server将嵌入下一代视窗
· 下一篇:SQL数据语言的快速入门之三
· MySQL下数据备份系统解决方案
· 如何使Microsoft SQL Server的日志文件不会增大?
· 使用准则进行条件查询--1.3.运行查询前输入参数
· SQL Server 索引(1)
· 在Delphi中的Access技巧集


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077