Computer im LAN auflisten

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Computer im LAN auflisten

Beitrag 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.
Zuletzt geändert von STARGÅTE am 04.02.2011 13:37, insgesamt 2-mal geändert.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Stevie63
Beiträge: 86
Registriert: 06.05.2009 23:02
Computerausstattung: Win 10, i7, fsc celsius

Re: Computer im LAN auflisten

Beitrag 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
NoUser

Re: Computer im LAN auflisten

Beitrag 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
Benutzeravatar
man-in-black
Beiträge: 362
Registriert: 21.08.2006 17:39

Re: Computer im LAN auflisten

Beitrag 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:
(hab alles, kann alles, weiß alles!!^^)

Bild
freak
PureBasic Team
Beiträge: 766
Registriert: 29.08.2004 00:20
Wohnort: Stuttgart

Re: Computer im LAN auflisten

Beitrag 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.
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Re: Computer im LAN auflisten

Beitrag 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.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Antworten