Seite 1 von 1

IP Suche

Verfasst: 31.12.2008 15:19
von D4uS1
Ich würde gerne endlich mal die Netzwerkprogrammierung kennenlernen und bin auf dem Gebiet noch totaler Anfänger. Ich habe auch gleich eine spezielle Frage.

Wie kann man nach IP-Adressen im GESAMTEN Netzwerk suchen. Der Befehl NextIPAddress gibt bei mir ausschließlich die eigene IP-Adresse aus. Firewalls sind deaktiviert und die Computer können sich in Windows selber finden.

Eine weitere Frage ist wie ich nach Servern suchen kann. Ich vermute das ein Enger Zusammenhang zu den IPs besteht, weswegen ich die erste Frage vorangestellt hab ;) .

PS: Hab die Forensuche bereits benutzt, aber nichts gescheites gefunden.

lg und einen guten Rutsch
D4uS1

Verfasst: 31.12.2008 15:52
von STARGÅTE
im CodeArchiv gibs was, ich habe das selber etwas umgeschrieben:

Code: Alles auswählen

Structure SERVER_INFO_101 
 dwPlatformId.l 
 lpszServerName.l 
 dwVersionMajor.l 
 dwVersionMinor.l 
 dwType.l 
 lpszComment.l 
EndStructure 

#MAX_PREFERRED_LENGTH = -1 
#SV_TYPE_ALL          = $FFFFFFFF 
#NERR_SUCCESS         = 0 
#ERROR_MORE_DATA      = 234 
#MainWindow           = 100 
#MMTB                 = 200 

Global NewList IPinLAN.s()

Procedure GetIPbyName(NameIP.s) 
 TheIPAdress.s 
 pHostinfo = gethostbyname_(NameIP) 
 If pHostinfo
  CopyMemory (pHostinfo, hostinfo.HOSTENT, SizeOf(HOSTENT)) 
  If hostinfo\h_addrtype = #AF_INET 
   While PeekL(hostinfo\h_addr_list+AdressNumber*4) 
    ipAddress = PeekL(hostinfo\h_addr_list+AdressNumber*4) 
    TheIPAdress = StrU(PeekB(ipAddress),0)+"."+StrU(PeekB(ipAddress+1),0)+"."+StrU(PeekB(ipAddress+2),0)+"."+StrU(PeekB(ipAddress+3),0) 
    AddElement(IPinLAN())
    IPinLAN() = TheIPAdress          
    AdressNumber+1 
   Wend 
  EndIf 
 EndIf 
EndProcedure 

; Ermittelt alle Netzwerk IPs
Procedure ExamineNetworkIPs()
 ClearList(IPinLAN())
 IPResult.s 
 se101.SERVER_INFO_101 
 nStructSize = SizeOf(SERVER_INFO_101) 
 RetCode = NetServerEnum_(0, 101, @bufptr, #MAX_PREFERRED_LENGTH, @dwEntriesread, @dwTotalentries, #SV_TYPE_ALL, 0, @dwResumehandle) 
 If RetCode = #NERR_SUCCESS And RetCode <> #ERROR_MORE_DATA 
  For i = 0 To dwEntriesread - 1 
   CopyMemory(bufptr + (nStructSize * i),@se101, nStructSize) 
   Buffer.s=""
   n=0
   While PeekS(se101\lpszServerName+n,1)
    Buffer + PeekS(se101\lpszServerName+n,1)
    n+2
   Wend
   GetIPbyName(Buffer)
  Next i 
 EndIf 
 NetApiBufferFree_(bufptr) 
 ResetList(IPinLAN())
EndProcedure 

; Springt zur nächsten gefundenen IP
Procedure NextNetworkIP()
 ProcedureReturn NextElement(IPinLAN())
EndProcedure

; Gibt die aktuelle IP aus
Procedure.s GetNetworkIP()
 ProcedureReturn IPinLAN()
EndProcedure
Und so erhältst du dann die IPs im LAN

Code: Alles auswählen

InitNetwork()

ExamineNetworkIPs()
While NextNetworkIP()
 Debug GetNetworkIP()
Wend

Verfasst: 31.12.2008 16:51
von D4uS1
Wow das ging schnell!!!!!

:shock:


Vielen Vielen Dank :allright:

Verfasst: 31.12.2008 17:14
von AND51
Hier, bitte sehr, auch noch eine Funktion von mir:

http://www.purebasic.fr/german/viewtopi ... highlight=