Page 1 sur 1

récupérer les IP via IPconfig et PB

Publié : dim. 23/sept./2012 12:47
par Ar-S
Voilà la v3 de ma proce pour écouter "ipconfig" et récolter les infos
On peut ainsi voir l'utilisation de ProgramRunning(program), AvailableProgramOutput(program)
et ce qui touche à l'écoute de programmes externes. (ipconfig dans ce cas)

Code : Tout sélectionner

  
  Procedure.s MessageRequesterIP(ARS_optionIP=0)
    ; by Ar-S / Sept 2012
    ; Récupération de ma config réseau via IpConfig
    ; ARS_optionIP est facultatif.
    ; 0 est l'équivalent des infos retournées par ipconfig
    ; 1 est l'équivalent des infos retournées par ipconfig /all
    
    Protected.s New,Ligne,Tout
    
    If ARS_optionIP < 0 Or ARS_optionIP > 1
      option$ = ""
    EndIf
    If ARS_optionIP = 1
      option$ = "/all"
    EndIf
    
    Tout.s = ""
    program = RunProgram("ipconfig",option$,"",#PB_Program_Open|#PB_Program_Read|#PB_Program_Hide)
    While ProgramRunning(program)
      If AvailableProgramOutput(program)
        
        Ligne.s =  ReadProgramString(program) +Chr(10)

        If Ligne <> "" And Ligne <> ":" And Ligne <> Chr(10)
          Ligne = Trim (Ligne, Chr(10)) ; retour à la ligne
          Ligne = Trim (Ligne, Chr(58)) ; les 2 points ":"
          
          NbrCar = Len(Ligne)
          DernierCar.s = Mid(Ligne,Len(Ligne)-1,1)
          If DernierCar = Chr(58)
            Ligne + "[Rien]"
          EndIf
          
          Ligne + Chr(10)
          Tout = Tout + Ligne
          
          ; Fitrage des derniers caractères parasites
          New.s = RemoveString(Tout,"ÿ")
          New.s = RemoveString(New,"…")
          New.s = ReplaceString(New,"‚","é")
          New.s = ReplaceString(New,"::",": [Rien]")
          New.s = ReplaceString(New,"“","ô")
        EndIf
      EndIf
    Wend 
    MessageRequester("Resultat IP Config", New,0)
    
  EndProcedure
  
  MessageRequesterIP() ; => ipconfig 
  MessageRequesterIP(1) ; => ipconfig /all



Re: Récupérer les IP via ipconfig

Publié : mar. 05/nov./2013 15:54
par Ar-S
2eme méthode
Les regex.

Code : Tout sélectionner

;Extracteur d'IPpar Ar-S // Sept 2012
;IPCONFIG et les expressions régulières
;NOV 2013
; Filtrage des IP du reseau

Procedure.s GetIP()
; Ar-S

  Shared BilanIP.s
  
    ; L'Expression régulière
    expr$ =   "(([0-9]{1,3}.){3}[0-9]{1,3})"
  ; Explication
  ; ([0-9]{1,3}.){3} signifie qu'il faut qu'il y ait 3 séries 1 à 3 chiffres de 0 à 9 suivi d'un point. 
  ; [0-9]{1,3} suivi d'une dernière série de 1 à 3 chiffres mais sans le point.
  
  exprT$ =   "([A-Za-z]{5,20} )"
     ; Explication
  ; ([A-Za-z]{1,3}.){3} signifie qu'il faut qu'il y ait 3 séries 1 à 3 chiffres de 0 à 9 suivi d'un point. 
  ; [0-9]{1,3} suivi d'une dernière série de 1 à 3 chiffres mais sans le point.
  
   CreateRegularExpression(0,expr$)
   CreateRegularExpression(1,exprT$)
   
   
  Dim result$(0) 
  Dim resultT$(0) 
  
  Contenu.s = ""
  BilanIP.s = ""
  
  program = RunProgram("ipconfig","/all","",#PB_Program_Open|#PB_Program_Read|#PB_Program_Hide)
  While ProgramRunning(program)
    If AvailableProgramOutput(program)
      
      Ligne.s = ReadProgramString(program)
      If FindString( Ligne, "192")
        
        Contenu + Ligne + Chr(10)

      EndIf

    EndIf
  Wend 
  
    NbrTrouve = ExtractRegularExpression(0, Contenu , result$()) ;Extrait les ip dans result()
    ReDim result$(NbrTrouve)
    
    NbrTrouveT = ExtractRegularExpression(1, contenu , resultT$()) ;Extrait les titres dans resultT()
    ReDim resultT$(NbrTrouve)    
        
        
  For i = 0 To NbrTrouve-1
    Titre.s = resultT$(i)
    If LCase( Left(Titre.s,7) ) = "adresse"
        titre = "IP reseau"
        titre + " " + Str(i+1)
     ElseIf   LCase( Left(Titre.s,10) ) = "passerelle"
        titre = "IP Passerelle (routeur/box) : "
    EndIf       
    Passerelle.s = result$(i)
        
    BilanIP + Titre + " : " + Passerelle + Chr(10)
    
  Next
  
  FreeRegularExpression(0)
  FreeRegularExpression(1)
  
  ProcedureReturn BilanIP
EndProcedure

Debug GetIP()
Cette méthode donne moins de détails mais permet de récupérer seulement les IP si besoin.

Re: récupérer les IP via IPconfig et PB

Publié : mar. 05/nov./2013 20:51
par venom
Chez moi, le 1er code me renvoie 2 MessageRequester tout en chinois :lol:

Et l'autre le debug est vide






@++

Re: récupérer les IP via IPconfig et PB

Publié : mar. 05/nov./2013 21:45
par Ar-S
venom a écrit :Chez moi, le 1er code me renvoie 2 MessageRequester tout en chinois :lol:

Et l'autre le debug est vide
@++
Tu les as compilé en PB x64, sinon essaye ?

Re: récupérer les IP via IPconfig et PB

Publié : mar. 05/nov./2013 23:38
par Backup
sujet maintes fois abordé .....
notamment ici ...
http://www.purebasic.fr/french/viewtopi ... g%2F+%2C+1+

mais pas seulement ...

tu es en plein Alzheimer Ar-s ?? :)

Re: récupérer les IP via IPconfig et PB

Publié : mer. 06/nov./2013 18:40
par venom
Idem en x64 ou x86 :wink:






@++

Re: récupérer les IP via IPconfig et PB

Publié : jeu. 07/nov./2013 9:27
par Ar-S
venom a écrit :Idem en x64 ou x86 :wink:
@++
T'as un windows chinois ou bien ?!
tu aurais pas coché gestion de l'unicode dans les options de compilation ? si oui décoche le.

Re: récupérer les IP via IPconfig et PB

Publié : jeu. 07/nov./2013 19:09
par venom
C'est tout de suite un peut plus compréhensible :D
La case était coché mais c'est pas moi j'te le jure :oops: :wink:






@++

Re: récupérer les IP via IPconfig et PB

Publié : jeu. 07/nov./2013 21:04
par GallyHC
Bonjour tous,

En gros ce que je comprend de cela, c'est qu'il n'est pas possible d'avoir les informations en clair (sans bibouille, je veux dire) avec "RunProgram()" si on compile en unicode.... Je trouve cela fort dommage personnelement.

Cordialement,
GallyHC

Re: récupérer les IP via IPconfig et PB

Publié : jeu. 07/nov./2013 22:57
par Ar-S
Je préfère ça ! tu m'as fait stressé.

+1 gally