IP publique
IP publique
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!
des ordinateurs (la vrai adresse de l'ordinateur et non pas celle du firewall), merci à tous!
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
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
-
- Messages : 1202
- Inscription : sam. 31/déc./2005 23:52
en plus cour lol

Comment vous faite pour faire des code aussi long et aussi compliquer
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))

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 a écrit : Comment vous faite pour faire des code aussi long et aussi compliquer
-
- Messages : 1202
- Inscription : sam. 31/déc./2005 23:52
plutot pas mal, c'est vrai. j'ai vérifié et c'est compatible IE3.0+ de 98 à XP, pas de souci en principe.wolfjeremy a écrit :en plus cour lol
Comment vous faite pour faire des code aussi long et aussi compliquer
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))
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, "")
;-