#sql-server #database-server #mssql #sql #networking

mssql-browser

Rust 实现的 SQL Server 解析协议

2 个版本

0.1.1 2020 年 9 月 30 日
0.1.0 2020 年 4 月 6 日

#1312数据库接口

MIT/Apache

56KB
989

mssql-browser — 最新版本

Rust 实现的 SQL Server 解析协议

SQL Server 解析协议允许找到当前网络中运行 MSSQL 服务器的端点信息。

SQL Server 解析协议 (SSRP) [MC-SQLR] 是一种简单的应用级协议,用于在客户端和数据库服务器发现服务之间传输请求和响应。为了确定特定数据库实例的通信端点信息,客户端向特定机器发送单个请求并等待单个响应。为了在网络中枚举数据库实例并获取每个实例的端点信息,客户端向网络广播或多播一个请求,并等待来自网络中不同发现服务的响应。

SQL Server 解析协议适用于在网络或本地连接可用的情况下检索数据库端点信息或进行数据库实例枚举。

使用方法

要使用 mssql-browser,首先将其添加到您的 Cargo.toml 中

[dependencies]
mssql-browser = "0.1"

然后您可以通过使用语句在您的模块中使用不同的类型和方法

use mssql_browser::{ 
  browse, browse_host, browse_instance, browse_instance_dac
};

示例

以下是一些获取 MSSQL 服务器实例端点信息的不同方法。查看 文档 获取每个找到的实例返回的字段列表。

发现网络中实例的端点信息

use std::net::{ IpAddr, Ipv4Addr };
use std::error::Error;
use mssql_browser::{ browse, BrowserError };

async fn run() -> Result<(), Box<dyn Error>> {
  let broadcast_addr = IpAddr::V4(Ipv4Addr::BROADCAST);
  let mut iterator = browse(broadcast_addr).await?;
  
  while let instance = iterator.next().await? {
    println!("Found instance {} on host {}.", instance.instance_name, instance.addr);
  }
  
  Ok(())
}

发现主机上实例的端点信息

use std::net::{ IpAddr, Ipv4Addr };
use std::error::Error;
use mssql_browser::{ browse_host, BrowserError };

async fn run() -> Result<(), Box<dyn Error>> {
  let host_addr = IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1));
  let mut iterator = browse_host(host_addr).await?;
  
  while let Some(instance) = iterator.next()? {
    println!("Found instance {}", instance.instance_name);
  }
  
  Ok(())
}

发现特定实例的端点信息

use std::net::{ IpAddr, Ipv4Addr };
use std::error::Error;
use mssql_browser::{ browse_instance, BrowserError };

async fn run() -> Result<(), Box<dyn Error>> {
  let host_addr = IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1));
  let instance = browse_instance(host_addr, "MSSQLSERVER").await?;
  
  if let Some(tcp) = instance.tcp_info {
    println!("Instance is available via TCP on port {}", tcp.port);
  }
 
  if let Some(np) = instance.np_info {
    println!("Instance is available via named pipe {}", np.name);
  }
 
  Ok(())
}

发现 DAC 端点信息

use std::net::{ IpAddr, Ipv4Addr };
use std::error::Error;
use mssql_browser::{ browse_instance_dac, BrowserError };

async fn run() -> Result<(), Box<dyn Error>> {
  let host_addr = IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1));
  let dac_info = browse_instance_dac(host_addr, "MSSQLSERVER").await?;
  
  println!("DAC is exposed on port {}", dac_info.port);
 
  Ok(())
}

依赖项

~1–14MB
~147K SLoC