Impacket mssqlinstance.py
SQL Server Browser に UDP で問い合わせ、インスタンス名、ポート、バージョン、名前付きパイプを列挙します。
| 項目 | 内容 |
|---|---|
| 実装 | examples/mssqlinstance.py |
| カテゴリ | MSSQL / Exchange / MQTT |
| 規模 | 56 行 |
| 配布 | setup.py の scripts=examples/*.py によりスクリプトとしてインストール |
CLI と入力
Section titled “CLI と入力”オプションの最新の定義は python examples/mssqlinstance.py -h で確認できます。
| 引数 | 説明 |
|---|---|
host | target host |
-timeout | timeout to wait for an answer(既定値: 5) |
-debug | Turn DEBUG output ON |
-ts | Adds timestamp to every logging output |
詳細な処理フロー
Section titled “詳細な処理フロー”host と timeout から MSSQL helper を作り、UDP 1434 へ instance discovery packet を送ります。複数 record を区切り文字に従って parse し、instance ごとの property を表示します。
仕組みの詳細
Section titled “仕組みの詳細”SQL Server Browser は UDP 1434 で instance discovery request を受け、 host 上の named instance 情報を区切り付き text record で返します。この コマンドは database login をせず、Browser service の discovery protocol だけを 使って instance 名、version、TCP port、named pipe 等を収集します。
一つの datagram に複数 instance が含まれ、各 record は key/value pair の並びです。 parser は instance separator と field separator を区別し、欠落 fieldや順序変更を 許容して dictionary/table に変換します。既定 instance と named instance では instance name や port field の出方が異なる場合があります。
UDP のため response 欠落は「instance がない」と同義ではありません。Browser service 停止、firewall、packet loss、複数 interface、spoofed response の可能性が あります。timeout を一つの判定材料として表示し、返された host/port を信頼して 自動接続する場合は別途検証します。
主要な実装要素
Section titled “主要な実装要素”| シンボル | 位置 | 責務を追う入口 |
|---|---|---|
| module-level entry | 1 | トップレベルで引数解析と処理を実行 |
Impacket 内部
Section titled “Impacket 内部”| モジュール | 使用する主な名前 |
|---|---|
impacket.examples | logger |
impacket | tds, version |
出力・副作用・必要権限
Section titled “出力・副作用・必要権限”- 照会や認証の試行が中心です。実行回数が多いと監査ログやアカウントロック、対象の負荷に影響します。
失敗経路と後始末
Section titled “失敗経路と後始末”- 入力ファイルがない場合、壊れている場合、読み取りが途中で終わる場合、未対応の形式だった場合を区別します。
実装を変更するとき
Section titled “実装を変更するとき”impacket.tds.MSSQL と UDP socket に依存する小さな CLI です。応答は未認証 datagram なので、欠落 field、重複 field、timeout、不正な区切りを許容して parse してください。
- 構文:
python -m py_compile examples/mssqlinstance.py - CLI:
python examples/mssqlinstance.py -h - このコマンド専用のテストは見つかりません。共有モジュールのテストと、必要に応じて隔離環境での動作確認を選びます。

