Code archives/Networking/Get integer IP from any hostname EG

This code has been declared by its author to be Public Domain code.

Download source code

Get integer IP from any hostname EG by skn32004
This userlib and single blitz function will return the correct ip address from a given hostname.

That could be:
localhost
www.google.com
MyComputerName

It will return an integer ip which can then be used with udp or the dottedip functions. Being able to use a named address for udp games is extremely helpful.

Another use could be to retrieve a users correct ip from an irc connection. Usualy irc traffic would show the host name. With this function you can resolve the hostname to that users ip.
;userlib    dnsip.decls
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
;requires the following userlib
;.lib " "
;GetIpByHost%(name$)
;
;.lib "Ws2_32.dll"
;Dns_GetHostByName%(name$):"gethostbyname"
;Dns_WSAGetLastError%():"WSAGetLastError"
;
;.lib "kernel32.dll"
;Dns_GetPointer%(a*,b%,c%):"MulDiv"
;Dns_MoveMemory(Destination%,Source%,Length%):"RtlMoveMemory"
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

;bb include    dnsip.bb
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Function GetIpByHost(name$)
	;Function written by Jonathan Pittock 2004
	Local hostent,char,pointer,ip,flag,tempasc
	
	;check for numerical ip
	flag = False
	For pointer = 1 To Len(name$)
		tempasc = Asc(Mid$(name$,pointer,1))
		If tempasc <> 46 And tempasc <> 48 And tempasc <> 49 And tempasc <> 50 And tempasc <> 51 And tempasc <> 52 And tempasc <> 53 And tempasc <> 54 And tempasc <> 55 And tempasc <> 56 And tempasc <> 57
			flag = True
			Exit
		End If
	Next
	
	If flag = False
		off1=Instr(name$,".")
		ip1=Left$(name$,off1-1)
		off2=Instr(name$,".",off1+1)
		ip2=Mid$(name$,off1+1,off2-off1-1)
		off3=Instr(name$,".",off2+1)
		ip3=Mid$(name$,off2+1,off3-off2-1)
		off4=Instr(name$," ",off3+1)
		ip4=Mid$(name$,off3+1,off4-off3-1)
		Return ip1 Shl 24 + ip2 Shl 16 + ip3 Shl 8 + ip4
	Else
		pointer = Dns_GetHostByName(name$)
		Select Dns_WSAGetLastError()
			Case 11001,11002,11003,11004 : Return 0
		End Select
		hostent = CreateBank(20)
		char = CreateBank(4)
		Dns_MoveMemory(Dns_GetPointer(hostent,1,1),pointer,20)
		Dns_MoveMemory(Dns_GetPointer(char,1,1),PeekInt(hostent,12),4)
		Dns_MoveMemory(Dns_GetPointer(char,1,1),PeekInt(char,0),4)
		ip = PeekInt(char,0)
		FreeBank(hostent)
		FreeBank(char)
		Return (((ip And $000000ff) Shr 0) Shl 24) Or (((ip And $0000ff00) Shr 8) Shl 16) Or (((ip And $00ff0000) Shr 16) Shl 8) Or (((ip And $ff000000) Shr 24) Shl 0)
	End If
End Function
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

;Example of usage
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
;include "dnsip.bb"
RuntimeError "www.google.com = "+DottedIP(GetIpByHost("www.google.com")) + Chr$(13)+Chr$(10) + "localhost = " + DottedIP(GetIpByHost("localhost"))
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Comments

Vertex2005
If CountHostIPs("google.com") Then
   Print "IP: "+DottedIP(HostIP(1))
EndIf


Do the same ?or

cu olli


pexe2005
I think so..


Sonari Eclipsi Onimari2007
Any way to kinda reverse this to get the host name via IP?


puki2007
Nope, not without doing a look-up.


bytecode772007
where are the userlibs?


Code Archives Forum