Trouvé sur vbfrance.com. Pour Win32. Ne fonctionne qu'avec des IP (pas les noms dns).Option PublicOption Declare'La liste des erreurs pouvant etre retournées !%REM11001 Buffer Too Small 11002 Destination Net Unreachable 11003 Destination Host Unreachable 11004 Destination Protocol Unreachable 11005 Destination Port Unreachable 11006 No Resources 11007 Bad Option 11008 Hardware Error 11009 Packet Too Big 11010 Request Timed Out 11011 Bad Request 11012 Bad Route 11013 TimeToLive Expired Transit 11014 TimeToLive Expired Reassembly 11015 Parameter Problem 11016 Source Quench 11017 Option Too Big 11018 Bad Destination 11032 Negotiating IPSEC 11050 General Failure %END REMPrivate Const IP_STATUS_BASE = 11000Private Const IP_SUCCESS = 0Private Const IP_BUF_TOO_SMALL = (11000 + 1)Private Const IP_DEST_NET_UNREACHABLE = (11000 + 2)Private Const IP_DEST_HOST_UNREACHABLE = (11000 + 3)Private Const IP_DEST_PROT_UNREACHABLE = (11000 + 4)Private Const IP_DEST_PORT_UNREACHABLE = (11000 + 5)Private Const IP_NO_RESOURCES = (11000 + 6)Private Const IP_BAD_OPTION = (11000 + 7)Private Const IP_HW_ERROR = (11000 +

Private Const IP_PACKET_TOO_BIG = (11000 + 9)Private Const IP_REQ_TIMED_OUT = (11000 + 10)Private Const IP_BAD_REQ = (11000 + 11)Private Const IP_BAD_ROUTE = (11000 + 12)Private Const IP_TTL_EXPIRED_TRANSIT = (11000 + 13)Private Const IP_TTL_EXPIRED_REASSEM = (11000 + 14)Private Const IP_PARAM_PROBLEM = (11000 + 15)Private Const IP_SOURCE_QUENCH = (11000 + 16)Private Const IP_OPTION_TOO_BIG = (11000 + 17)Private Const IP_BAD_DESTINATION = (11000 + 18)Private Const IP_ADDR_DELETED = (11000 + 19)Private Const IP_SPEC_MTU_CHANGE = (11000 + 20)Private Const IP_MTU_CHANGE = (11000 + 21)Private Const IP_UNLOAD = (11000 + 22)Private Const IP_ADDR_ADDED = (11000 + 23)Private Const IP_GENERAL_FAILURE = (11000 + 50)Private Const MAX_IP_STATUS = 11000 + 50Private Const IP_PENDING = (11000 + 255)Private Const PING_TIMEOUT = 200 ' nb seconde a attendrePrivate Const WSADESCRIPTION_LEN = 256Private Const WSASYSSTATUS_LEN = 256Private Const WSADESCRIPTION_LEN_1 = WSADESCRIPTION_LEN + 1Private Const WSASYSSTATUS_LEN_1 = WSASYSSTATUS_LEN + 1Private Const SOCKET_ERROR = -1'DeclarationPrivate Type ip_option_information Ttl_And_Tos As Integer Flags_And_OptionsSize As Integer 'Ttl As Integer 'Byte 'duree de vie 'Tos As Integer 'Byte 'Type de service 'Flags As Integer 'Byte 'nb flag 'OptionsSize As Integer 'Byte 'Taille en byte des datas OptionsData As Long 'Pointer vers options dataEnd TypePrivate Type icmp_echo_reply Address As Long 'Retourne l'@ Status As Long 'Retourne IP_STATUS RoundTripTime As Long 'RTT en ms DataSize As Integer 'Retourne la taille des données Reserved As Integer 'Reservé à une utilisation systèem DataPointer As Long 'Pointeur vers la donné retourné Options As ip_option_information 'option de retour Data As String * 250End TypePrivate Type tagWSAData wVersion As Integer wHighVersion As Integer szDescription As String * WSADESCRIPTION_LEN_1 szSystemStatus As String * WSASYSSTATUS_LEN_1 iMaxSockets As Integer iMaxUdpDg As Integer lpVendorInfo As String * 200End TypeDeclare Function IcmpCreateFile Lib "icmp.dll" () As LongDeclare Function IcmpCloseHandle Lib "icmp.dll" (Byval IcmpHandle As Long) As LongDeclare Function WSAStartup Lib "wsock32" (Byval wVersionRequested As Integer, lpWSAData As tagWSAData) As IntegerDeclare Function IcmpSendEcho Lib "icmp.dll" (Byval IcmpHandle As Long, _Byval DestinationAddress As Long, _Byval RequestData As String, _Byval RequestSize As Integer, _RequestOptions As ip_option_information, _ReplyBuffer As icmp_echo_reply, _Byval ReplySize As Long, _Byval Timeout As Long) As LongDeclare Function WSACleanup Lib "wsock32" () As IntegerFunction ConvertIPAddressToLong(strAddress As String) As Long Dim strTemp As String Dim lAddress As Long Dim iValCount As Integer Dim lDotValues(1 To 4) As String strTemp = strAddress iValCount = 0 'Tant qu'il y a des points While Instr(strTemp, ".") > 0 iValCount = iValCount + 1 'ben compte lDotValues(iValCount) = Mid(strTemp, 1, Instr(strTemp, ".") - 1) ' vire le point et convertit strTemp = Mid(strTemp, Instr(strTemp, ".") + 1) Wend iValCount = iValCount + 1 lDotValues(iValCount) = strTemp 'Si il n'y a pas quatre element ben le ping marchera po alors il s'arrete If iValCount <> 4 Then ConvertIPAddressToLong = 0 Exit Function End If 'Hex les 4 valeurs lAddress = Val("&H" & Right("00" & Hex(lDotValues(4)), 2) & _ Right("00" & Hex(lDotValues(3)), 2) & _ Right("00" & Hex(lDotValues(2)), 2) & _ Right("00" & Hex(lDotValues(1)), 2)) ' valeur de retour ConvertIPAddressToLong = lAddressEnd FunctionFunction Ping(IpAddress As String, TTL As Integer) As Integer Dim hFile As Long Dim lRet As Long Dim lIPAddress As Long Dim strMessage As String Dim pOptions As ip_option_information Dim pReturn As icmp_echo_reply Dim iVal As Integer Dim lPingRet As Long Dim pWsaData As tagWSAData strMessage = "Echo cette chaine de donnée" iVal = WSAStartup(&H101, pWsaData) 'Convertit l'adresse ip en long lIPAddress = ConvertIPAddressToLong(IPAddress) 'Ouvre un fichier pour le ping hFile = IcmpCreateFile() 'Met la duréee de vie du ping pOptions.Ttl_And_Tos = TTL 'Fonction qui ping lRet = IcmpSendEcho(hFile, _ lIPAddress, _ strMessage, _ Len(strMessage), _ pOptions, _ pReturn, _ Len(pReturn), _ PING_TIMEOUT) If lRet = 0 Then Error pReturn.Status, "Erreur Ping" If pReturn.Status <> 0 Then Error pReturn.Status, "Erreur Ping (Non terminé)" Ping = pReturn.RoundTripTime lRet = IcmpCloseHandle(hFile) iVal = WSACleanup()End Function[%sig%]