Résoudre un nom dns en adresse ip en utilisant ws2_32 (dll winsock)

Contenu du snippet

? GetIp("www.AtoutFox.org")

retourne l'adresse IP d'un nom dns comme www.atoutfox.org en utilisant la DLL winsock

Cordialement

Francis FAURE

Source / Exemple :



  • -------------
  • Résoudre un nom DNS en adresse IP en utilisant WS2_32
  • par Francis FAURE
  • basé sur ressources : Microsoft.com, Fox.wikis.com
  • -------------
  • exemples :
clear ? GetIp("www.AtoutFox.org") ? GetIp("www.foxforum.net") ? GetIp("www.foxprofr.com") ? GetIp("news.atoutfox.org") ? GetIp("xfrx.fr") ? GetIp("www.microsoft.com") ? GetIp("Fox.wikis.com") Function GetIP(p_host) local v_Struct, v_Buffer, v_IP, v_r, v_i p_host = Alltrim(p_host) v_r = "" #DEFINE HOSTENT_SIZE 16 * *
  • -------------
DECLARE INTEGER WSAStartup IN ws2_32 INTEGER wVerRq, STRING lpWSAData if WSAStartup(0x202, Repli(Chr(0),512)) <> 0 v_r = "0.0.0.0, Impossible d'initialiser WinSock (WS2_32.DLL) sur cette machine." wait windows v_r else * DECLARE INTEGER gethostbyname IN ws2_32 STRING host v_Struct = gethostbyname(p_host)
  • -------------
  • analyse
if v_Struct = 0 v_r = "0.0.0.0, host : "+p_host+" résolution IP impossible. Vérifier votre paramètre nom ou vos DNS." wait windows v_r else v_Buffer = Repli(Chr(0), HOSTENT_SIZE) v_IP = Chr(0) + Chr(0) + Chr(0) +Chr(0) * DECLARE RtlMoveMemory IN kernel32 STRING @Destination, INTEGER Source, INTEGER Longueur =RtlMoveMemory(@v_Buffer, v_Struct, HOSTENT_SIZE)
  • on s'intéresse donc au octets 13 14 15 et 16
=RtlMoveMemory(@v_ip, b2dword(SubStr(v_Buffer,13,4)), 4) =RtlMoveMemory(@v_ip, b2dword(v_ip), 4)
  • -------------
  • retour sous forme de chaine
  • -------------
for v_i=1 to 4 v_r = v_r + Alltrim(str(Asc(Substr(v_ip,v_i,1)),3,0))+ Iif(v_i<4,".","") next clear dlls RtlMoveMemory endif * DECLARE INTEGER WSACleanup IN ws2_32 =WSACleanup() clear dlls WSACleanup clear dlls gethostbyname endif clear dlls WSAStartup return v_r
  • -------------
FUNCTION b2dword(p_buffer) RETURN Asc(substr(p_buffer, 1,1)) + Bitlshift(Asc(substr(p_buffer, 2,1)),8) + Bitlshift(Asc(substr(p_buffer, 3,1)),16) + Bitlshift(Asc(substr(p_buffer, 4,1)),24)
  • -------------

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.