Trouver ip du pc + si ossible l'ip des autre pc en réseau ..

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Simon
Messages : 25
Inscription : jeu. 24/févr./2005 20:30

Trouver ip du pc + si ossible l'ip des autre pc en réseau ..

Message par Simon »

Slt à tous

je voudrais savoir comment trouver sa propre ip et en plus celle des autres pc reliés pas le reseau ...

Merci :)
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Pour trouver tes IP (internet et local), ya des fonctions toutes faites.
Pour celles des autres pc, j'c pas.
Peut être lancer des pings ou d'autres cmd réseaux... :?
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

dans la console DOS tu tappe : ipconfig
:D
Simon
Messages : 25
Inscription : jeu. 24/févr./2005 20:30

Message par Simon »

Je c Dobro ça merci ...

Mais lionel_om je veux bien utiliser les fonctions toutes faites mais j'y comprend rein entre : InitNetwork() , ExamineIPAddresse() ,NextIPAddress() , IPString(AdresseIP) .... :(

pourrais tu me donner une piste ... STP :D
fweil
Messages : 505
Inscription : dim. 16/mai/2004 17:50
Localisation : Bayonne (64)
Contact :

Message par fweil »

Simon,

Voici un morceau de code qui répondra peut-être.

En fait on peut facilement énumérer les IP locales avec les fonctions Purebasic, ce qui est repris ici pour l'exemple.

Mais dès qu'on veut connaître l'IP externe ou les IP des postes voisins, c'est plus laborieux.

J'ai donc utilisé ce dont je disposait déjà comme code, et j'ai ajouté un exemple d'utilisation de la fonction API NetServerEnum_(). Par contre je ne suis pas en condition de tester si cela fonctionne bien pour l'instant.

Merci de me dire ce que ça donne de ton côté.

Code : Tout sélectionner

;
; CheckIP
; Local IPs, external IP, and LAN servers and workstations scan giving names and local IPs.
; F.Weil 20050927
;
#NERR_SUCCESS = $0
#NERR_INVALIDCOMPUTER = 2351
#NERR_MOREDATA = $234

#SV_TYPE_WORKSTATION = $00000001 ; All LAN Manager workstations
#SV_TYPE_SERVER = $00000002 ; All LAN Manager servers
#SV_TYPE_SQLSERVER = $00000004 ; Any server running with Microsoft SQL Server
#SV_TYPE_DOMAIN_CTRL = $00000008 ; Primary domain controller
#SV_TYPE_DOMAIN_BAKCTRL = $00000010 ; Backup domain controller
#SV_TYPE_TIMESOURCE = $00000020 ; Server running the Timesource service
#SV_TYPE_AFP = $00000040 ; Apple File Protocol servers
#SV_TYPE_NOVELL = $00000080 ; Novell servers
#SV_TYPE_DOMAIN_MEMBER = $00000100 ; LAN Manager 2.x Domain Member
#SV_TYPE_PRINT = $00000200 ; Server sharing print queue
#SV_TYPE_DIALIN = $00000400 ; Server running dial-in service
#SV_TYPE_XENIX_SERVER = $00000800 ; Xenix server
#SV_TYPE_NT = $00001000 ; Windows NT (either Workstation or Server)
#SV_TYPE_WFW = $00002000 ; Server running Windows for Workgroups
#SV_TYPE_MFPN = $00004000 ; Microsoft file and print for Netware
#SV_TYPE_SERVER_NT = $00008000 ; Windows NT Non-DC server
#SV_TYPE_POTENTIAL_BROWSER = $00010000 ; Server that can run the Browser service
#SV_TYPE_BACKUP_BROWSER = $00020000 ; Server running a Browser service as backup
#SV_TYPE_MASTER_BROWSER = $00040000 ; Server running the master Browser service
#SV_TYPE_DOMAIN_MASTER = $00080000 ; Server running the domain master Browser
#SV_TYPE_WINDOWS = $00400000 ; Windows 95 or later
#SV_TYPE_LOCAL_LIST_ONLY = $40000000 ; Servers maintained by the browser. See the following Remarks section.
#SV_TYPE_DOMAIN_ENUM = $80000000 ; Primary Domain 
#SV_TYPE_ALL = $FFFFFFFF ; All servers

Structure SERVER_INFO_100
  sv100_platform_id.l
  sv100_name.l
EndStructure
  
NewList ServerList.s()

Procedure.s MyIP()
  URL.s = "http://www.whatismyip.com"
  FileName.s = "CheckIP.tmp"
  If URLDownloadToFile_(0, URL, FileName, 0, 0) = #S_OK
      If ReadFile(0, FileName)
          Repeat
            String.s = ReadString()
            If FindString(String, "<h1>", 1)
                iu = FindString(String, "<h1>", 1)
                String = Mid(String, iu + 4, Len(String) - iu - 4 + 1)
                iu = FindString(String, "</h1>", 1)
                String = Mid(String, 1, iu - 1)
                String1.s = ""
                For i = 1 To Len(String)
                  Cod.s = Mid(String, i, 1)
                  If (Cod => "0" And Cod <= "9") Or Cod = "."
                      String1 + Cod
                  EndIf
                Next
            EndIf
          Until Eof(0)
          CloseFile(0)
          DeleteFile(FileName)
      EndIf
      ProcedureReturn String1
    Else
      ProcedureReturn "Can't access to " + URL
  EndIf
EndProcedure

Procedure.l Ansi2Uni(ansi.s)
  size.l=MultiByteToWideChar_(#CP_ACP,0,ansi,-1,0,0)
  Dim unicode.w(size)
  MultiByteToWideChar_(#CP_ACP, 0, ansi, Len(ansi), unicode(), size)
  ProcedureReturn @unicode() 
EndProcedure

Procedure.s Uni2Ansi(*Unicode.l)
  size.l = WideCharToMultiByte_(#CP_ACP, 0, *Unicode, -1, #Null, #Null, #Null, #Null)
  ansi.s=Space(size)
  WideCharToMultiByte_(#CP_ACP, 0, *Unicode, -1, @ansi, size, #Null, #Null)
  ProcedureReturn ansi 
EndProcedure

Procedure.s GetIPbyName(ServerName.s)
  ServerName = ReplaceString(ServerName, "\", "")
  TheIPAddress.s
  pHostinfo = gethostbyname_(ServerName)
  If pHostinfo = 0
      TheIPAddress = "Unable to resolve domain name"
    Else
      CopyMemory (pHostinfo, hostinfo.HOSTENT, SizeOf(HOSTENT))
      If hostinfo\h_addr <> #AF_INET
          TheIPAddress = "A non-IP address was returned."
        Else
          While PeekL(hostinfo\h_list + AdressNumber * 4)
            ipAddress = PeekL(hostinfo\h_list + AdressNumber * 4)
            TheIPAddress + StrU(PeekB(ipAddress), 0) + "." + StrU(PeekB(ipAddress + 1), 0) + "." + StrU(PeekB(ipAddress + 2), 0) + "." + StrU(PeekB(ipAddress + 3), 0) + Chr(10) + Chr(13)
            AdressNumber + 1
          Wend
      EndIf
  EndIf
  ProcedureReturn TheIPAddress
EndProcedure

  
  If InitNetwork()
      ;
      ; Pour voir les IP locales en utilisant les fonctions Purebasic
      ;
      Message.s = ""
      ExamineIPAddresses()
      Repeat
        Result = NextIPAddress()
        If Result <> 0
            Message + IPString(Result) + Chr(10)
          Else
            Break
        EndIf
      ForEver
      MessageRequester("Local IPs", Message, #PB_MessageRequester_Ok)
      ;
      ; Pour récupérer l'IP externe du réseau
      ;
      MessageRequester("External IP", "Your IP address is : " + MyIP(), #PB_MessageRequester_Ok)
      ;
      ; Pour lister les PC accessibles sur le réseau local
      ;
      LocalServerName.s = Space(255)
      gethostname_(@LocalServerName, 255)
      ServerName.SERVER_INFO_100
      ServerName\sv100_platform_id = 0
      ServerName\sv100_name = Ansi2Uni("\\" + LocalServerName)
      Message.s = ""
      Repeat
        Result = NetServerEnum_(Ansi2Uni(""), 100, @ServerName, prefmaxlen = 65536, @entriesread, @totalentries, servertype = #SV_TYPE_ALL, #Null, 0)
        Select Result
          Case #NERR_SUCCESS
            AddElement(ServerList())
            ServerList() = Uni2Ansi(ServerName\sv100_name)
          Case #ERROR_ACCESS_DENIED
            Message + "The user does not have access to the requested information." + Chr(10)
          Case #NERR_INVALIDCOMPUTER
            Message + "The computer name is invalid." + Chr(10)
          Case #ERROR_NO_BROWSER_SERVERS_FOUND
            Message + "No browser servers found." + Chr(10)
          Case #ERROR_MORE_DATA
            Message + "More entries are available with subsequent calls." + Chr(10)
          Default
            Message + "Unknown message" + Chr(10)
        EndSelect
      Until Result <> #NERR_SUCCESS Or entriesread = totalentries ; = #NERR_MOREDATA
      ForEach ServerList()
        Message + ServerList() + " " + GetIPbyName(ServerList()) + Chr(10)
      Next
      MessageRequester("PCs enum", Message, #PB_MessageRequester_Ok)
    Else
      MessageRequester("Error", "Can't open the network", #PB_MessageRequester_Ok)
  EndIf
End
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
Simon
Messages : 25
Inscription : jeu. 24/févr./2005 20:30

Message par Simon »

Bah il y a juste un truc qui ne marche pas chez moi c'est ça :

L.93 CopyMemory (pHostinfo, hostinfo.HOSTENT, SizeOf(HOSTENT))

Message : structure not found (HOSTENT) ...


Voila sinon ça marche bien mais tu pourrais me dire a quoi ser tout les trucs au tout début du genre : #SV_TYPE_WORKSTATION = $00000001

c'est le nom que tu donne a tes Gadgets ou autre ??

et moi non plus je ne suis pas en condition de tester.
fweil
Messages : 505
Inscription : dim. 16/mai/2004 17:50
Localisation : Bayonne (64)
Contact :

Message par fweil »

La structure HOSTENT est bien incluse dans la 3.94. Es-tu à jour ?

Sinon voici le descripteur de la structure :

Structure HOSTENT
h_name.l
h_alias.l
h_addr.w
h_len.w
h_list.l
EndStructure

Pour les constantes en début de programme, j'ai mis le stock de constantes qui peuvent servir pour l'énumération des postes. Mais ici je n'utilise que le type All (#SV_TYPE_ALL) dans la commande NetServerEnum_().

Le reste des constantes peut servir pour filtrer le type de postes que l'on veut recenser.
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
Simon
Messages : 25
Inscription : jeu. 24/févr./2005 20:30

Message par Simon »

ha !!!!! c 'est pour ça j'ai la version 3.93 moi :lol:

sinon merci pour cette astuce mais je peux te recontacter si tu veux dés que le reseau marche bien dans environ 1 semaine ...

Aller ++
fweil
Messages : 505
Inscription : dim. 16/mai/2004 17:50
Localisation : Bayonne (64)
Contact :

Message par fweil »

@Simon,

Ben j'espère bien que tu me diras ce que ça donne et si il faut corriger ou ajoueter des trucs, on le fera ensemble.
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
Répondre