Voici une version plus complète avec:
1: Affichage des erreurs
2: Résolution URL -> IP (On peut pinguer wanadoo.fr...)
Tester sur un réseau avec 2 PC sous XP SP2 et un poste linux.
Code : Tout sélectionner
Procedure.s ShowError ()
error = GetLastError_ ()
If error
*MyBuffer = AllocateMemory (255)
FormatMessage_ (#FORMAT_MESSAGE_FROM_SYSTEM, #Null, error, 0, *MyBuffer, 255, #Null)
Result.s = "Erreur: " + Str(Error) + " " + PeekS (*MyBuffer)
FreeMemory (*MyBuffer)
ProcedureReturn Result
EndIf
EndProcedure
Procedure.s GetIPByName(ConputerName.s)
If Len(ConputerName) > 0
ResultIP.s=""
high.b = 1: low.b = 1
DefType.w wsaversion
PokeB (@wsaversion, high)
PokeB (@wsaversion + 1, low)
If WSAStartup_ (wsaversion, wsa.WSAData) = #NOERROR ; Try to access Windows sockets stuff...
*host.HOSTENT = gethostbyname_ (ConputerName) ; Get host information for named computer...
If *host <> #Null
While PeekL(*host\h_list + AdressNumber * 4)
IpAddress = PeekL(*host\h_list + AdressNumber * 4)
ResultIP = StrU(PeekB(IpAddress),0)+"."+StrU(PeekB(IpAddress+1),0)+"."+StrU(PeekB(IpAddress+2),0)+"."+StrU(PeekB(IpAddress+3),0)
AdressNumber + 1
Wend
EndIf
WSACleanup_ () ; Close Windows sockets stuff...
EndIf
ProcedureReturn ResultIP
EndIf
EndProcedure
EchoMessage.s = "MVPing make a Ping Test"
ResultSize.l = SizeOf(ICMP_ECHO_REPLY) + Len(EchoMessage)
*Result = AllocateMemory(ResultSize)
*Echo.ICMP_ECHO_REPLY = *Result
If OpenConsole()
ConsoleTitle("MVPing")
Repeat
ConsoleColor(15,0)
Print("Adresse IP: ")
ConsoleColor(10,0)
sIPAdress.s = Input()
PrintN("")
If Len(sIPAdress ) > 0
hFile.l = IcmpCreateFile_()
IPAddress.l=MakeIPAddress(Val(StringField(sIPAdress,1,".")),Val(StringField(sIPAdress,2,".")),Val(StringField(sIPAdress,3,".")),Val(StringField(sIPAdress+".",4,".")))
If IPAdresse = 0
sIPAdress = GetIPByName(sIPAdress)
IPAddress.l=MakeIPAddress(Val(StringField(sIPAdress,1,".")),Val(StringField(sIPAdress,2,".")),Val(StringField(sIPAdress,3,".")),Val(StringField(sIPAdress+".",4,".")))
EndIf
If IPAddress > 0
ConsoleColor(14,0)
For Boucle.l = 1 To 4
If IcmpSendEcho_(hFile, IPAddress, EchoMessage, Len(EchoMessage), 0, *Result, ResultSize, 500) > 0
PrintN("Ping " + sIPAdress + " Octets: " + Str(*Echo\DataSize) + " Temps: " + Str(*Echo\RoundTripTime) + " ms TTL:" + StrU(*Echo\Options\Ttl,#Byte))
Else
PrintN(ShowError())
;MessageRequester("Erreur...",ShowError())
EndIf
Delay(500)
Next
IcmpCloseHandle_(hFile)
Else
PrintN("Impossible de resoudre l'adresse....")
EndIf
EndIf
Until sIPAdress= ""
FreeMemory(*Result)
EndIf
End