How to get IP address for connection opened with host name?

Just starting out? Need help? Post your questions and find answers here.
swhite
Addict
Addict
Posts: 805
Joined: Thu May 21, 2009 6:56 pm

How to get IP address for connection opened with host name?

Post by swhite »

Hi

If I use OpenNetworkConnection() with a host name and not an IP Address is it possible to retrieve the IP address after the connection is made and if so how?

Thanks,
Simon
Simon White
dCipher Computing
salutcava
User
User
Posts: 10
Joined: Fri May 03, 2013 10:50 am

Re: How to get IP address for connection opened with host na

Post by salutcava »

Rhello my friend !

Yes it is possible.
Try this out :

Code: Select all

InitNetwork()
hostnom.s="www.purebasic.com"
hostip.s=""
hostport.s = ""
cnx = OpenNetworkConnection(hostnom,80,#PB_Network_TCP|#PB_Network_IPv4)
socket = ConnectionID(cnx)

name.SOCKADDR_IN
namelen.i = SizeOf(SOCKADDR_IN)

Debug getpeername_(socket,@name.SOCKADDR_IN,@namelen)

hostip = IPString(name\sin_addr,#PB_Network_IPv4)
hostport = Str(name\sin_port)

Debug "Resultats : "
Debug "Port : " + hostport
Debug "IP : " + hostip
Bye, have fun my friend !
swhite
Addict
Addict
Posts: 805
Joined: Thu May 21, 2009 6:56 pm

Re: How to get IP address for connection opened with host na

Post by swhite »

Hi

I should have mentioned that I am using Linux.

Simon
Simon White
dCipher Computing
salutcava
User
User
Posts: 10
Joined: Fri May 03, 2013 10:50 am

Re: How to get IP address for connection opened with host na

Post by salutcava »

Np my friend, here is your answer for linux :

http://man7.org/linux/man-pages/man2/getpeername.2.html

Have fun !
swhite
Addict
Addict
Posts: 805
Joined: Thu May 21, 2009 6:56 pm

Re: How to get IP address for connection opened with host na

Post by swhite »

This comes back with the wrong IP address so I assume that I have not configured the structures correctly. The IP address should be 64.191.45.45

Code: Select all

InitNetwork()
hostnom.s="bvddev20.vnkconsultinggroup.com"
hostip.s=""
hostport.s = ""
cnx = OpenNetworkConnection(hostnom,30000,#PB_Network_TCP|#PB_Network_IPv4)
socket = ConnectionID(cnx)

Structure in_addr
   s_addr.l
EndStructure

Structure sockaddr_in
   sin_family.w
   sin_port.c
   sin_addr.in_addr
   sin_zero.s[8]
EndStructure

name.SOCKADDR_IN
namelen.i = SizeOf(SOCKADDR_IN)

Debug getpeername_(socket,@name.SOCKADDR_IN,@namelen)

hostip = IPString(name\sin_addr,#PB_Network_IPv4)
hostport = Str(name\sin_port)

Debug "Resultats : "
Debug "Port : " + hostport
Debug "IP : " + hostip
Simon White
dCipher Computing
infratec
Always Here
Always Here
Posts: 7658
Joined: Sun Sep 07, 2008 12:45 pm
Location: Germany

Re: How to get IP address for connection opened with host na

Post by infratec »

You forgot \s_addr and you have to swap the port bytes.

Code: Select all

Structure in_addr
  s_addr.l
EndStructure

Structure sockaddr_in
  sin_family.w
  sin_port.u
  sin_addr.in_addr
  sin_zero.a[8]
EndStructure


Define namelen.i, cnx
Define name.SOCKADDR_IN

InitNetwork()

cnx = OpenNetworkConnection("bvddev20.vnkconsultinggroup.com", 30000, #PB_Network_TCP|#PB_Network_IPv4)
socket = ConnectionID(cnx)

namelen = SizeOf(SOCKADDR_IN)

If getpeername_(socket, @name, @namelen) = 0
  Debug IPString(name\sin_addr\s_addr, #PB_Network_IPv4) + ":" + Str(ntohs_(name\sin_port))
EndIf
Last edited by infratec on Thu May 21, 2020 10:22 pm, edited 1 time in total.
infratec
Always Here
Always Here
Posts: 7658
Joined: Sun Sep 07, 2008 12:45 pm
Location: Germany

Re: How to get IP address for connection opened with host na

Post by infratec »

And this works in windows and linux:

Code: Select all

EnableExplicit

Structure in_addr
  s_addr.l
EndStructure

Structure sockaddr_in_structure
  sin_family.w
  sin_port.u
  sin_addr.in_addr
  sin_zero.a[8]
EndStructure

Procedure.u ntohs(uword.u)
  ProcedureReturn uword << 8 | uword >> 8
EndProcedure

Define.i namelen, cnx, socket
Define name.sockaddr_in_structure

InitNetwork()

cnx = OpenNetworkConnection("bvddev20.vnkconsultinggroup.com", 30000, #PB_Network_TCP|#PB_Network_IPv4)
socket = ConnectionID(cnx)

namelen = SizeOf(sockaddr_in_structure)

If getpeername_(socket, @name, @namelen) = 0
  Debug IPString(name\sin_addr\s_addr, #PB_Network_IPv4) + ":" + Str(ntohs(name\sin_port))
EndIf
Something is wrong with the windows ntohs_() call :!:
Also the windows sockaddr_in structure is not usable in this case.
swhite
Addict
Addict
Posts: 805
Joined: Thu May 21, 2009 6:56 pm

Re: How to get IP address for connection opened with host na

Post by swhite »

Thank-you I missed that.

Simon
infratec wrote:You forgot \s_addr and you have to swap the port bytes.

Code: Select all

Structure in_addr
  s_addr.l
EndStructure

Structure sockaddr_in
  sin_family.w
  sin_port.u
  sin_addr.in_addr
  sin_zero.a[8]
EndStructure


Define namelen.i, cnx
Define name.SOCKADDR_IN

InitNetwork()

cnx = OpenNetworkConnection("bvddev20.vnkconsultinggroup.com", 30000, #PB_Network_TCP|#PB_Network_IPv4)
socket = ConnectionID(cnx)

namelen = SizeOf(SOCKADDR_IN)

If getpeername_(socket, @name, @namelen) = 0
  Debug IPString(name\sin_addr\s_addr, #PB_Network_IPv4) + ":" + Str(ntohs_(name\sin_port))
EndIf
Simon White
dCipher Computing
User avatar
mk-soft
Always Here
Always Here
Posts: 6304
Joined: Fri May 12, 2006 6:51 pm
Location: Germany

Re: How to get IP address for connection opened with host na

Post by mk-soft »

Works with macOS too.

First time save that :wink:
My Projects ThreadToGUI / OOP-BaseClass / EventDesigner V3
PB v3.30 / v5.75 - OS Mac Mini OSX 10.xx - VM Window Pro / Linux Ubuntu
Downloads on my Webspace / OneDrive
Post Reply