Entwickler-Ecke

Datenbanken - Netzwerk nach SQL Server scannen


renekr - Di 25.09.07 18:32
Titel: Netzwerk nach SQL Server scannen
Hallo,
Kennt jemand eine Möglichkeit wie ich das Netzwerk ( Intranet ) scannen kann und die Rechnernamen von SQL Servern rausbekomme ev. als Liste ?

Muss nicht nur mit Delphi sein kann auch per SQL CMD!


ene - Mi 26.09.07 07:00

Hi,

wie wärs mit dem Enterprise Manager?


alzaimar - Mi 26.09.07 07:15

Man kann sich die Server auflisten lassen (API-Call). Die Option beinhaltet auch, nur nach MS-SQL-Servern zu suchen.


mexx - Mi 26.09.07 09:38

Es gibt Port-Scanner, die das Netzwerk nach verfügbaren Ports auf anderen Rechner scannen. Der SQL Server benutz/öffnet mit Sicherheit einen Default-Port. Nachdem kannst Du dann mit dem Port-Scanner suchen. Ich kann Dir leider keine Software nennen. Nutze selbst keine Port-Scanner. Halte das für Hacking-Software. Belastet auch nur unnötig den Traffic in einen Netzwerk.


alzaimar - Mi 26.09.07 09:45

@mexx: Klappt nur, wenn der SQL-Server die TCP/IP-Library verwendet, sonst nicht.

Microsoft selbst verwendet die 'NetServerEnum' Funktion mit dem Parameter 'SV_TYP_SQLSERVER'. Einfach mal in die OH schauen


mexx - Mi 26.09.07 09:51

Aha, wieder was gelernt. :zustimm: Ich arbeite primär mit FireBird, daher meine Vermutung mit dem Port. Vielleicht gibt es ein Tool von Mircosoft, was diesen Scan durchführen kann. :lupe:

Fragen mich allerdings, wozu das gut sein soll? Renekr wird wohl ein kleiner Spion sein? :gruebel:


alzaimar - Mi 26.09.07 09:56

Wenn Du z.B. eine SQL-Manager schreiben willst, oder dem Anwender in einem Konfigurationsdialog den SQL-Server auswählen lässt, ist sowas natürlich sehr komfortabel.

user profile iconmexx hat folgendes geschrieben:
Vielleicht gibt es ein Tool von Mircosoft, was diesen Scan durchführen kann.

Jaha, die API-Funktion "NetServerEnum".


Herby99 - Di 09.10.07 12:43

Hallo,

das gleiche Problem hatte ich bis grade ebenfalls, habe folgende Lösung auf Basis von NetServerEnum gefunden:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
procedure TForm1.cmdUpdateClick(Sender: TObject);
var
  read, total: Integer;
  buf: Pointer;
  tmpbuf: PSERVER_INFO_100;
  i: integer;
  NIL_HANDLE : Integer;
begin
  ComboBox1.Items.BeginUpdate;
  ComboBox1.Clear;
  NetServerEnum(nil100, buf, -1, read, total, SV_TYPE_SQLSERVER, nil, NIL_HANDLE);
  tmpbuf := PSERVER_INFO_100(buf);
  for i:= 1 to read do
  begin
    ComboBox1.Items.Add(WideCharToString(tmpbuf^.sv100_name));
    inc(tmpbuf);
  end;
  ComboBox1.Items.EndUpdate;
  if ComboBox1.Items.Count > 0 then
    ComboBox1.ItemIndex := 0;
  NetApiBufferFree(buf);

end;


Benötigt wird zudem noch die Unit unetmsg.pas (im Anhang).


Herby99 - Di 09.10.07 14:41

Wo wir grade dabei sind, gibt es eine einfache Möglichkeit, sich alle Datenbanken eines Servers anzeigen zu lassen, falls der Zugriff gewährt wird (z.B. über Windows-Authentifizierung)?