IP publique

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Fortix
Messages : 559
Inscription : mar. 30/mai/2006 17:03

IP publique

Message par Fortix »

salut à tous, je cherche une astuce pour capturer les adresses publiques
des ordinateurs (la vrai adresse de l'ordinateur et non pas celle du firewall), merci à tous!
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message par wolfjeremy »

Passer par une page php.
Gillou
Messages : 373
Inscription : sam. 28/août/2004 17:35
Localisation : Bretagne, 22
Contact :

Message par Gillou »

Un petit code qui pourra peut-etre aider, j'ai fait ça un peu à l'arrache ;)
ProcedureDLL IsNumber(Text.s) ; Retourne -1 si ce n'est pas un nombre et la valeur sinon
     For a = 0 To 9
        n = n + CountString (text, Str (a))
     Next
     If Len (text) = n
         ProcedureReturn Val (Text)
     Else
         ProcedureReturn - 1
     EndIf
EndProcedure

ProcedureDLL IsIP(IP.s)
     If Val ( StringField (IP, 1, "." )) =< 255 And Val ( StringField (IP, 2, "." )) =< 255 And Val ( StringField (IP, 3, "." )) =< 255 And Val ( StringField (IP, 4, "." )) =< 255
         ProcedureReturn 1
     EndIf
EndProcedure

ProcedureDLL.s SearchIP(txt.s) ; Liste les adresses IP trouvé dans un texte
    n = CountString (txt, "." )
     If n > 2
        l = Len (txt)
         For a=1 To l
             If IsNumber( Mid (txt, a, 1)) >-1
                IPt.s = IPt+ Mid (txt, a, 1)
                c+1
                 If c>3
                    IPt = Right (IPt,3)
                    c = 3
                 EndIf
             ElseIf Mid (txt, a, 1) = "." And c >=1 And c =< 3
                IPf.s = IPf+IPt + "."
                IPt = ""
                t + 1
             Else
                 If t = 3
                    IPf = IPf + IPt
                     If IsIP(IPf) = 0
                         If Val ( StringField (IPf, 1, "." )) > 255 : IPf = Right (IPf, Len (IPf)-1) : EndIf
                         If Val ( StringField (IPf, 4, "." )) > 255 : IPf = Left (IPf, Len (IPf)-1) : EndIf
                     EndIf
                     If IsIP(IPf)
                         If Len (IP.s) = 0 : IP = IPf
                         Else : IP = IP + "|" + IPf
                         EndIf
                     EndIf
                    IPf = ""
                 EndIf
                t = 0
                c = 0
                IPt = ""
                IPf = ""
             EndIf
         Next
         If t = 3
            IPf = IPf + IPt
             If IsIP(IPf) = 0
                 If Val ( StringField (IPf, 1, "." )) > 255 : IPf = Right (IPf, Len (IPf)-1) : EndIf
                 If Val ( StringField (IPf, 4, "." )) > 255 : IPf = Left (IPf, Len (IPf)-1) : EndIf
             EndIf
             If IsIP(IPf)
                 If Len (IP.s) = 0 : IP = IPf
                 Else : IP = IP + "|" + IPf
                 EndIf
             EndIf
            IPf = ""
         EndIf
     EndIf
     ProcedureReturn IP.s
EndProcedure

ProcedureDLL URLDownloadToFile(Url.s,File.s)
  retour= URLDownloadToFile_ (0, Url, File, 0, 0)
   DeleteUrlCacheEntry_ (Url)
   If retour=0 : ProcedureReturn 1 : EndIf
EndProcedure

File.s = "temp.htm"
URLDownloadToFile( "http://www.monip.org/" , File)

If ReadFile (0, File)
    txt.s = ""
     Repeat
         txt+ ReadString (0)
     Until Eof (0)
     If CloseFile (0)
         DeleteFile (File)
     EndIf
    
    IP.s = SearchIP(txt)
    
     Debug txt
     If Len (IP) > 0 : Debug StringField (IP, 1, "|" ) : EndIf
EndIf
Gillou
Messages : 373
Inscription : sam. 28/août/2004 17:35
Localisation : Bretagne, 22
Contact :

Message par Gillou »

Tu as aussi ce code ;)
;
; 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
 
; Structure HOSTENT
; h_name.l
; h_aliases.l
; h_addrtype.w
; h_length.w
; h_addr_list.l
; EndStructure
 
Global 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 (0)
             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
      hostinfo.HOSTENT
       CopyMemory (pHostinfo, @hostinfo, SizeOf(HOSTENT))
       If hostinfo\h_addrtype <> #AF_INET
          TheIPAddress = "A non-IP address was returned."
         Else
           While PeekL (hostinfo\h_addr_list + AdressNumber * 4)
            ipAddress = PeekL (hostinfo\h_addr_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
       Debug "Local IPs : " +Message
       ;
       ; Pour récupérer l'IP externe du réseau
       ;
       Debug "External IP : Your IP address is : " + MyIP()
       ;
       ; 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
       Debug "PCs enum : " +Message
     Else
       MessageRequester ( "Error" , "Can't open the network" , #PB_MessageRequester_Ok )
   EndIf
End
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message par wolfjeremy »

en plus cour lol


Procedure.s OpenURL(Url.s, OpenType.b)
isLoop.b=1
INET_RELOAD.l=$80000000
hInet.l=0: hURL.l=0: Bytes.l=0
Buffer.s= Space (2048 )

hInet = InternetOpen_ ( "PB@INET" , OpenType, #Null , #Null , 0)
hURL = InternetOpenUrl_ (hInet, Url, #Null , 0, INET_RELOAD, 0)

Repeat

Delay (1)
InternetReadFile_ (hURL, @Buffer, Len (Buffer), @Bytes)
If Bytes = 0
isLoop=0
Else
res.s = res + Left (Buffer, Bytes)
EndIf
Until isLoop=0
InternetCloseHandle_ (hURL)
InternetCloseHandle_ (hInet)
ProcedureReturn res
EndProcedure

URL$ = "http://www.hebergeur-allopass.com/ip.php"
HTML$ = OpenURL(URL$, 1)
debut = FindString (HTML$, "<body>IP:" ,1) + 9
fin = FindString (HTML$, "<br>NAV" ,1)
ip.s = Mid (HTML$,debut,(fin - debut))
Comment vous faite pour faire des code aussi long et aussi compliquer :?
Cls
Messages : 620
Inscription : mer. 22/juin/2005 8:51
Localisation : Nantes

Message par Cls »

wolfjeremy a écrit : Comment vous faite pour faire des code aussi long et aussi compliquer :?
La solution la plus simple n'est pas forcément la meilleure ni la plus courte. Leur code n'est pas si compliqué que ca et il permet d'autres fonctionnalités que la récupération d'une adresse IP. (Celui de Gillou est plutôt intéréssant, soit dit en passant)
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message par wolfjeremy »

Cls a écrit : La solution la plus simple n'est pas forcément la meilleure.
Sa je ne dit pas le contraire :wink:
Cls a écrit :Leur code n'est pas si compliqué que ca et il permet d'autres fonctionnalités que la récupération d'une adresse IP.
Le mien permet d'autre possibilité aussi... :wink:
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

wolfjeremy a écrit :en plus cour lol


Procedure.s OpenURL(Url.s, OpenType.b)
isLoop.b=1
INET_RELOAD.l=$80000000
hInet.l=0: hURL.l=0: Bytes.l=0
Buffer.s= Space (2048 )

hInet = InternetOpen_ ( "PB@INET" , OpenType, #Null , #Null , 0)
hURL = InternetOpenUrl_ (hInet, Url, #Null , 0, INET_RELOAD, 0)

Repeat

Delay (1)
InternetReadFile_ (hURL, @Buffer, Len (Buffer), @Bytes)
If Bytes = 0
isLoop=0
Else
res.s = res + Left (Buffer, Bytes)
EndIf
Until isLoop=0
InternetCloseHandle_ (hURL)
InternetCloseHandle_ (hInet)
ProcedureReturn res
EndProcedure

URL$ = "http://www.hebergeur-allopass.com/ip.php"
HTML$ = OpenURL(URL$, 1)
debut = FindString (HTML$, "<body>IP:" ,1) + 9
fin = FindString (HTML$, "<br>NAV" ,1)
ip.s = Mid (HTML$,debut,(fin - debut))
Comment vous faite pour faire des code aussi long et aussi compliquer :?
plutot pas mal, c'est vrai. j'ai vérifié et c'est compatible IE3.0+ de 98 à XP, pas de souci en principe.

pour mon projet RSS j'utilise UrlDownloadToFile_() mais elle ne fonctionne pas sur toute les urls (notamment les url dynamique en php ou autre).

du coup j'ai adapté ta procedure pour faire une commande de téléchargement qui semble fonctionner à merveille.

Code : Tout sélectionner

Procedure.l UrlDownloadToFile(Url.s, Filename.s, BufferSize.l = 2048)
  
  Protected *inet, *file, *buffer
  Protected file.l, Bytes.l, TotalBytes.l
  
  *inet = InternetOpen_("PB@INET", 1, 0, 0, 0) 
  If *inet
    *file = InternetOpenUrl_(*inet, Url, 0, 0, $80000000, 0) 
    If *file
      *buffer = AllocateMemory(BufferSize)
      If *buffer
        file = CreateFile(#PB_Any, Filename)
        If file
          While InternetReadFile_(*file, *buffer, BufferSize, @Bytes) And Bytes
            WriteData(file, *buffer, Bytes) : TotalBytes + Bytes
            Debug TotalBytes
          Wend
          CloseFile(file)
        EndIf
        FreeMemory(*buffer)
      EndIf
      InternetCloseHandle_(*file) 
    EndIf
    InternetCloseHandle_(*inet) 
  EndIf
  
  ProcedureReturn TotalBytes
  
EndProcedure 

;-

Url.s  = "http://www.zdnet.fr/zdnet/feeds/rss/actualites/informatique/logiciels/"
file.s = "c:\rss.xml"

Debug UrlDownloadToFile(Url, file)
Debug RunProgram("notepad", file, "")

;-
Image
Avatar de l’utilisateur
Fortix
Messages : 559
Inscription : mar. 30/mai/2006 17:03

Message par Fortix »

Merci à vous, en voyant vos codes je me dis que je suis loin derrière vous tous, et un seul de ces codes constitut un cours complet, merci encore :D
Avatar de l’utilisateur
Fortix
Messages : 559
Inscription : mar. 30/mai/2006 17:03

Message par Fortix »

merci à tous!
Répondre