Seite 1 von 1

Computer im LAN auflisten

Verfasst: 12.10.2010 14:51
von STARGÅTE
Tachchen,

um alle Benutzer (Computernamen) im Netzwerk aufzulisten nutze ich derzeit eine abgewandelte Version von PWS32 aus dem Codearchiv:

Code: Alles auswählen

Global NewList LocalNetworkClient.s()

Structure LocalNetwork_ServerInfoItem
  PlatformID.l 
  *Name 
  VersionMajor.l 
  VersionMinor.l 
  Type.l 
  *Comment
EndStructure 

Structure LocalNetwork_ServerInfo
  Item.LocalNetwork_ServerInfoItem[0]
EndStructure

Procedure ExamineLocalNetwork()
  Protected *DataBuffer.LocalNetwork_ServerInfo
  Protected *IP.Long, *HostInfo.HOSTENT 
  Protected Index.i, CurrentDataCount.l, DataCount.l, ResumeHandle.l
  ClearList(LocalNetworkClient())
  If Not NetServerEnum_(0, 101, @*DataBuffer, -1, @CurrentDataCount, @DataCount, $FFFFFFFF, 0, @ResumeHandle) 
    For Index = 1 To CurrentDataCount
      AddElement(LocalNetworkClient())
      LocalNetworkClient() = PeekS(*DataBuffer\Item[Index-1]\Name, #PB_Default, #PB_Unicode)
    Next
    NetApiBufferFree_(*DataBuffer) 
  EndIf
  ResetList(LocalNetworkClient())
EndProcedure

Macro NextLocalNetworkClient()
  NextElement(LocalNetworkClient())
EndMacro


InitNetwork()

ExamineLocalNetwork()
While NextLocalNetworkClient()
  Debug LocalNetworkClient()
Wend
Das funktioniert bei mir (in meinem Netzwerk) auch ganz gut, auch mit verschiedenen Betriebssystemen.
Aber es funktioniert nicht überall.

In einigen LANs hängt er sich bei NetServerEnum_() einfach auf ...
Zudem funktioniert auf diesen Rechnern auch die Eingabeaufforderung: net view nicht.

Was könnten die Gründe dafür sein ? FireWall ? Andere Schutzprogramme ?
Wenn Ja, gibt es vermutlich keine andere Lösung die Nutzer aufzulisten, außer man deaktiviert diese Programme ?

Wäre nett, wenn ihr bei euch einfach mal diesen Code ausführt, und mir berichtet obs geht, oder wenn nicht, woran es liegen könnte.

Danke.

Re: Computer im LAN auflisten

Verfasst: 12.10.2010 17:20
von Stevie63
Hallo,

habe es an meinem Arbeitsplatz probiert:

Bekomme einen ungültigen Speicherzugriff in Zeile 24 (LocalNetworkClient() = PeekS(*DataBuffer\Item[Index-1]\Name, #PB_Default, #PB_Unicode)).

Grüße

Stevie

Re: Computer im LAN auflisten

Verfasst: 12.10.2010 17:50
von NoUser
STARGÅTE hat geschrieben: Wäre nett, wenn ihr bei euch einfach mal diesen Code ausführt, und mir berichtet obs geht, oder wenn nicht, woran es liegen könnte.
Danke.
Geht bei mir ohne Fehler. Ev. läuft es auf div. Systemen nicht korrekt weil ein dazu notwendiger Dienst nicht läuft. Naja... nur so eine Idee.

lg Martin

Re: Computer im LAN auflisten

Verfasst: 12.10.2010 17:58
von man-in-black
kanns vllt auch an der firewall liegen? hab zwar auf dem gebiet kaum erfahrung, weis aber durch eigene versuche, dass die firewall einiges blockiert, obwohl ich die programme eigt freigegeben hab... (nach dem ausschalten der fw gings dann)

is nur n schuss ins blaue :oops:

Re: Computer im LAN auflisten

Verfasst: 12.10.2010 20:15
von freak

Code: Alles auswählen

    For Index = 1 To DataCount
Das ist falsch, es muss heißen:

Code: Alles auswählen

    For Index = 1 To CurrentDataCount
entriesread [out]
A pointer to a value that receives the count of elements actually enumerated.

totalentries [out]
A pointer to a value that receives the total number of visible servers and workstations on the network. Note that applications should consider this value only as a hint.
http://msdn.microsoft.com/en-us/library ... 85%29.aspx

Übrigens ist auch der Typ ".i" falsch für die Parameter, weil das alles nur DWORD (.l) sind.

Re: Computer im LAN auflisten

Verfasst: 13.10.2010 04:09
von PureLust
STARGÅTE hat geschrieben:Wäre nett, wenn ihr bei euch einfach mal diesen Code ausführt, und mir berichtet obs geht, oder wenn nicht, woran es liegen könnte.
Hab mal die von freak beschriebenen Änderungen an Deinem Source vorgenommen und ihn dann so bei mir getestet:

Code: Alles auswählen

Global NewList LocalNetworkClient.s()

Structure LocalNetwork_ServerInfoItem
  PlatformID.l 
  *Name 
  VersionMajor.l 
  VersionMinor.l 
  Type.l 
  *Comment
EndStructure 

Structure LocalNetwork_ServerInfo
  Item.LocalNetwork_ServerInfoItem[0]
EndStructure

Procedure ExamineLocalNetwork()
  Protected *DataBuffer.LocalNetwork_ServerInfo
  Protected *IP.Long, *HostInfo.HOSTENT 
  Protected Index.i, CurrentDataCount.l, DataCount.l, ResumeHandle.l
  ClearList(LocalNetworkClient())
  If Not NetServerEnum_(0, 101, @*DataBuffer, -1, @CurrentDataCount, @DataCount, $FFFFFFFF, 0, @ResumeHandle) 
    For Index = 1 To CurrentDataCount
      AddElement(LocalNetworkClient())
      LocalNetworkClient() = PeekS(*DataBuffer\Item[Index-1]\Name, #PB_Default, #PB_Unicode)
    Next
    NetApiBufferFree_(*DataBuffer) 
  EndIf
  ResetList(LocalNetworkClient())
EndProcedure

Macro NextLocalNetworkClient()
  NextElement(LocalNetworkClient())
EndMacro


InitNetwork()

ExamineLocalNetwork()
While NextLocalNetworkClient()
  Debug LocalNetworkClient()
Wend
Läuft unter WinXP-32Bit und PB4.51-32Bit einwandfrei.

Sehr hilfreicher Code ... thanks for that !!! :allright:

Gruß, PL.