[][src]Crate mssql_browser

mssql-browser

mssql-browser is a Rust implementation of the SQL Server Resolution Protocol.

The SQL Server Resolution Protocol enables finding endpoint information of MSSQL servers running in the current network.

The SQL Server Resolution Protocol (SSRP) [MC-SQLR] is a simple application-level protocol for the transfer of requests and responses between clients and database server discovery services. To determine the communication endpoint information of a particular database instance, the client sends a single request to a specific machine and waits for a single response. To enumerate database instances in the network and obtain the endpoint information of each instance, the client broadcasts or multicasts a request to the network and waits for responses from different discovery services on the network.

The SQL Server Resolution Protocol is appropriate for retrieving database endpoint information or for database instance enumeration in scenarios where network or local connectivity is available.

Examples

Below are a few different ways to get endpoint information of MSSQL server instances.

Discover endpoint information of instances within network

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(())
}

Discover endpoint information of instances on host

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(())
}

Discover endpoint information of specific instance

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(())
}

Discover DAC endpoint information

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(())
}

Modules

custom_socket

Types and functions related to using a custom socket implementation

Structs

AdspInfo

Contains information about an AppleTalk endpoint

AsyncInstanceIterator

Iterates over the instances returned by browse

BvInfo

Contains information about an Banyan VINES endpoint

DacInfo

Contains information about the DAC endpoint of an instance

InstanceInfo

Information send in a browser protocol response See SVR_RESP

InstanceIterator

Iterates over the instances returned by browse_host

NamedPipeInfo

Information about the named pipe endpoint

RpcInfo

Contains information about an RPC endpoint

SpxInfo

Contains information about an SPX service endpoint

TcpInfo

Information about the Tcp endpoint

ViaAddress

A combination of NIC name and port.

ViaInfo

Information about the Virtual Interface Architecture endpoint

Enums

BrowserError

An error that can be returned from the different browser operations

BrowserProtocolError

Received an unexpected response from the server

BrowserProtocolField

Different fields found in a browser response

BrowserProtocolToken

The value that was expected.

Constants

MAX_INSTANCE_NAME_LEN

Maximum length of an instance name

Functions

browse

Discovers any SQL Server instances running on hosts reached by the given multicast address.

browse_host

Discovers any SQL Server instances running on the given host

browse_instance

Gets information about the given instance.

browse_instance_dac

Gets DAC information about the given instance